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
中引用的myTensorArray
不会添加到循环变量中。需要更好的设计。