如何在Tensorflow中将卷积层与LSTM结合在一起?特别注意time_steps和batch_size

时间:2018-12-21 12:26:06

标签: python tensorflow conv-neural-network lstm

来自Keras,我习惯了TimeDistributed包装器。现在,我正在寻找Tensorflow中的等效值(或更确切地说,是在Tensorflow中实现的方法)-为了使用卷积层和LSTM计算三个堆叠帧(跨时间)的q值。

到目前为止,我所要做的就是将批次视为序列,例如:

self.input = tf.placeholder(shape=[None, 150, 200, 1],
    dtype=tf.float32, name='image_input')
self.conv0 = tf.layers.conv2d(inputs=self.input, filters=64,
    kernel_size=[8, 8], strides=[4, 4], activation=tf.nn.elu)
self.fc0 = tf.layers.dense(inputs=tf.layers.flatten(self.conv0),
    units=256, activation=tf.nn.elu)

...LSTM cell definition...
batch_size = tf.shape(self.input)[:1]
lstm_in = tf.expand_dims(self.fc0, [0])
self.lstm_out, self.lstm_state = tf.nn.dynamic_rnn(cell=lstm_cell,
    inputs=lstm_in, time_major=False, sequence_length=batch_size,
    dtype=tf.float32)
# keep only the last output
self.lstm_out = tf.reshape(self.lstm_out[-1], [1, self.lstm_size])

self.value = tf.layers.dense(
    inputs=self.lstm_out, units=1, activation=None)

这在前进通道中有效,在此通道中我使用三个堆叠的帧(跨时间,而不是跨通道)。如您所料,输出也具有三个值,因为那是我的batch_size-但我只希望它成为一个!

您知道如何在LSTM将这些步骤减少到单个输出的同时,在所有时间步长上运行卷积层吗?最好也可以处理大量数据。

感谢您的帮助!

0 个答案:

没有答案