Как создать функцию потерь, которая изменяется в течение эпохи в Keras

#python #machine-learning #keras

#python #машинное обучение #keras

Вопрос:

Я хотел бы создать пользовательскую функцию потерь, которая имеет весовой член, который обновляется в зависимости от того, в какой эпохе я нахожусь.

Например: допустим, у меня есть функция потерь, которая имеет beta вес, где бета увеличивается в течение первых 20 эпох…

 def custom_loss(x, x_pred): 
    loss1 = objectives.binary_crossentropy(x, x_pred)
    loss2 = objectives.mse(x, x_pred)
    return (beta*current_epoch/20) * loss1   loss2
 

Как я мог бы реализовать что-то подобное в функции потерь keras?

Ответ №1:

Просматривая их документацию, они упоминают, что вы можете использовать символьные функции theano / Tf, которые возвращают скаляр для каждой точки данных. Итак, вы могли бы сделать что-то вроде этого

 loss = tf.contrib.losses.softmax_cross_entropy(x, x_pred) * 
       (beta * current_epoch / 20 )    
       tf.contrib.losses.mean_squared_error
 

Вам нужно будет передать x и x_pred как x и x_pred как tf.заполнители
Я думаю, что для создания модели вы могли бы использовать keras, но опять же вам придется запускать вычислительный график с помощью sess.run()

Ссылки: https://blog.keras.io/keras-as-a-simplified-interface-to-tensorflow-tutorial.html#using-keras-models-with-tensorflow