在深度LSTM网络中,误差减少但精度在0至40之间波动

时间:2019-02-21 17:26:51

标签: python tensorflow neural-network lstm recurrent-neural-network

我正在尝试训练一个深层的LSTM网络进行分类。

我正在将长度为1000的特征向量输入到LSTM网络中。

linput  = tf.placeholder(tf.float32,shape=[None,20,1000],name= 'lstm_input')

with tf.device('/gpu:0'):
    with tf.variable_scope('deep__lstm__7'):      

        lstm_cells = [tf.nn.rnn_cell.LSTMCell(hidden_units, state_is_tuple=True) for hidden_units in [1024,1024,1024,1024,1024,1024,512]] # tf.nn.rnn_cell.GRUCell or tf.nn.rnn_cell.BasicRNNCell instead 

        cells = tf.nn.rnn_cell.MultiRNNCell(lstm_cells, state_is_tuple=True)

        init_state = cells.zero_state(5, tf.float32)

        rnn_outputs, final_state = tf.nn.dynamic_rnn(cells, linput, initial_state=init_state)

        W = tf.get_variable('W', [512,6])
        b = tf.get_variable('b', [6],initializer=tf.constant_initializer(0.0))

        outputs = tf.reshape(rnn_outputs, [-1, hidden_units])

        op1 = tf.reshape(outputs[inds[0]],[1,hidden_units])
        op2 = tf.reshape(outputs[inds[1]],[1,hidden_units])
        op3 = tf.reshape(outputs[inds[2]],[1,hidden_units])
        op4 = tf.reshape(outputs[inds[3]],[1,hidden_units])
        op5 = tf.reshape(outputs[inds[4]],[1,hidden_units])

        output = tf.concat([op1,op2,op3,op4,op5],axis=0)

        logits = tf.matmul(output, W) + b

我使用了op1,op2,op3,op4,op5,因为我使用的批处理大小等于5,并且每个批处理使用了20个时间步长。因此,我将在最后一个时间步中获取批次中每个元素的LSTM网络输出。

我的深LSTM网络输入是从KTH数据集中的视频帧中提取的特征。

即第一维代表批处理大小,第二维代表帧数,即时间步长,最后一个代表特征向量的长度。

我正在随机采样20个帧,以消除帧中的任何冗余。

现在,我面临的问题是,误差正在减小,但即使经过1000次迭代,精度仍在0%到40%之间波动。

如代码所示,我尝试将层数从3增加到7,并尝试过拟合网络,但仍然是同样的问题。

谁能告诉我我还在做什么?

0 个答案:

没有答案