加载TensorFlow的.h5模型时报weight_decay参数无效的错误求助
解决方案
方法1:使用旧版兼容优化器加载模型
新版Keras提供了legacy(旧版)优化器模块,完全兼容旧模型的参数配置,加载时直接指定即可:
from tensorflow.keras.models import load_model from tensorflow.keras.optimizers.legacy import Adam as LegacyAdam # 替换为你的模型路径 model = load_model('你的模型文件.h5', custom_objects={'Adam': LegacyAdam})
如果模型使用其他优化器(如SGD),替换为对应legacy版本即可,比如将SGD换成legacy.SGD。
方法2:降级TensorFlow/Keras到原版本
若不想修改代码,可直接降级到之前能正常运行的TensorFlow版本,在Anaconda Prompt中执行:
# 替换为你之前使用的版本号,比如2.8.0 conda install tensorflow==2.8.0
环境更新完成后,重新运行加载模型的代码即可恢复正常。
方法3:重新训练并保存模型(若有训练代码)
如果保留了原训练代码,可改用新版Keras的优化器API重新训练并保存模型,适配新版本环境:
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense from tensorflow.keras.optimizers import Adam # 构建原模型结构(示例) model = Sequential() model.add(LSTM(64, input_shape=(10, 1))) model.add(Dense(1)) # 新版API配置优化器(weight_decay参数可直接传入) optimizer = Adam(weight_decay=0.001) model.compile(optimizer=optimizer, loss='mse') # 训练后保存模型 model.fit(X_train, y_train, epochs=10) model.save('适配新版的模型.h5')
问题原因
重装Anaconda/Spyder后,TensorFlow/Keras版本被升级,新版的optimizer_experimental.Optimizer不再支持直接传入weight_decay参数,但旧模型保存时的优化器配置包含该参数,导致加载时出现参数不兼容错误。
内容的提问来源于stack exchange,提问作者ayps
相关产品推荐
相关产品推荐

