Python GradientTape中的简单Keras网络:LookupError:没有为操作定义梯度';IteratorGetNext';(操作类型:IteratorGetNext)

Python GradientTape中的简单Keras网络:LookupError:没有为操作定义梯度';IteratorGetNext';(操作类型:IteratorGetNext),python,tensorflow,keras,gradient,tensorflow2.0,Python,Tensorflow,Keras,Gradient,Tensorflow2.0,我已经建立了一个非常简单的TensorFlow Keras模型,模型中只有一个致密层。它在GradientTape块外工作得非常好,但在GradientTape块内,它会引发LookupError:没有为操作“IteratorGetNext”(op类型:IteratorGetNext)定义梯度 要复制的代码: 从tensorflow.keras.models导入 从tensorflow.keras.layers导入稠密 导入tensorflow作为tf 将numpy作为np导入 打印(tf.\U

我已经建立了一个非常简单的TensorFlow Keras模型,模型中只有一个致密层。它在
GradientTape
块外工作得非常好,但在
GradientTape
块内,它会引发
LookupError:没有为操作“IteratorGetNext”(op类型:IteratorGetNext)定义梯度

要复制的代码:

从tensorflow.keras.models导入
从tensorflow.keras.layers导入稠密
导入tensorflow作为tf
将numpy作为np导入
打印(tf.\U版本\U)
模型=顺序()
添加(密集(1,输入_形状=(16,))
假数据=np.random.random((1,16))
打印(模型。预测(假数据)。形状)#有效
使用tf.GradientTape()作为磁带:
打印(model.predict(fake_data).shape)#LookupError:没有为操作“IteratorGetNext”定义梯度(操作类型:IteratorGetNext)
这似乎适用于TensorFlow 2.0.0,但在TensorFlow 2.1.0和2.2.0中失败


是一个复制问题的笔记本。

尝试以这种方式重新定义GradientTape中的预测操作

with tf.GradientTape() as tape:
    print(model(fake_data).shape)

我真傻,我早该发现的。