У меня задание регрессии, и я измеряю подгонку, используя евклидово расстояние. Вместо того, чтобы отображать среднеквадратичную ошибку как потерю, я хочу отобразить сумму квадратов. То есть я хочу только сумму по квадратным ошибкам и не делить на количество примеров.
На уровне пакета я могу достичь этого, определив пользовательские потери вроде этого (возможно, я мог бы вместо этого использовать tf.keras.losses.MeanSquareError
напрямую):
class CustomLoss(tf.keras.losses.Loss):
def call(self, Y_true, Y_pred):
return tf.reduce_sum(tf.math.abs(Y_true-Y_pred) ** 2, axis=-1)
target_loss=CustomLoss(reduction=tf.keras.losses.Reduction.SUM)
, который вычислит квадратную ошибку для каждого примера, а затем даст TensorFlow команду SUM над примерами для вычисления потери пакета вместо этого по умолчанию SUM_OVER_BATCH_SIZE
(который должен читаться не буквально, а в виде дроби, т. е. SUM / BATCH_SIZE
).
Моя проблема в том, что на уровне эпохи Керас берет эти суммы, а затем вычисляет Имеется в виду через шаги (партии), чтобы сообщить о потере эпохи. Как мне заставить Keras вычислять сумму по партиям вместо среднего?