Генеративные последовательности в 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, поэтому вы получаете, по сути, то же поведение, которое хотите.

Другие вопросы по тегам