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 块中:

使用 tf.Session() 作为 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__() is only supported when eager execution is enabled

因此,在决定更改迭代器或启用急切执行方面的指导会很棒。

非常感谢,乔希

4

4 回答 4

6

Eager Execution 设置只能通过重置运行时进行更改。要重置运行时,请在您的菜单中查找如何重置运行时,在我的情况下,我必须导航到Runtime->Reset all runtimes并单击Yes

这有点违反直觉,因为 iPython 执行会记住您第一次执行代码时选择的设置。这意味着,如果您在启用 Eager Execution 的情况下实例化 Tensorflow,则从该单元格中删除代码并再次运行它不会禁用 Eager Execution。同样,如果您在未启用 Eager Execution 的情况下实例化 Tensorflow,则将启用 Eager Execution 的代码添加到导入 Tensorflow 的单元块并重新运行该单元将不会启用 Eager Execution。

解决方案是在运行单元之前重置运行时并更新代码。当你这样做时,Tensorflow 将在启用或禁用 Eager Execution 的适当设置的情况下运行。

于 2018-10-11T19:31:02.023 回答
2

您可能想要调试您的myDataset而不是使用急切执行,因为您遵循的示例在图形模式下运行。如果你myDataset是一个tf.data.Dataset对象。它的batch方法将返回一个tf.data.Dataset不能解包到batch_x, batch_y的,即dataset.__iter__()图形模式不支持。

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

于 2018-05-11T05:45:17.130 回答
0

我遇到了同样的错误 - 我必须从我的 Jupyter 笔记本菜单中转到:内核 -> 重新启动和清除输出。

没有其他东西对我有用。(甚至没有关闭 Jupyter 笔记本并重新启动它)

于 2019-09-01T03:18:47.437 回答
0

参考这个字符串,也许有帮助。

https://github.com/googlecolab/colabtools/issues/262

(这是针对 google colab,但您可能会找到其他相关信息)

于 2019-07-03T09:34:51.297 回答