Keras - Пользовательская функция потерь с несколькими выходами и разными весами на выход - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь обучить сеть с несколькими выходами, в следующем коде: потери от логарифмов 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")
...