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

Python 如何在训练和测试阶段使用不同的损失函数,python,tensorflow,keras,loss-function,Python,Tensorflow,Keras,Loss Function,我想在训练阶段使用加权损失函数,在测试阶段使用未加权损失函数 我在训练阶段尝试过,但在测试阶段,它仍然使用加权损失函数 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)))) ed

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

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

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\u impl.InvalidArgumentError:不兼容的形状


我如何才能使这段代码工作,或者在这两个阶段中是否有其他方法使用不同的损失函数?

在测试时,由于您没有最小化损失函数,因此损失函数中的内容并不重要。我要做的是将未加权损失函数作为一个“指标”输入——这样它不会影响训练时的训练,但在测试时,你可以自己分析它,看看你的模型是怎样的

在测试时,由于没有最小化损失函数,因此损失函数中的内容并不重要。我要做的是将未加权损失函数作为一个“指标”输入——这样它不会影响训练时的训练,但在测试时,你可以自己分析它,看看你的模型是怎样的

那是怎么回事?你为什么需要它?自定义损失函数中的任何重塑都应该是不可知的,例如,在第一个维度上有
-1
,因此可以推断形状。请参阅,了解可能的欧几里德距离损失实现(或网络上的许多其他实现)。这是怎么回事?你为什么需要它?自定义损失函数中的任何重塑都应该是不可知的,例如,在第一个维度上有
-1
,因此可以推断形状。有关可能的欧几里德距离损失实现(或整个web中的许多其他实现),请参阅。