Итак, мой вопрос, если у меня есть что-то вроде:
model = Model(inputs = input, outputs = [y1,y2])
model.compile(loss = my_loss ...)
Я видел только my_loss
в качестве словаря независимых потерь, и тогда окончательная потеря определяется как сумма этих,Но могу ли я определить в многозадачной модели функцию потерь, которая принимает все прогнозируемые / истинные значения, а затем я могу умножить их (например)?
Это потеря, которую я пытаюсь определить:
def my_loss(y_true1, y_true2, y_pred1, y_pred2):
final_loss = binary_crossentropy(y_true1, y_pred1) + y_true1 * categorical_crossentropy(y_true2, y_pred2)
return final_loss
Обычно ваши параметры имеют значение y_true, y_pred
в функции потерь, где y_pred
равно y1
или y2
.Но теперь мне нужно и то, и другое вычислить потери, так как я могу определить эту функцию потерь и передать все параметры этой функции: y_true1, y_true2, y_pred1, y_pred2
.
Моя текущая модель, в которой я хочу изменить свою потерю:
x = Input(shape=(n, ))
shared = Dense(32)(x)
sub1 = Dense(16)(shared)
sub2 = Dense(16)(shared)
y1 = Dense(1)(sub1, activation='sigmoid')
y2 = Dense(4)(sub2, activation='softmax')
model = Model(inputs = input, outputs = [y1,y2])
model.compile(loss = ['binary_crossentropy', 'categorical_crossentropy'] ...) #THIS LINE I WANT TO CHANGE IT
Спасибо!