Tensorflow:while循环的跨行切片错误

2024-05-16 21:54:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个相当复杂的seq2seq类型模型(基于“一个神经传感器”),在Tensorflow的最新版本中,以下代码返回错误:

Cannot use 'transducer_training/while/rnn/strided_slice' as input to 'gradients/transducer_training/while/rnn/while/Select_1_grad/Select/f_acc' because 'transducer_training/while/rnn/strided_slice' is in a while loop

该代码以前有效,只是在最新版本停止后: 纽比(1.14.0) protobuf(3.5.1)tensorflow(1.5.0)tensorflow gpu (1.3.0)tensorflow tensorboard(1.5.1)Ubuntu版本16.04.3 LTS (谢尼尔·施鲁斯)

代码(要获取错误,只需复制、粘贴并运行它):

^{pr2}$

Tags: 代码模型版本类型tensorflow错误trainingslice
2条回答

在这种特殊情况下,错误似乎被错误地提出(请参阅评论中的github问题)。但是,一般来说,这些错误意味着:

错误消息所抱怨的使用模式始终是非法的。早期版本的TensorFlow只是没有很好的检查。在

问题的核心是,在TensorFlow的执行模型中,您不能使用在while循环内部、外部创建的张量。为了简单地说明这一点,请看一下这个test case。在

您可以通过立即从here返回来禁用检查,但计算图的格式将不正确,这可能导致未定义的行为。在

正确的解决方法是将要在while循环之外(在condbody函数之外)访问的所有张量添加到loop_vars中,并使用从tf.while_loop返回的值。在

最近,当我把dynamic_rnn放入scan(即while循环)中时,我遇到了类似的问题。这个bug似乎只在TensorFlow 1.5中引入。您可以尝试将TensorFlow版本降级到1.4或升级到1.6。两者都应该有效。在

相关问题 更多 >