这是这个问题的重复How can I feed last output y(t-1) as input for generating y(t) in tensorflow RNN?
我想在时间步T将RNN的输出作为时间步骤T 1的输入传递. input_RNN(T+1) = output_RNN(T)
根据文档,tf.nn.rnn以及tf.nn.dynamic_rnn函数明确地将完整输入传递给所有时间步骤 .
我在https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/seq2seq.py检查了seq2seq示例 . 它使用循环并调用单元格(输入,状态)函数 . 细胞可以是lstm或gru或任何其他rnn细胞 . 我检查了文档以找到cell()的参数的数据类型和形状,但我发现只有表单单元格的构造函数(num_neurons) . 我想知道将输出传递给输入的正确方法 . 我不想使用像tensorflow构建的keras之类的其他库/包装器 . 有什么建议?
2 回答
一种方法是将您自己的RNN小区与您自己的多RNN小区一起编写 . 这样,您可以在内部存储最后一个RNN单元的输出,并在下一个时间步骤中访问它 . 有关详细信息,请查看blogpost . 您也可以添加例如编码器或解码器直接在单元格中,以便您可以在将数据馈送到单元格之前或从单元格中检索数据之后处理数据 .
另一种可能性是使用函数
tf.nn.raw_rnn
,它可以控制在调用RNN单元格之前和之后发生的事情 . 以下代码段显示了如何使用此函数,信用转到this article .作为旁注:目前尚不清楚在培训期间依赖模型的输出是否是一个好主意 . 特别是在开始时,模型的输出可能非常糟糕,因此您的训练可能永远不会收敛或者可能无法学到任何有意义的东西 .
与网络层一起定义init_state:
然后在你身边training_steps_loop初始化零状态:
在training_steps_loop中运行会话并将_init_state放在feed_dict中,并将返回的_current_state返回到新的_init_state以进行下一步: