配置多评估指标的Keras模型加载时报ValueError错误求助
解决方案
报错核心原因
你遇到的报错是因为加载模型时传入的custom_objects配置不符合要求,和你配置了多个评估指标没有直接关联:
- 你自定义的三个指标函数是无意义的空实现,不符合Keras指标的序列化/反序列化规范
custom_objects的键值映射未匹配训练时使用的指标类标识
修复后的加载代码
不需要自行伪造指标实现,直接引入训练时使用的对应指标类传入custom_objects即可:
from keras.models import load_model import tensorflow as tf import tensorflow_addons as tfa model_new = load_model( "CNN_model_fit_1.2", custom_objects={ "BinaryAccuracy": tf.keras.metrics.BinaryAccuracy, "HammingLoss": tfa.metrics.HammingLoss, "F1Score": tfa.metrics.F1Score } )
如果上述配置仍提示找不到自定义对象,可以用全局自定义对象作用域包裹加载逻辑,兼容性更强:
from keras.models import load_model from tensorflow.keras.utils import custom_object_scope import tensorflow as tf import tensorflow_addons as tfa with custom_object_scope({ "BinaryAccuracy": tf.keras.metrics.BinaryAccuracy, "HammingLoss": tfa.metrics.HammingLoss, "F1Score": tfa.metrics.F1Score }): model_new = load_model("CNN_model_fit_1.2")
注意事项
- 不要用空函数替代原生指标实现,会导致加载后模型的指标计算结果完全错误
- 单指标和多指标场景的
custom_objects配置逻辑完全一致,仅需要把所有用到的非Keras内置的指标、自定义层、损失函数都加入映射字典即可 - 如果是自行实现的自定义指标,需要在类中实现
get_config方法,保证模型保存时可以正常序列化指标配置
内容的提问来源于stack exchange,提问作者hideonbush
相关产品推荐
相关产品推荐

