Модель Keras использует две функции потерь, одна из них - это функция self_regularization_loss()
, которая использует параметр λ для взвешивания своего вывода:
def self_regularization_loss(y_true, y_pred):
lambda_ = 0.0001
return lambda_ * tf.reduce_sum(tf.abs(y_pred - y_true))
model.compile(optimizer=sgd, loss=[self_regularization_loss, local_adversarial_loss])
Я пытался переместить этот вес в аргумент loss_weights
до model.compile()
:
def self_regularization_loss(y_true, y_pred):
return tf.reduce_sum(tf.abs(y_pred - y_true))
lambda_ = 0.0001
model.compile(optimizer=sgd, loss=[self_regularization_loss, local_adversarial_loss],
loss_weights=[lambda_, 1.0])
Тренировочное поведение модели резко изменилось. Однако я не ожидал бы, что это будет так, поскольку
Значение убытка, которое будет минимизировано моделью, будет тогда взвешенной суммой всех индивидуальных потерь, взвешенных по loss_weights
коэффициенты.