使用Keras的load_model加载含PReLU的h5模型报错ValueError如何解决
报错根因
PReLU不属于Keras内置的基础激活函数集合,它本身是带可训练参数的层对象,模型序列化保存为.h5文件时不会自动记录该类的实现逻辑,因此加载时无法自动识别抛出该错误。
可行解决方案
按实际场景选择以下任意一种即可:
方案1:加载时显式传入自定义对象映射
最常用的临时解决方式,无需修改原有保存逻辑,仅加载时额外指定映射关系即可:
# 注意导入路径要和你训练模型时使用的PReLU导入路径完全一致 # 如果你训练时用的是tensorflow.keras,就用 from tensorflow.keras.layers import PReLU from keras.layers import PReLU from keras.models import load_model model = load_model("your_model_path.h5", custom_objects={"PReLU": PReLU})
方案2:全局注册自定义对象
适合需要多次加载带PReLU的模型的场景,注册一次后后续所有加载操作都不需要额外传参数:
from keras.layers import PReLU from keras.utils import get_custom_objects # 全局注册PReLU类 get_custom_objects().update({"PReLU": PReLU}) # 后续直接正常加载即可 model = load_model("your_model_path.h5")
注意事项
训练时和加载时使用的PReLU导入路径必须完全匹配,如果你训练时用的是tensorflow.keras接口的PReLU,加载时就不能用独立Keras库的keras.layers.PReLU,否则仍然会识别失败。
内容的提问来源于stack exchange,提问作者talha06
相关产品推荐
相关产品推荐

