Постепенно обновляйте веса пользовательских потерь в Керасе во время обучения.

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

Я хочу иметь возможность медленно увеличивать, насколько на стоимость влияет термин расхождения KL во время обучения, с весом, называемым «reg», начиная с reg = 0,0 и увеличивая до тех пор, пока он не достигнет 1,0. Я хотел бы, чтобы скорость увеличения настраивалась как гиперпараметр (на данный момент у меня просто параметр «reg» установлен на постоянное значение 0,5).

Есть ли в Keras функциональность для этого?

def vae_loss(y_true,y_pred):
    reg = 0.5
    # Average cosine distance for all words in a sequence 
    reconstruction_loss = tf.reduce_mean(mean_squared_error(y_true, y_pred),1)    
    # Second part of the loss ensures the z probability distribution doesn't stray too far from normal
    KL_divergence_loss = tf.reduce_mean(tf.log(z_sigma) + tf.div((1 + tf.square(z_mu)),2*tf.square(z_sigma)) - 0.5,1)
    loss = reconstruction_loss + tf.multiply(reg,KL_divergence_loss)
    return loss

person Kate A Baumli    schedule 02.08.2018    source источник
comment
Существует аналогичная реализация для пользовательских потерь в keras-contrib для ограничения 1-Lipschitz: github.com/keras-team/keras-contrib/blob/master/examples/   -  person Clark Kent    schedule 03.08.2018
comment
Это хороший пример использования переменной в потерях и ее обновления с помощью обратного вызова stackoverflow.com/a/50975180/230462   -  person jonperl    schedule 11.01.2019