Чтобы разбить ваш вопрос по частям
, где L1 - средняя квадратическая ошибка
Таким образом, L1 = np.square(np.subtract(y_true,y_pred)).mean()
L2 - это -λ Суммирование (Квадрат ((y) x (z))), где y - прогнозируемое выходное изображение, а z - заданное входное изображение для модели. Поэлементное умножение y и z с последующим взятием его квадрата
Таким образом, L2 = np.sum(np.concatenate(np.square(np.multiply(y_true,y_pred))))
. Вы понимаете, что L2 будет очень большим числом для потери.
Подводя итог, вот как выглядит ваша функция потери -
def custom_loss(y_true,y_pred):
def loss(y_true, y_pred):
y_true = img_to_array(y_true)
y_pred = img_to_array(y_pred)
L1 = np.square(np.subtract(y_true,y_pred)).mean()
L2 = np.sum(np.concatenate(np.square(np.multiply(y_true,y_pred))))
loss=L1-L2
return loss
Я написал здесь простой код, чтобы загрузить изображение в виде y_true и обрезать центральную часть для y_pred и выполнить упомянутую вами потерю (не имеет большого значения, поскольку значение слишком большое) .
Код -
import tensorflow as tf
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array, array_to_img
from matplotlib import pyplot
# Load the image
y_true = load_img('/content/bird.jpg', target_size=(224, 224))
# Convert Image to array
image = img_to_array(y_true)
# Central crop image
image = tf.image.central_crop(image, np.random.uniform(0.50, 1.00))
# Resize to original size of image
image = tf.image.resize(image, (224, 224))
# convert the image to an array
y_pred = array_to_img(image)
# def custom_loss():
# def loss(y_true, y_pred):
# y_true = img_to_array(y_true)
# y_pred = img_to_array(y_pred)
# L1 = np.square(np.subtract(y_true,y_pred)).mean()
# L2 = np.sum(np.concatenate(np.square(np.multiply(y_true,y_pred))))
# loss=L1-L2
# return loss
def loss(y_true, y_pred):
y_true = img_to_array(y_true)
y_pred = img_to_array(y_pred)
L1 = np.square(np.subtract(y_true,y_pred)).mean()
L2 = np.sum(np.concatenate(np.square(np.multiply(y_true,y_pred))))
loss=L1-L2
return loss
x = loss(y_true,y_pred)
print(x)
Выход -
-251577020000000.0