Я пытаюсь создать собственный убыток в Керасе, для расчета которого необходим вывод скрытого слоя. Я не хочу использовать конкатенацию этого скрытого выходного слоя и слоя прогнозирования как y_pred, как только он изменит обычный способ использования Keras. Когда я тестирую без output_layer, мой код работает без проблем, хотя, когда я запускаю его, у меня есть исключение. Ниже приведены мои коды и исключения.
У меня есть следующие пользовательские потери:
class MyLoss(LossFunctionWrapper):
def my_calculation_function(y_pred, y_true, output_layer)
... # All functions are differentiable
def loss(self, y_true, y_pred, output_layer):
return my_calculation_function(y_pred, y_true, output_layer)
def __init__(self,
layer,
reduction=losses_utils.Reduction.SUM_OVER_BATCH_SIZE,
name='d_loss'):
super(MyLoss, self).__init__(self.loss, name=name, reduction=reduction, output_layer=layer.output)
И я использую так:
model.compile(optimizer='adam', loss=MyLoss(layer), metrics=['accuracy'])
Когда я запускаю свой код, я получаю следующее сообщение об ошибке:
ValueError: An operation has `None` for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval.
Я использую:
- тензор потока [2.0.0]
- Керас [2.3.1]
I проверил и проблема в layer.output. Кто-нибудь знает как это исправить?