我正在尝试编写与图形兼容的代码。但是,关于如何执行此操作的在线信息很少,只是TensorFlow的website上的文字脚注。此外,他们所写的内容令人困惑,说:
为急切执行而编写的相同代码也将在图执行期间构建图。为此,只需在未启用急切执行的新Python会话中运行相同的代码即可。
这意味着可以使用相同的代码解决方案,其中唯一需要的更改是添加或删除tf.enable_eager_execution()
。
当前,我使用tf.keras
定义模型,并使用tf.data
定义输入管道。但是,许多急切的操作在图形中不起作用,反之亦然。
例如,我使用epochs
来跟踪tf.train.Checkpoint()
的数量。在急切模式下,还原后,我可以使用epochs.numpy()
来访问它,以将其值分配给局部变量。但是,这不适用于图,由于在执行期间未定义值,因此将需要sess.run(epochs)
。
再次,为了急切地计算我的梯度,我需要使用某种形式的autograd,在我的情况下为tf.GradientTape()
。这与图形不兼容,因为“ tf.GradientTape.gradients()不支持图形控制流。”
我看到tfe.py_func
存在,但是再一次,这仅在未启用渴望时才起作用,因此无济于事。
当渴望和图形的许多方面似乎直接相互冲突时,我该如何制定相同的代码解决方案?