gpt4 book ai didi

machine-learning - Keras 中两个损失的总和(感知和 MSE)

转载 作者:行者123 更新时间:2023-11-30 09:44:41 26 4
gpt4 key购买 nike

我想将目标函数中的感知损失添加到 MSE 损失中。我为此编写了以下代码:

def custom_objective(y_true, y_pred):

tosub = K.constant([103.939, 116.779, 123.68])
y1 = vgg_model(y_pred * 255. - tosub)
y2 = vgg_model(y_true * 255. - tosub)
loss2 = K.mean(K.square(y2 - y1), axis=-1)
loss1 = K.mean(K.square(y_pred - y_true), axis=-1)
loss = loss1 + loss2

return loss

问题是 loss1 的形状类似于 (BatchSize, 224, 224),但 loss2 的形状是 >(BatchSize, 7, 7),所以它给了我关于不兼容形状的错误,这是正确的。我想知道如何正确添加这两个?我应该先解开吗?以及如何?

最佳答案

损失函数应该总是返回一个标量(批处理中的每个样本或整个批处理),因为我们想要最小化它(即你不能最小化向量,除非你定义了“最小化一个向量”的意思。向量”)。因此,将其简化为标量的一种简单方法是取所有轴的平均值,但批处理轴除外,该轴在内部进行平均:

loss2 = K.mean(K.square(y2 - y1), axis=[1,2,3])
loss1 = K.mean(K.square(y_pred - y_true), axis=[1,2,3])
loss = loss1 + loss2

更新:让我澄清一下,如果损失函数返回一个向量甚至一个 n 维数组,这是可以的(实际上上面的损失函数返回一个长度为 batch_size 的向量),但请记住最后 Keras takes the average of returned values这就是损失的实际值(value)(将被最小化)。

关于machine-learning - Keras 中两个损失的总和(感知和 MSE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54055269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com