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

Jos*_*Ong 5 python tensorflow tensorflow2.0

我正在尝试修改来自github 的代码:

我收到此错误:

tf.enable_eager_execution must be called at program startup.
Run Code Online (Sandbox Code Playgroud)

我认为它来自这些代码行:

from __future__ import print_function
import make_dataset

import tensorflow as tf
import tensorflow.contrib.eager as tfe
tf.enable_eager_execution()
Run Code Online (Sandbox Code Playgroud)

另外,我认为我需要急切执行的原因是因为在我的 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})
Run Code Online (Sandbox Code Playgroud)

我收到错误:

RuntimeError: dataset.__iter__() is only supported when eager execution is enabled

因此,决定更改迭代器或启用急切执行的指导将非常有用。

非常感谢,乔希

hex*_*cle 5

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

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

解决方案是在运行单元之前重置运行时并更新代码。执行此操作时,Tensorflow 将在启用或禁用 Eager Execution 的适当设置下运行。


Y. *_*Luo 2

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

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