来自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将这些步骤减少到单个输出的同时,在所有时间步长上运行卷积层吗?最好也可以处理大量数据。
感谢您的帮助!