Генеративные последовательности в Tensorflow
Я использую следующий код как способ генерации последовательности длины num_steps
дано starting_point
а также starting_state
используя экземпляр RNNCell
, например cell=GRUCell(number_of_neurons)
,
outputs = [starting_point]
state = starting_state
for time_step in range(num_steps):
if time_step > 0: tf.get_variable_scope().reuse_variables()
(cell_output, state) = cell(outputs[time_step], state)
outputs.append(cell_output)
Но это медленно и громоздко для моего случая использования, где num_steps = 1000
, Даже создание графа занимает вечность.
Есть ли эта функциональность где-то в Tensroflow, и я просто пропустил это?
Обратите внимание, что то, что я ищу, похоже, но отличается от поведения tf.contrib.rnn.static_rnn
, Документация суммирует поведение этой функции как простое применение RNN к каждому временному шагу в последовательности:
state = cell.zero_state(...)
outputs = []
for input_ in inputs:
output, state = cell(input_, state)
outputs.append(output)
return (outputs, state)
Но в моем случае я хочу передать выходные данные из одного шага в качестве входных данных для следующего шага.
1 ответ
В ночных сборках тензорного потока см. Tf.contrin.seq2seq для объектов динамического декодера. Вы можете использовать запланированные помощники выборки, чтобы делать то, что вы хотите. В качестве альтернативы используйте tf.nn.dynamic_rnn и введите все нули в качестве входных данных. Состояние lstm h также является выводом lstm, поэтому вы получаете, по сути, то же поведение, которое хотите.