在Keras中使用自定义指标功能时出错

时间:2019-02-15 21:57:21

标签: python keras metrics

在尝试使用自定义函数在Keras中编译lstm模型时遇到问题。

我已经定义了一个名为mean_p_e的自定义指标函数,并且想在Keras内置的模型中使用它。

我的代码是:

import keras.backend as K
def mean_p_e(y_true, y_pred):
    return K.mean((y_true - y_pred)**2/y_true)

然后我建立模型,并将其存储在json文件中:

"model": {
    "loss": "mse",
    "optimizer": "adam",
    "save_dir": "saved_models",
    "metric":"mean_p_e",

然后我编译:

model.compile(loss=configs['model']['loss'], optimizer=configs['model']['optimizer'], metrics=['accuracy', configs['model']['metric']])

然后出现以下错误:

  

ValueError:未知度量标准函数:mean_p_e

要使其生效,我需要更改什么?

1 个答案:

答案 0 :(得分:0)

如果您在同一脚本中定义configs,只需将"metric":"mean_p_e"中的"metric":mean_p_e替换为configs,一切正常。

但是似乎configs是您从json文件中读取的,在这种情况下,您可以尝试:

model.compile(loss=configs['model']['loss'], 
              optimizer=configs['model']['optimizer'], 
              metrics=['accuracy', locals()[configs['model']['metric']]])

或:

model.compile(loss=configs['model']['loss'], 
              optimizer=configs['model']['optimizer'], 
              metrics=['accuracy', eval(configs['model']['metric'])])

以其名称调用函数。

参考:Calling a function of a module by using its name (a string)