我想在训练阶段使用加权损失函数,在测试阶段使用未加权损失函数。
我试过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:形状不兼容
我怎样才能使这段代码工作,或者有没有其他方法可以在这两个阶段使用不同的损失函数?
2条答案
按热度按时间6gpjuf901#
在测试时,由于你没有对损失函数进行最小化,损失函数中的具体内容并不重要。我会做的是将未加权的损失函数作为“度量”-这样它就不会影响训练时的训练,但在测试时,你可以自己分析它,看看你的模型是如何运行的。
busg9geu2#
我有一个类似的问题,因为我正在使用Early Stopping来终止我的训练过程,它监视验证损失,我关心验证损失,并希望它与我的训练损失不同。
内置损失函数的标准使用允许将
class_weights
属性传递给model.fit()
方法,该方法仅在训练期间使用。我正在使用一个自定义的损失函数,我使用
model.add_loss()
添加到我的模型中。现在我正在寻找一种方法来获得相同的行为。