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

时间:2019-09-11 03:44:55

标签: python tensorflow keras loss-function

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

我已经尝试过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:不兼容的形状

如何使此代码起作用,或者在这两个阶段中还有其他方法可以使用不同的损失函数吗?

1 个答案:

答案 0 :(得分:0)

在测试时,由于您没有最小化损失函数,因此损失函数的作用并不重要。我要做的是将未加权损失函数作为“指标”提供-这样,它不会对训练时的训练产生影响,但是在测试时,您可以自己对其进行分析,以了解模型的正确性。