Tensorflow 计算while循环中的张量数组时出错

Tensorflow 计算while循环中的张量数组时出错,tensorflow,Tensorflow,我构建了以下TensorArray: ta = tf.TensorArray( dtype=tf.float32, size=0, dynamic_size=True, element_shape=tf.TensorShape([None, None]) ) 在while\u循环中调用ta=ta.write(idx,my\u张量) 在会话中评估output=ta.stack()tensor时,我收到以下错误消息: ValueError:无法将“…/Tens

我构建了以下
TensorArray

ta = tf.TensorArray(
    dtype=tf.float32,   
    size=0,
    dynamic_size=True,
    element_shape=tf.TensorShape([None, None])
)
while\u循环中调用
ta=ta.write(idx,my\u张量)

在会话中评估
output=ta.stack()
tensor时,我收到以下错误消息:

ValueError:无法将“…/TensorArrayWrite/TensorArrayWriteV3”用作 输入到“…/TensorArrayStack_1/TensorArraySizeV3”,因为 “…/tensorraywrite/tensorraywritev3”处于while循环中。参见信息 登录以了解更多详细信息

我不明白这个错误信息,你能帮我吗


更新:可能很难找到一个最简单的例子,但这就是我正在做的:我使用的是的
cell\u input\fn
中的
ta
TensorArray的引用。此回调用于
AttentionWrapper
调用
方法,其中正在编写另一个名为
alignment\u history
TensorArray
。因此,
虽然循环
代码不是我设计的,但它是TF动态RNN计算的一部分

不确定这是否是你的心病,但你必须确保while_循环函数将张量数组作为输入,并将更新后的数组作为输出;您必须在while_循环结束时使用Tensorary的最终版本:

def fn(ta_old):
  return ta_old.write(...)

ta_final = while_loop(..., body=fn, [tf.TensorArray(...)])

values = ta_final.stack()

具体来说,您不应该访问fn()之外的ta_old。

如果没有更多代码,很难说。你能给出一个完整的关于这个问题的最简单的例子吗?@jdehesa我几个小时前更新了我的帖子,如果这足够清楚,请现在告诉我。这个错误是由
中的
大小
调用
\u graphnsesorarray
触发的,它来自
堆栈
。既然您熟悉
注意包装器
代码,那么根据您的评论,是否可以让
单元格输入
在循环
时使用相同的RNN
,同时使用
对齐
历史
Tensorary
更新
Tensorary
,我想我理解了:
while\u loop
内部的
动态\u rnn
将单元格状态作为循环变量之一。因此,
cell\u input\u fn
中引用的my
TensorArray
不会添加到循环变量中。需要更好的设计。