TF 2.3 中的错误。当混合 Eager 和 non-Eager Keras 模型时
Posted
技术标签:
【中文标题】TF 2.3 中的错误。当混合 Eager 和 non-Eager Keras 模型时【英文标题】:Error in TF 2.3. when mixing eager and non-eager Keras models 【发布时间】:2021-06-06 05:57:09 【问题描述】:我在尝试在 Tenserlfow 2.3 中拟合模型时遇到了这个问题,是否有任何解决方法或解决方案?当我尝试使用 TensorFlow 神经网络模型预测一些记录时,也会发生此错误。我希望 Tensorflow 专家能找出问题所在!
代码:
import tensorflow as tf
import numpy as np
DO_BUG = True
inputs = tf.keras.Input((1,))
outputs = tf.keras.layers.Dense(10)(inputs)
model0 = tf.keras.Model(inputs=inputs, outputs=outputs)
if DO_BUG:
with tf.Graph().as_default():
inputs = tf.keras.Input((1,))
outputs = tf.keras.layers.Dense(10)(inputs)
model1 = tf.keras.Model(inputs=inputs, outputs=outputs)
model0.compile(optimizer=tf.optimizers.SGD(0.1), loss=tf.losses.mse)
model0.fit(np.zeros((4, 1)), np.zeros((4, 10)))
日志:
Traceback (most recent call last):
File ".../tmp.py", line 15, in <module>
model0.fit(np.zeros((4, 1)), np.zeros((4, 10)))
File "...\tensorflow\python\keras\engine\training_v1.py", line 807, in fit
use_multiprocessing=use_multiprocessing)
File "...\tensorflow\python\keras\engine\training_arrays.py", line 666, in fit
steps_name='steps_per_epoch')
File "...\tensorflow\python\keras\engine\training_arrays.py", line 189, in model_iteration
f = _make_execution_function(model, mode)
File "...\tensorflow\python\keras\engine\training_arrays.py", line 557, in _make_execution_function
return model._make_execution_function(mode)
File "...\tensorflow\python\keras\engine\training_v1.py", line 2072, in _make_execution_function
self._make_train_function()
File "...\tensorflow\python\keras\engine\training_v1.py", line 2021, in _make_train_function
**self._function_kwargs)
File "...\tensorflow\python\keras\backend.py", line 3933, in function
'eager execution. You passed: %s' % (updates,))
ValueError: `updates` argument is not supported during eager execution. You passed: [<tf.Operation 'training/SGD/SGD/AssignAddVariableOp' type=AssignAddVariableOp>]
【问题讨论】:
您使用的 tensorflow 版本是什么?我认为 tf-2.x 版本不支持使用tf.Graph().as_default()
。您使用它的任何具体原因?
【参考方案1】:
下面的代码可以正常工作。使用下面评论部分的任何具体原因。
import tensorflow as tf
import numpy as np
DO_BUG = True
inputs = tf.keras.Input((1,))
outputs = tf.keras.layers.Dense(10)(inputs)
model0 = tf.keras.Model(inputs=inputs, outputs=outputs)
"""
if DO_BUG:
with tf.Graph().as_default():
inputs = tf.keras.Input((1,))
outputs = tf.keras.layers.Dense(10)(inputs)
model1 = tf.keras.Model(inputs=inputs, outputs=outputs)
"""
model0.compile(optimizer=tf.optimizers.SGD(0.1), loss=tf.losses.mse)
model0.fit(np.zeros((4, 1)), np.zeros((4, 10)))
【讨论】:
以上是关于TF 2.3 中的错误。当混合 Eager 和 non-Eager Keras 模型时的主要内容,如果未能解决你的问题,请参考以下文章
如何在 TF 2.0 / 1.14.0-eager 和自定义训练循环(梯度磁带)中执行梯度累积?
TensorFlow报错:tf.placeholder() is not compatible with eager execution.
TensorFlow报错:tf.placeholder() is not compatible with eager execution.