У меня есть модель Keras, которая имеет два выхода:
output
- это истинный выход сети, в которой будет рассчитываться потеря
additional
используется для выполнения внешней задачи во время логического вывода (с этим выводом не следует рассчитывать потери)
Когда я строю модель, я пишу что-то вродечто:
model = Model(inputs=inp, outputs=[output, additional])
Поскольку у моего Model
есть два выхода, мне нужно обеспечить две потери при компиляции модели, чтобы я создал бесполезную потерю, подобную этой:
class NoopLoss(object):
def __call__(self, y_true, y_pred, **kwargs):
return self.compute_loss(y_true, y_pred)
def compute_loss(self, y_true, y_pred):
return tf.math.square(0.0)
Какой яинтегрировать на этапе компиляции следующим образом:
loss = UsefulLoss() # the real loss I'm using
noop_loss = NoopLoss()
model.compile(loss=[loss, noop_loss], optimizer=optimizer, metrics=['binary_accuracy'])
Это работает, но я чувствую, что это немного хакерски, есть ли правильный способ реализовать это поведение?Я не нашел никаких официальных бесполезных потерь в документации Keras.