Как вы комбинируете сверточные слои с LSTM в Tensorflow?Особое внимание к time_steps и batch_size - PullRequest
0 голосов
/ 21 декабря 2018

Исходя из Кераса, я привык к оболочке 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уменьшить эти шаги до одного выхода?Предпочтительно это также должно работать с пакетами данных.

Любая помощь приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...