用于语音情感识别的RNN

时间:2018-04-02 10:36:57

标签: tensorflow lstm rnn multiclass-classification

我想将语音数据分为四种不同的情绪(愤怒,悲伤,快乐,中立)。

问题是当我运行RNN代码时,所有语音数据都归为一类。

(例如,所有语音数据始终被归类为“愤怒”。)

我不知道这个问题的原因是什么,以及我需要为培训做些什么改变。

这是我的tensorflow RNN主要功能,用于训练和计算准确度:

def RNN(x, weights, biases, lstm_size):

    lstm_cell = []

    for i in range(lstm_size):
        lstm_cell.append(rnn.BasicLSTMCell(hidden_dim, forget_bias=1.0, state_is_tuple=True, activation=tf.nn.sigmoid))
    stacked_lstm = tf.contrib.rnn.MultiRNNCell(lstm_cell, state_is_tuple=True)
    outputs, states = tf.nn.dynamic_rnn(stacked_lstm, x, dtype=tf.float32)
    foutput = tf.contrib.layers.fully_connected(outputs[:,-1], output_dim, activation_fn = None)

    return foutput

logits = RNN(X, weights, biases, lstm_size)
prediction = tf.nn.sigmoid(logits)
cost =tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logits, labels=Y))  
learning_rate =tf.train.exponential_decay(learning_rate=initial_learning_rate, global_step=training_steps, decay_steps=training_steps/10, decay_rate=0.96, staircase=True)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate) 
train_op = optimizer.minimize(cost)

pred = tf.argmax(prediction, axis=1)
label = tf.argmax(Y, axis=1)
correct_pred = tf.equal(pred, label)

accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float))

RNN的输入是语音特征(音调和MFCC),RNN的输出是单热码。(例如,生气= [1,0,0,0])。

另外,我想知道这样计算分类准确度是否正确。

0 个答案:

没有答案
相关问题