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

4ngedf3f  于 2023-11-19  发布在  其他
关注(0)|答案(2)|浏览(134)

我想在训练阶段使用加权损失函数,在测试阶段使用未加权损失函数。
我试过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:形状不兼容
我怎样才能使这段代码工作,或者有没有其他方法可以在这两个阶段使用不同的损失函数?

6gpjuf90

6gpjuf901#

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

busg9geu

busg9geu2#

我有一个类似的问题,因为我正在使用Early Stopping来终止我的训练过程,它监视验证损失,我关心验证损失,并希望它与我的训练损失不同。
内置损失函数的标准使用允许将class_weights属性传递给model.fit()方法,该方法仅在训练期间使用。
我正在使用一个自定义的损失函数,我使用model.add_loss()添加到我的模型中。现在我正在寻找一种方法来获得相同的行为。

相关问题