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

标签 python neural-network keras

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

最佳答案

从预测色调 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 的 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=circular_mean_squared_error

关于python - Keras,循环输出的成本函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37527832/

相关文章:

python - 获取函数文档字符串/初始注释 [Python]

python - Caffe 迭代损失与训练净损失

python - 如何分发训练好的模型?

machine-learning - 通过 StackingCVClassifier 问题堆叠分类器(sklearn 和 keras 模型)

neural-network - 为什么 dropout 会阻止卷积神经网络的收敛?

python - Keras - CNN 输入形状不兼容

Python 从数组中删除方括号和字符串引号

python - 如何匹配文本和可选的重复标识符并将它们组合在一起?

python - 针对单个键添加多个字典值

artificial-intelligence - 具有 Sigmoid 激活的神经网络是否使用阈值?