[英]Error while compiling a model using the adam optimizer in tensorflow keras
我正在尝试使用 Adam 优化器构建 ResNet50 model。 这是我的代码:
import tensorflow as tf
cifar = tf.keras.datasets.cifar100
(x_train, y_train), (x_test, y_test) = cifar.load_data()
model = tf.keras.applications.ResNet50(
include_top=True,
weights=None,
input_shape=(32, 32, 3),
classes=100,)
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer="adam", loss=loss_fn, metrics=["accuracy"])
model.fit(x_train, y_train, epochs=5, batch_size=64)
但是当我运行它时,它会出现以下错误:
tensorflow.python.framework.errors_impl.NotFoundError: Graph execution error:
我试过改变:
optimizer="adam"
到:
optimizer=tf.keras.optimizers.Adam
但我得到另一个错误:
ValueError: Could not interpret optimizer identifier: <class 'keras.optimizers.optimizer_experimental.adam.Adam'>
我在网上搜索过,但没有找到答案。 有什么帮助吗?
问题不应该来自优化器。 为了正确使用from_logits=True
,可以将classifier_activation=False
参数传递给tf.keras.applications.ResNet50
以返回“顶层”层的对数( TensorFlow 文档):
import tensorflow as tf
cifar = tf.keras.datasets.cifar100
(x_train, y_train), (x_test, y_test) = cifar.load_data()
model = tf.keras.applications.ResNet50(
include_top=True,
weights=None,
input_shape=(32, 32, 3),
classes=100,
classifier_activation=None,
)
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer="adam", loss=loss_fn, metrics=["accuracy"])
model.fit(x_train, y_train, epochs=1, batch_size=64)
Output:
782/782 [==============================] - 2259s 3s/step - loss: 4.7819 - accuracy: 0.0762
或者,可以使用softmax
作为激活,但使用from_logits=False
:
import tensorflow as tf
cifar = tf.keras.datasets.cifar100
(x_train, y_train), (x_test, y_test) = cifar.load_data()
model = tf.keras.applications.ResNet50(
include_top=True,
weights=None,
input_shape=(32, 32, 3),
classes=100,
classifier_activation='softmax',
)
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
model.compile(optimizer="adam", loss=loss_fn, metrics=["accuracy"])
model.fit(x_train, y_train, epochs=1, batch_size=64)
Output:
782/782 [==============================] - 2350s 3s/step - loss: 4.7012 - accuracy: 0.0830
我使用 Python 3.10 和 Tensorflow 2.11.0。 代码仅适用于用户警告丢失 function
“UserWarning:” sparse_categorical_crossentropy
received from_logits=True
,但output
参数是由 Softmax 激活产生的,因此不代表 logits。 这是故意的吗? output, from_logits = _get_logits("
也许你可以试试“loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)”
import tensorflow as tf
cifar = tf.keras.datasets.cifar100
(x_train, y_train), (x_test, y_test) = cifar.load_data()
model = tf.keras.applications.resnet50.ResNet50(
include_top=True,
weights=None,
input_shape=(32, 32, 3),
classes=100,)
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
model.compile(optimizer="adam", loss=loss_fn, metrics=["accuracy"])
model.fit(x_train, y_train, epochs=5, batch_size=64)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.