Исходя из Кераса, я привык к оболочке TimeDistributed
.Теперь я ищу эквивалент в Tensorflow (точнее, способ сделать это в Tensorflow) - чтобы вычислить q-значения для трех стековых кадров (по времени), используя сверточные слои и LSTM.
Пока что все, что мне удалось, - это обрабатывать партии как последовательности, например:
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уменьшить эти шаги до одного выхода?Предпочтительно это также должно работать с пакетами данных.
Любая помощь приветствуется!