You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:07:32