Ошибка при использовании пользовательской метрической функции в Keras - PullRequest
0 голосов
/ 16 февраля 2019

У меня проблемы при попытке использовать пользовательскую функцию для компиляции модели lstm в Keras.

Я определил пользовательскую метрическую функцию с именем 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 голосов
/ 16 февраля 2019

Если вы определите 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'])])

, чтобы вызвать функцию по ее имени.

Ссылка: Вызов функции модуля с использованием его имени (строки) .

...