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

Keras加载含coeff_determination指标模型传custom_objects仍报错如何解决

问题排查与解决方案

错误原因

你传入load_model的custom_objects参数字典结构不符合Keras的匹配规则:Keras加载时会直接以自定义对象的名称字符串作为键查找对应的实现,你当前将自定义指标放在metrics键下,Keras无法匹配到名为coeff_determination的对象,因此抛出未知指标错误。

修复方案

方案1:直接修正custom_objects字典结构

把你定义的dependencies变量修改为以下格式即可正常运行:

## metric function
def coeff_determination(y_true, y_pred):
    SS_res =  K.sum(K.square( y_true-y_pred )) 
    SS_tot = K.sum(K.square( y_true - K.mean(y_true) ) ) 
    return ( 1 - SS_res/(SS_tot + K.epsilon()) )


## load models from file
def load_all_models(n_models,Cus_bjects):
    all_models = list()
    for i in range(n_models):
        # define filename for this ensemble
        filename = 'snapshot_model_' + str(i + 1) + '.h5'
        # load model from file
        model = load_model(filename,custom_objects=Cus_bjects)
        # add to list of members
        all_models.append(model)
        print('>loaded %s' % filename)
    return all_models

## 修正后的依赖声明
dependencies = {'coeff_determination': coeff_determination}
members = load_all_models(10,dependencies)

方案2:预先注册自定义对象(可选,避免每次加载传参)

如果不想每次加载模型都手动传入custom_objects,可以在定义自定义指标时添加注册装饰器,后续加载模型无需额外传参即可识别自定义指标:

import tensorflow as tf

## 注册后的自定义指标
@tf.keras.utils.register_keras_serializable()
def coeff_determination(y_true, y_pred):
    SS_res =  K.sum(K.square( y_true-y_pred )) 
    SS_tot = K.sum(K.square( y_true - K.mean(y_true) ) ) 
    return ( 1 - SS_res/(SS_tot + K.epsilon()) )

内容的提问来源于stack exchange,提问作者mohammad24

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:30:06