1

我使用以下代码来生成num_steps给定长度的序列,starting_pointstarting_state使用 a 的实例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)

但就我而言,我想将一个步骤的输出作为下一步的输入。

4

1 回答 1

2

在 tensorflow nightly 构建中,请参阅 tf.contrin.seq2seq 了解动态解码器对象。您可以使用预定的采样助手来做您想做的事情。或者使用 tf.nn.dynamic_rnn 并将所有零作为输入。lstm h 状态也是 lstm 输出,因此您可以获得与您想要的基本相同的行为。

于 2017-05-05T21:10:33.887 回答