在Google Colab中使用Adam优化器报错:无法识别优化器标识符
问题
我尝试在Google Colab中使用Adam优化器,编写了如下代码:
import tensorflow as tf import numpy as np from transformers import BertTokenizer, TFBertForSequenceClassification from tensorflow.keras.optimizers import Adam from tensorflow.keras.losses import SparseCategoricalCrossentropy
使用以下代码编译模型:
model.compile( optimizer=tf.keras.optimizers.Adam(learning_rate=2e-5), loss=SparseCategoricalCrossentropy(from_logits=True), metrics=["accuracy"] )
但运行后出现如下错误:
ValueError Traceback (most recent call last) <ipython-input-38-0183d53e319d> in <cell line: 0>() ----> 1 model.compile( 2 optimizer=tf.keras.optimizers.Adam(learning_rate=2e-5), 3 loss=SparseCategoricalCrossentropy(from_logits=True), 4 metrics=["accuracy"] 5 ) 2 frames /usr/local/lib/python3.11/dist-packages/tf_keras/src/optimizers/__init__.py in get(identifier, **kwargs) 333 ) 334 else: --> 335 raise ValueError( 336 f"Could not interpret optimizer identifier: {identifier}" 337 ) ValueError: Could not interpret optimizer identifier: <keras.src.optimizers.adam.Adam object at 0x7cef33ad4050>
解决方案
这个错误源于TensorFlow与Keras的版本兼容性冲突:你使用的TFBertForSequenceClassification基于tf_keras(Keras 3.x)构建,但传入的Adam优化器是旧版tensorflow.keras下的实例,两者无法兼容。
有两种直接的解决方式:
- 方式一:使用字符串/字典形式传入优化器
让模型自动匹配兼容的优化器版本,若需指定学习率,用字典配置:
model.compile( optimizer={"class_name": "Adam", "config": {"learning_rate": 2e-5}}, loss=SparseCategoricalCrossentropy(from_logits=True), metrics=["accuracy"] )
如果不需要自定义学习率,直接传字符串即可:
model.compile( optimizer="adam", loss=SparseCategoricalCrossentropy(from_logits=True), metrics=["accuracy"] )
- 方式二:导入兼容的Adam优化器
修改导入语句,直接从keras或tf_keras库导入适配的Adam:
# 替换原有的from tensorflow.keras.optimizers import Adam from keras.optimizers import Adam # 或者 from tf_keras.optimizers import Adam
之后编译模型时正常使用实例:
model.compile( optimizer=Adam(learning_rate=2e-5), loss=SparseCategoricalCrossentropy(from_logits=True), metrics=["accuracy"] )
也可以选择降级TensorFlow到2.15等稳定版本(!pip install tensorflow==2.15),避开Keras 3.x的兼容性问题,但优先推荐前两种方法。
内容的提问来源于stack exchange,提问作者john doe
相关产品推荐
相关产品推荐

