Можем ли мы использовать несколько функций потерь в одном слое? - PullRequest
2 голосов
/ 12 июля 2020

Можем ли мы использовать функцию множественных потерь в этой архитектуре: у меня есть два разных типа функций потерь, и я хочу использовать их на последнем уровне [Выходные] функции потерь:

  • binary_crossentropy
  • пользовательская функция потерь

Мы можем это сделать? введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 12 июля 2020

да, вы можете ... вам просто нужно 2 раза повторить вывод модели в определении модели. вы также можете объединить свои потери по-другому, используя параметры loss_weights (по умолчанию [1,1] для двух потерь). Ниже приведен пример фиктивной задачи регрессии. https://colab.research.google.com/drive/1SVHC6RuHgNNe5Qj6IOtmBD5geAJ-G9-v?usp=sharing

def rmse(y_true, y_pred):

    error = y_true-y_pred

    return K.sqrt(K.mean(K.square(error)))


X1 = np.random.uniform(0,1, (1000,10))
X2 = np.random.uniform(0,1, (1000,10))
y = np.random.uniform(0,1, 1000)

inp1 = Input((10,))
inp2 = Input((10,))
x = Concatenate()([inp1,inp2])
x = Dense(32, activation='relu')(x)
out = Dense(1)(x)

m = Model([inp1,inp2], [out,out])
m.compile(loss=[rmse,'mse'], optimizer='adam') # , loss_weights=[0.3, 0.7]
history = m.fit([X1,X2], [y,y], epochs=10, verbose=2)
0 голосов
/ 12 июля 2020

Вы можете рассчитать два разных убытка. Затем получите средневзвешенное значение и верните как окончательное значение убытка. Технически это можно реализовать так (это пример, я его не запускал):

def joint_loss(y_true, y_pred):
    part_binary_crossentropy = 0.4
    part_custom = 0.6

    # binary_crossentropy
    loss_binary_crossentropy = tf.keras.losses.binary_crossentropy(y_true, y_pred)

    # custom_loss
    loss_custom = some_custom_loss(y_true, y_pred))

    return part_binary_crossentropy * loss_binary_crossentropy + part_custom * loss_custom


model.compile(loss=joint_loss, optimizer='Adam')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...