繁体   English   中英

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

[英]Keras, cost function for cyclic outputs?

现在,我正在尝试使用神经网络对图像进行着色。 我想在HSV颜色空间中执行此操作。 这样做的问题是色调通道是循环的。 色相的归一化值介于0和1之间。例如,模型预测为0.99,但实际色相为0.01。 在具有正常均方误差损失的情况下,这似乎已经过去了。 但是,距离实际上更像是0.02。 如何获得喀拉拉邦的周期性损失函数?

从预测的色相A到实际的色相B的真实距离实际上至少是3个项:

  1. (A - B)^2 (距离不远的话)
  2. (A - B + 1)^2 (如果绕到左侧,则为距离)
  3. (A - B - 1)^2 (距离,如果环绕在右边)

例如,在您的示例中,从A = 0.99B = 0.01的最短方法是环绕在右边,距离为(A - B - 1)^2 = (0.99 - 0.01 - 1)^2 = (-0.02)^2 = 0.02^2

现在我们已经弄清楚了数学,我们如何实现它? Keras对均方误差的实现是:

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在编译模型时指定loss=cyclic_mean_squared_error

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM