<p>我已经创建了一个PR <a href="https://github.com/tensorflow/tensorflow/pull/9995" rel="nofollow noreferrer">here</a>,它可能会帮助您处理简单的案例</p>
<p>让我简单地解释一下我的实现,这样您就可以根据需要编写自己的版本。主要是修改<code>_time_step</code>函数:</p>
<pre><code>def _time_step(time, output_ta_t, state, *args):
</code></pre>
<p>除了传入额外的<code>*args</code>,参数保持不变。但是为什么<code>args</code>?因为我想支持tensorflow的习惯行为。您只能通过忽略<code>args</code>参数返回最终状态:</p>
^{pr2}$
<p>如何利用它?在</p>
<pre><code>if args:
args = tuple(
ta.write(time, out) for ta, out in zip(args[0], [new_state])
)
</code></pre>
<p>实际上,这只是对以下(原始)代码的修改:</p>
<pre><code>output_ta_t = tuple(
ta.write(time, out) for ta, out in zip(output_ta_t, output)
)
</code></pre>
<p>现在,<code>args</code>应该包含您想要的所有状态。在</p>
<p>完成以上所有工作后,您可以使用以下代码获取状态(或最终状态):</p>
<pre><code>_, output_final_ta, *state_info = control_flow_ops.while_loop( ...
</code></pre>
<p>以及</p>
<pre><code>if states_ta is not None:
final_state, states_final_ta = state_info
else:
final_state, states_final_ta = state_info[0], None
</code></pre>
<p>虽然我没有在复杂的情况下测试它,但它应该在“简单”的条件下工作(<a href="https://github.com/carefree0910/MachineLearning/blob/master/RNN/Test/UnitTest.py" rel="nofollow noreferrer">here's</a>我的测试用例)</p>