嘿,我想使用CNN RNN对图像进行回归任务,我不知道如何正确处理序列长度和状态 .

我考虑过以下操作:使用CNN提取一帧的功能 . 将展平的激活贴图放入LSTM并保存状态 . 将LSTM输出减少到我的回归值 . 对于下一帧,我将使用前一次迭代恢复LSTM的状态 . 但是,由于我在LSTM细胞周围构建了一个RNN而不是它应该是正确的,所以这感觉完全错了?

但是如果我将一系列帧输入到LSTM中(在CNN应用到所有帧之后),我会得到多个输出和一个状态 . 如果我重用那个状态,我根本看不到帧序列的重点 . 我完全糊涂了 .

目前我正在这样做,但这并不比仅用于每个帧的CNN更好...

with tf.variable_scope('CNN'):
    for time_step in xrange(sequence_length):
        if time_step > 0: tf.get_variable_scope().reuse_variables()
        cnn_res = CNN(images[time_step], normalizer_params=normalizer_params, regularizer=regularizer)
        cnn_outputs.append(cnn_res)

cnn_outputs = tf.pack(cnn_outputs)
with tf.variable_scope('RNN'):
    lstm_cell = LSTMBlockCell(128)
    lstm_cell = tf.nn.rnn_cell.DropoutWrapper(lstm_cell, output_keep_prob=keep_prob)
    cell = tf.nn.rnn_cell.MultiRNNCell([lstm_cell] *3)
    (rnn_outputs, state) = tf.nn.dynamic_rnn(cell, cnn_outputs,initial_state=initial_state, time_major=True,dtype=tf.float32)
    rnn_outputs = rnn_outputs[sequence_length-1] # Using only last output for sequence, also tried to take every output into account.
    rnn_outputs = layers.flatten(rnn_outputs)

一些完全连接的层将 rnn_outputs 减少为我的单个值 .

实际上我想要做的就是这个(只是我希望得到当前接收到的帧的值而没有任何未来的帧):How do you pass video features from a CNN to an LSTM?但我很难在tensorflow中实现这一点