错误:TensorFlow:必须在程序启动时调用tf.enable_eager_execution。

6
我正在尝试修改来自github的代码:
我遇到了以下错误:
tf.enable_eager_execution must be called at program startup.

我认为问题出在这些代码行:

from __future__ import print_function
import make_dataset

import tensorflow as tf
import tensorflow.contrib.eager as tfe
tf.enable_eager_execution()

此外,我认为我需要急切执行的原因是在我的 with tf.session 代码块中:

with tf.Session() as sess:

# Run the initializer
sess.run(iterator.initializer)

for step in range(1, num_steps+1):
    batch_x, batch_y = myDataset.batch(4)#line where error occurs
    # Run optimization op (backprop)
    sess.run(train_op, feed_dict={X: batch_x, Y: batch_y})

我遇到了错误:

RuntimeError: dataset.__iter__() 仅在启用 eager execution 时支持

所以,在决定更改迭代器或启用 eager execution 方面的指导将是很好的。

非常感谢, Josh


请参考以下链接:https://dev59.com/V1UL5IYBdhLWcg3w4raQ,了解如何在即时执行模式下使用tf.data数据集。 - Abhijeet tripathy
4个回答

6
Eager Execution 的设置只能通过重置运行时来更改。 要重置运行时,请在菜单中查找如何重置运行时,例如我需要转到 Runtime->Reset all runtimes 并点击 Yes。 这有点违反直觉,因为 iPython 执行会记住您第一次执行代码时选择的设置。这意味着,如果您使用 Eager Execution 实例化 Tensorflow,则从该单元格中删除代码并再次运行不会禁用 Eager Execution。同样地,如果您实例化 Tensorflow 时未启用 Eager Execution,则向导入 Tensorflow 的单元块添加启用 Eager Execution 的代码并重新运行该单元格也不会启用 Eager Execution。 解决方案是在运行单元格之前重置运行时并更新代码。这样做后,Tensorflow 将以启用或禁用 Eager Execution 的适当设置运行。

2
您可能希望调试您的myDataset,而不是使用急切执行,因为您所遵循的示例在图形模式下运行。如果您的myDataset是一个tf.data.Dataset对象,则它的batch方法将返回一个无法解包成batch_x, batch_ytf.data.Dataset,即在图形模式下不支持dataset.__iter __()

一种选择是按照指南中的教程操作。您可以从“批处理”数据集中make_one_shot_iteratormake_initializable_iterator(需要通过sess.run(iterator.initializer, ...)进行初始化)。然后,您可以通过batch_x, batch_y = iterator.get_next()在循环中获取每个批次。


0

请在答案中添加相关的代码和解释,而不是链接到外部URL。 - Nilambar Sharma
该链接提供了对于OP可能遇到的问题的讨论以及可能的解决方案。我不需要进行额外的解释和改述。 - user8771957

0
我遇到了同样的错误 - 我不得不去:Kernel -> 从我的Jupyter笔记本菜单中重新启动和清除输出。
对我来说,没有其他办法可行。(甚至关闭Jupyter笔记本并重新启动也不行)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接