gpt4 book ai didi

python-2.7 - keras自定义损失函数

转载 作者:行者123 更新时间:2023-11-30 09:08:26 25 4
gpt4 key购买 nike

我是 Keras 框架的新手,我想实现以下损失函数 Root Mean Squared Logarithmic Error

这是我的带有 tensorflow 后端的 Keras 代码

def loss_function(y_true, y_pred):
ones = K.ones(shape=K.shape(y_pred).shape)
y_pred = tf.add(y_pred,ones)
y_true = tf.add(y_true,ones)
val = K.sqrt(K.mean(K.sum(K.log(y_pred)-K.log(y_true))))
return val

但我最终收到以下错误:

ValueError: Error when checking input: expected dense_1_input to have shape (None, 16) but got array with shape (1312779, 11)

val 返回为 0。

最佳答案

您的操作顺序颠倒了。

由于“log(true) - log(pred)”可以为负数或正数(结果可能比预期稍高或稍低),因此平方是首先必须发生的事情。 (正方形负责消除负号)。

平均值是最后一个(最外部的),因为您想首先计算每个元素的误差,然后才得到误差的平均值。 (mean 函数中已经带有 sum 函数)。

所以:

def loss_function(y_true, y_pred):

y_pred = y_pred + 1
y_true = y_true + 1
return K.mean(K.square(K.log(y_pred)-K.log(y_true)))

请注意,这不包含“root”部分。如果你想添加它,我会说根应该在平均值之前(与图片中的公式不同)

我会用这个来代替:

return K.mean(K.sqrt(K.square(K.log(y_pred)-K.log(y_true))))

确保您的模型以输出大于或等于零的数字的激活结束:

  • Relu 没问题
  • S 型函数没问题
  • Softmax 还可以

其他激活可能具有负值,并会带来日志错误:

  • 线性不行
  • tanh 不行

关于python-2.7 - keras自定义损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46384434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com