написание и тестирование пользовательской функции потерь или метрики для модели keras - PullRequest
0 голосов
/ 23 января 2019

Я стараюсь использовать методы машинного обучения для прогнозирования времени до событий.Моими прогнозами будут векторы вероятности v длиной 20, где v [i] - вероятность того, что событие произойдет через i + 1 день (i колеблется от 0 до 19).

Как проверить пользовательские функции потерь и метрики, которые я пишу?

Я хотел бы использовать следующие потери и метрику для обучения модели:

equation using Online Equation Editor

equation using Online Equation Editor

Вот как я пытался это реализовать:

from keras import backend as K

def weighted_meansquare(y_true, y_pred):
    w = K.constant(np.array([i + 1 for i in range(20)]))
    return K.sum(K.square(w * y_pred - w * y_true))

def esperance_metric(y_true, y_pred):
    w = K.constant(np.array([i + 1 for i in range(20)]))
    return K.sum(w * y_true - w * y_true)

Я ожидал, что модель минимизирует метрику (что в основном является ожиданием, так как моя модель возвращаетсявектор вероятности).Тем не менее, когда я пытаюсь соответствовать своей модели, я вижу, что показатель всегда равен 0,0000e + 00.

Я ищу следующее:

  1. некоторые конкретные советы окак кодировать эти функции

  2. некоторые общие советы по тестированию функций keras.backend

1 Ответ

0 голосов
/ 23 января 2019

В вашем определении esperance_metric есть опечатка: вы используете y_true - y_true вместо y_pred - y_true, поэтому ваш показатель всегда равен 0.

Я также вижу ошибку в weighted_meansquare. Вы должны умножить на w после взятия квадрата следующим образом:

K.sum(w * K.square(y_pred - y_true))

В общем, если вы хотите протестировать бэкэнд-функции, вы можете попробовать оценить их с помощью K.eval. Например:

y_pred = K.constant([1.] * 20)
y_true = K.constant([0.] * 20)
print(K.eval(esperance_metric(y_true, y_pred)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...