我正在尝试训练一个深层的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,并尝试过拟合网络,但仍然是同样的问题。
谁能告诉我我还在做什么?