Как я могу получить доступ к содержимому Tensor в пользовательской потере модели Keras - PullRequest
2 голосов
/ 26 мая 2020

Я создаю автоэнкодер, используя модель Keras. Я хочу создать индивидуальную потерю в виде alpha* L2(x, x_pred) + beta * L1(day_x, day_x_pred). Второй член потери L1, подлежащий наказанию, относительно времени (day_x - это номер дня). День - это первая особенность моих входных данных. мои входные данные имеют форму ['day', 'beta', 'sigma', 'gamma', 'mu'].

входной x имеет форму (размер партии, количество функций), и у меня есть 5 функций. Итак, мой вопрос в том, как извлечь первую функцию из x and x_pred, чтобы вычислить L1(t_x, t_x_pred). Это моя текущая функция потерь:

def loss_function(x, x_predicted):
    #with tf.compat.v1.Session() as sess:   print(x.eval())  
    return 0.7 * K.square(x- x_predicted) + 0.3 * K.abs(x[:,1]-x_predicted[:,1])

, но у меня это не сработало.

1 Ответ

1 голос
/ 26 мая 2020

это потери, которые вам нужны ...

вы должны вычислить средние значения ваших ошибок

def loss_function(x, x_predicted):

    get_day_true = x[:,0] # get day column
    get_day_pred = x_predicted[:,0] # get day column                           
    day_loss = K.mean(K.abs(get_day_true - get_day_pred))
    all_loss = K.mean(K.square(x - x_predicted))

    return 0.7 * all_loss + 0.3 * day_loss

в противном случае вам нужно будет вставить размерность

def loss_function(x, x_predicted):

    get_day_true = x[:,0] # get day column
    get_day_pred = x_predicted[:,0] # get day column                           
    day_loss = K.abs(get_day_true - get_day_pred)
    all_loss = K.square(x - x_predicted)

    return 0.7 * all_loss + 0.3 * tf.expand_dims(day_loss, axis=-1)

использовать потери при компиляции модели

model.compile('adam', loss=loss_function)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...