Функция потери Keras, используя также входные данные - PullRequest
0 голосов
/ 09 марта 2020

У меня следующая проблема:

У меня есть последовательный NN для выполнения регрессии для конкретной c проблемы. Мой вход - 5-D массив, мой выход - 6-D массив. Моя обычная функция потерь - это просто MSE на разность (y_pred - y_true).

Теперь у меня есть это свойство: 1-й элемент выходного вектора (т.е. y_pred [:, 0]), умноженный на 1-й элемент входного вектора (то есть x [:, 0]) ограничен сверху константой K. Таким образом, мне нужно добавить штраф к моей функции потерь, что-то вроде: (1 / n) * || y_pred [:, 0] * x [:, 0] - K ||.

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

def custom_loss_wrapper(input_train):
   def custom_loss(y_true, y_pred):
       return K.mean(K.square(y_true - y_pred)) + K.mean(K.square(input_train))
   return custom_loss

Здесь я просто использовал MSE на входе для простоты, но следующий результат тот же!

Проблема в том, что, когда я пытаюсь вставить вычисление с input_train, во время подгонки модели I получить эту ошибку:

Входные данные для активной функции исполнения не могут быть символами Keras c тензорами, но найдены [ ]

Теперь я обнаружил, что могу использовать следующее, чтобы не было этой проблемы:

tf.config.experimental_run_functions_eagerly(True)

Но если я сделаю это, ошибка станет:

NotImplementedError: Невозможно преобразовать символ c Tensor (truediv_65: 0) в массив numpy.

ТАК, что я мог сделать, чтобы использовать свою пользовательскую функцию потерь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...