使用PolynomialDecay与Adam微调Transformer时遇优化器识别错误求助
问题分析与解决
这个错误的核心是Keras 3与TensorFlow 2.16的导入兼容性问题,或是模型类型(如Hugging Face Transformers模型)与优化器的适配冲突。以下是具体解决方法:
解决方法1:统一使用Keras 3原生导入路径
TensorFlow 2.16绑定的是Keras 3,tensorflow.keras是Keras 3的包装层,但混合两类导入会导致对象不兼容。将所有导入替换为Keras 3原生路径:
from keras.optimizers.schedules import PolynomialDecay from keras.losses import SparseCategoricalCrossentropy from keras.optimizers import Adam import tensorflow as tf num_epochs = 3 num_train_steps = len(tf_train_dataset) * num_epochs lr_scheduler = PolynomialDecay(initial_learning_rate=5e-5, end_learning_rate=0.0, decay_steps=num_train_steps, power=2) opt = Adam(learning_rate=lr_scheduler) loss = SparseCategoricalCrossentropy(from_logits=True) model.compile(optimizer=opt, loss=loss, metrics=["accuracy"])
解决方法2:适配Hugging Face Transformers模型(若使用该库)
如果微调的是Hugging Face的Transformer模型(如TFBertForSequenceClassification),旧版本Transformers对Keras 3优化器支持存在缺陷:
- 升级Transformers到最新兼容版本:
pip install --upgrade transformers
- 若升级后仍报错,将优化器转为字典配置形式传入:
# 获取学习率调度器的配置信息 lr_scheduler_config = lr_scheduler.get_config() # 构建优化器字典配置 optimizer_config = { "optimizer": "Adam", "config": { "learning_rate": lr_scheduler_config # 可按需添加Adam的其他参数,如beta_1、beta_2等 } } model.compile(optimizer=optimizer_config, loss=loss, metrics=["accuracy"])
解决方法3:确保模型兼容性
如果是自定义模型,需确保继承自keras.Model或tf.keras.Model,而非TensorFlow低级API(如tf.Module)——后者的compile方法对Keras优化器的支持有限。
内容的提问来源于stack exchange,提问作者Pulkit Pareek
相关产品推荐
相关产品推荐

