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