【问题标题】:Keras custom loss function outputs negative values, dont understand why?Keras自定义损失函数输出负值,不明白为什么?
【发布时间】:2018-06-16 16:54:45
【问题描述】:

尊敬的 StackOverflow 社区, 我在 keras 中有以下损失函数:

return K.mean((y_true+K.epsilon()) * K.square(y_pred - y_true), axis=-1)

当我尝试用它训练我的网络(y 归一化为 0 - 1)时, 损失似乎达到了负值,我无法理解。 我用 numpy 计算了同样的东西,一切都按预期工作正常。

如果有人知道这种奇怪的负面解决方案的原因,我会非常高兴,非常感谢您的帮助。

【问题讨论】:

  • 你为什么用axis=-1
  • 因为它会自动使用最后一个轴,在我的例子中是第四个。
  • 那么mean 的输出将是一个数组,而损失必须只是一个数字。同样奇怪的是,张量 y_truey_pred 的秩为 4,而且它们不仅仅是 1 秩向量。
  • 不是真的....如果您检查所有标准的 keras 损失函数,它们也只会在最后一个轴上应用平均值。这使您可以进一步将它们的功能与平衡系数和其他东西一起使用。
  • @DanielMöller 你是对的。找到"why axis=-1 in loses"的这个答案

标签: python numpy keras calculation loss-function


【解决方案1】:

如果y_true 真的被标准化为 0-1,那么我看到的唯一可能的原因是 K.epsilon()this page 建议用户可以更改 epsilon,这可能会导致问题。

尝试硬编码 epsilon 值或将其丢弃。

【讨论】:

  • 我现在在数据中心检查了epsilon,它似乎是1^-7,所以不是问题
  • 我接受了你的回答,因为它让我仔细检查了原始值,所以它现在可以工作了。感谢您的帮助
猜你喜欢
  • 2019-10-12
  • 2019-01-11
  • 2021-05-09
  • 2020-12-19
  • 2017-12-18
  • 2020-03-27
  • 1970-01-01
  • 2019-06-19
  • 2020-09-01
相关资源
最近更新 更多