VGG16迁移学习模型加载报错:未知指标f1_score的解决问询
模型加载报错:Unknown metric function: f1_score 的原因及解决方法
报错原因
- Keras保存模型时,仅会记录内置指标、层的名称,自定义的
f1_score不属于TensorFlow/Keras内置指标,保存后只留下函数名"f1_score",加载时无法找到对应的函数实现,因此触发该错误。 - 编译模型时你将
f1_score加入了METRICS列表,模型保存时会同步记录编译阶段的指标配置,但自定义函数的代码不会被自动序列化到H5文件中。
加载模型需传入的自定义对象
仅需将自定义的f1_score函数传入load_model的custom_objects参数即可。训练时使用的回调函数(ReduceLROnPlateau、ModelCheckpoint、EarlyStopping)属于训练流程工具,不影响模型结构与权重,加载时无需传入。
正确加载代码示例
def f1_score(y_true, y_pred): # 必须与训练时定义的函数完全一致 true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1))) possible_positives = K.sum(K.round(K.clip(y_true, 0, 1))) predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1))) precision = true_positives / (predicted_positives + K.epsilon()) recall = true_positives / (possible_positives + K.epsilon()) f1_val = 2*(precision*recall)/(precision+recall+K.epsilon()) return f1_val # 加载模型 model = tf.keras.models.load_model('Study3_v1.h5', custom_objects={'f1_score': f1_score})
内容的提问来源于stack exchange,提问作者Ethan Brown
相关产品推荐
相关产品推荐

