Keras加载Adagrad编译模型报错:weight_decay为意外参数
解决加载Adagrad优化器模型时的weight_decay参数错误
问题根源
你没手动传weight_decay却报这个错,核心原因是模型保存时的TensorFlow/Keras版本和当前加载的版本不兼容:
- 旧版本的Adagrad优化器类里没有
weight_decay参数,但模型保存时,训练环境的配置(比如当时版本的隐性配置、封装逻辑)把这个参数写入了优化器的配置文件中。 - 现在加载用的Adagrad版本不支持该参数,所以触发报错。
另外你代码里的"Custom>Adagrad"键大概率是写错了,应该对应模型保存时优化器的注册名称,一般就是"Adagrad"。
可行解决方案
方案1:自定义Adagrad忽略不支持的参数
重写Adagrad的配置解析逻辑,自动过滤掉weight_decay参数:
import tensorflow as tf from tensorflow.python import keras from keras.optimizers import Adagrad from Mod import MyLossPokus # 自定义Adagrad,处理不兼容的weight_decay参数 class CustomAdagrad(Adagrad): def __init__(self, weight_decay=None, **kwargs): # 直接忽略weight_decay参数 super().__init__(**kwargs) @classmethod def from_config(cls, config): # 从配置字典中移除weight_decay(如果存在) config.pop('weight_decay', None) return super().from_config(config) modelName = "/some/path" # 用自定义类替换原Adagrad加载模型 model = keras.models.load_model( modelName, custom_objects={'MyLossPokus': MyLossPokus, "Adagrad": CustomAdagrad} )
方案2:跳过自动编译,手动重新编译模型
如果不需要恢复原优化器的训练状态,可以关闭自动编译,之后手动重新配置:
import tensorflow as tf from tensorflow.python import keras from keras.optimizers import Adagrad from Mod import MyLossPokus modelName = "/some/path" # 加载模型时不自动编译 model = keras.models.load_model( modelName, custom_objects={'MyLossPokus': MyLossPokus}, compile=False ) # 手动重新编译,按需求配置优化器参数 model.compile( optimizer=Adagrad(lr=0.01), # 替换为你需要的学习率等参数 loss=MyLossPokus() )
方案3:匹配模型保存时的TF/Keras版本
如果必须完整恢复原优化器状态,建议安装和保存模型时完全一致的TensorFlow/Keras版本,版本匹配后就能正常加载。
内容的提问来源于stack exchange,提问作者velkyvont
相关产品推荐
相关产品推荐

