如何在训练和测试阶段使用不同的损失函数

问题描述 投票:0回答:2

我想在训练阶段使用加权损失函数,在测试阶段使用未加权损失函数。

我尝试过in_train_phase,但在测试阶段,它仍然使用加权损失函数。

def custom_loss():  
        def euclidian_distance_loss(y_true, y_pred):
        edl_in_train = K.sqrt(K.sum(K.square((y_pred - y_true) * weight_matrix().reshape(1, 41, 41, 1))))
        edl = K.sqrt(K.sum(K.square(y_pred - y_true)))
        return K.in_train_phase(edl_in_train,edl)

    return euclidian_distance_loss

因为训练数据的形状是恒定的,而测试不是,所以在测试阶段开始时就出现了错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError:形状不兼容

我怎样才能让这段代码工作,或者有没有其他方法在这两个阶段使用不同的损失函数?

python tensorflow keras loss-function
2个回答
0
投票

在测试时,由于您没有最小化损失函数,因此损失函数中的内容并不重要。我要做的是将未加权损失函数作为“度量”提供 - 这样它就不会影响训练时的训练,但在测试时你可以自己分析它以了解你的模型如何。


0
投票

我也有类似的问题。因为我使用提前停止来终止我的训练过程,该过程监视验证损失,所以我关心验证损失并希望它与我的训练损失不同。

内置损失函数的标准使用允许将

class_weights
属性传递给
model.fit()
方法,该方法仅在训练期间使用。

我正在使用自定义损失函数,并使用

model.add_loss()
将其添加到我的模型中。现在我正在寻找一种方法来获得相同的行为。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.