Я пытаюсь создать свою собственную функцию потерь следующим образом
import numpy as np
from keras import backend as K
def MyLoss(self, x_input, x_reconstruct):
a = np.copy(x_reconstruct)
a = np.asarray(a, dtype='float16')
a = np.floor(4*a)/4
return K.mean(K.square(a - x_input), axis=-1)`
В компиляции написано
ValueError: установка элемента массива с последовательностью
И x_input, и x_reconstruct являются [m, n, 1] np массивами. Последняя строка кода фактически копируется непосредственно из встроенной в Keras функции потери MSE.
Кроме того, я предполагаю, что потери рассчитываются для каждого образца. Если размеры входного и восстановленного входных данных равны [m, n, 1], результатом встроенных потерь Keras также будет размер матрицы [m, n]. Так почему же он работает правильно?
Затем я попытался использовать функции np напрямую
def MyLoss(self, x_input, x_reconstruct):
a = np.copy(x_reconstruct)
a = np.asarray(a, dtype=self.precision)
a = np.floor(4*a)/4
Diff = a - x_input
xx = np.mean(np.square(Diff), axis=-1)
yy = np.sum(xx)
return yy
пока ошибка не устранена. Какую ошибку я сделал? Как написать код?
Заимствовав предложение у Подробно описать функцию пользовательского убытка в Керасе , я попытался выполнить
def MyLoss(self, x_input, x_reconstruct):
if self.precision == 'float16':
K.set_floatx('float16')
K.set_epsilon(1e-4)
a = K.cast_to_floatx(x_input)
a = K.round(a*4.-0.5)/4.0
return K.sum(K.mean(K.square(x_input-a), axis=-1))
Но такая же ошибка происходит