Keras,循环输出的成本函数?

时间:2016-05-30 14:13:36

标签: python neural-network keras

现在我正在尝试使用神经网络对图像进行着色。我想在HSV色彩空间中做到这一点。这个问题是色调通道是循环的。色调的标准化值介于0和1之间。例如,模型预测为0.99,但实际色调为0.01。通过正常的均方误差丢失,这看起来很遥远。然而距离实际上更像是0.02。如何在keras中获得循环丢失函数?

1 个答案:

答案 0 :(得分:2)

从预测的色调A到实际色调B的真实距离实际上是3个词的最小值:

  1. (A - B)^2(距离如果你没有环绕)
  2. (A - B + 1)^2(如果你环绕左边的距离)
  3. (A - B - 1)^2(如果你绕右转,距离)
  4. 例如,在您的示例中,从A = 0.99B = 0.01的最短路径是向右环绕,距离为(A - B - 1)^2 = (0.99 - 0.01 - 1)^2 = (-0.02)^2 = 0.02^2

    现在我们已经计算出数学,我们如何实现它? Keras的implementation均方误差为:

    from keras import backend as K
    
    def mean_squared_error(y_true, y_pred):
        return K.mean(K.square(y_pred - y_true), axis=-1)
    

    这是使其循环的调整:

    def cyclic_mean_squared_error(y_true, y_pred):
        return K.mean(K.minimum(K.square(y_pred - y_true), 
                                K.minimum(K.square(y_pred - y_true + 1), 
                                          K.square(y_pred - y_true - 1)), axis=-1)
    

    要使用此损失功能,请在编译模型时指定loss=cyclic_mean_squared_error