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

use*_*948 11 python machine-learning keras tensorflow tensorflow2.0

我构建了一个非常简单的带有单个密集层的 TensorFlow Keras 模型。它在块外工作得很好GradientTape,但在GradientTape块内它会引发LookupError: No gradient defined for operation 'IteratorGetNext' (op type: IteratorGetNext)

重现代码:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import tensorflow as tf
import numpy as np

print(tf.__version__)

model = Sequential()
model.add(Dense(1, input_shape=(16,)))

fake_data = np.random.random((1, 16))

print(model.predict(fake_data).shape) # works
with tf.GradientTape() as tape:
    print(model.predict(fake_data).shape) # LookupError: No gradient defined for operation 'IteratorGetNext' (op type: IteratorGetNext)
Run Code Online (Sandbox Code Playgroud)

这似乎在 TensorFlow 2.0.0 中有效,但在 TensorFlow 2.1.0 和 2.2.0 中失败

是一个重现该问题的笔记本。

Mar*_*ani 13

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

with tf.GradientTape() as tape:
    print(model(fake_data).shape)
Run Code Online (Sandbox Code Playgroud)