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