[英]Keras, cost function for cyclic outputs?
现在,我正在尝试使用神经网络对图像进行着色。 我想在HSV颜色空间中执行此操作。 这样做的问题是色调通道是循环的。 色相的归一化值介于0和1之间。例如,模型预测为0.99,但实际色相为0.01。 在具有正常均方误差损失的情况下,这似乎已经过去了。 但是,距离实际上更像是0.02。 如何获得喀拉拉邦的周期性损失函数?
从预测的色相A
到实际的色相B
的真实距离实际上至少是3个项:
(A - B)^2
(距离不远的话) (A - B + 1)^2
(如果绕到左侧,则为距离) (A - B - 1)^2
(距离,如果环绕在右边) 例如,在您的示例中,从A = 0.99
到B = 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.