Я пытаюсь создать пользовательскую функцию потерь для использования Keras, и у меня возникли некоторые проблемы.После этого поста здесь: Пользовательская функция потерь в Keras Я знаю синтаксис для создания функции, но я не знаю, как работать с тензорами.Я заполнил yTrue скалярами, а yPred - это фактические предсказанные значения.Я хочу взять взвешенную сумму логов предсказанных значений, взвешенных по скалярам в yTrue.Когда я делаю что-то вроде этого:
def customLoss(yTrue,yPred):
L = 0
for i in range(len(yTrue)):
L += tf.math.scalar_mul(yTrue[i], K.log(yPred[i]))
return L
Программа падает, когда я пытаюсь скомпилировать модель с пользовательской функцией потерь, потому что кажется, что она передает некоторые тензоры и запускает функцию потерь, когда я делаю модель.компиляции.Распечатывая yTrue и yPred, я получаю Tensor("dense_4_target:0", shape=(?, ?), dtype=float32) Tensor("dense_4/Softmax:0", shape=(?, 4), dtype=float32)
, который говорит мне, что я должен заставить мою пользовательскую функцию потерь работать с тензорами.
Я пробовал return K.sum(K.prod(yTrue,K.log(yPred)))
, но я получаю
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/math_ops.py", line 1722, in reduce_prod
name=name))
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/gen_math_ops.py", line 6239, in prod
name=name)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 610, in _apply_op_helper
param_name=input_name)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 60, in _SatisfiesTypeConstraint
", ".join(dtypes.as_dtype(x).name for x in allowed_list)))
который мне не очень полезен