Я пытаюсь обучить сеть с несколькими выходами, в следующем коде: потери от логарифмов X, Y одинаково взвешиваются в функции потерь. Я хочу, чтобы X весил вдвое больше, чем Y. Я пытался сбросить вес при компиляции модели, но, похоже, ничего не изменилось.
Примечание: я новичок в keras и глубоком обучении
def custom_loss_fn(labels, model_outputs):
# target
a_target = labels['a_target']
b_target = labels['b_target']
#predictions x,y
x_logits, y_logits = model_outputs
# Here I apply sparse_categorical cross-entropy function for the outputs
x_loss = tf.keras.backend.sparse_categorical_crossentropy(
a_target, x_logits, from_logits=True)
y_loss = tf.keras.backend.sparse_categorical_crossentropy(
b_target, y_logits, from_logits=True)
# Weights are equals for both outputs
total_loss = (tf.reduce_mean(x_loss) + tf.reduce_mean(y_loss)) / 2
# when I tried to make x_loss Weighted twice y_loss, performance degrades; did I do something wrong here?
# total_loss = ((tf.reduce_mean(x_loss) * 2 ) + tf.reduce_mean(y_loss)) / 2
return total_loss
train_loss = tf.keras.metrics.Mean(name="train_loss")