【问题标题】:Cross-entropy implementation in CaffeCaffe 中的交叉熵实现
【发布时间】:2017-11-13 19:57:05
【问题描述】:

查看sigmoid_cross_entropy_loss_layer.cpp中的源码,这是caffe中交叉熵损失函数的源码,发现实际误差值的代码是

  for (int i = 0; i < count; ++i) {
    loss -= input_data[i] * (target[i] - (input_data[i] >= 0)) -
        log(1 + exp(input_data[i] - 2 * input_data[i] * (input_data[i] >= 0)));
  }

这似乎与我在这里找到的 Caffe 或 C++ 实现文档中的 CE 损失函数有很大不同:

https://visualstudiomagazine.com/Articles/2014/04/01/Neural-Network-Cross-Entropy-Error.aspx?Page=2

或者实际上是CE损失函数的定义。

这是某种近似吗?我首先认为它是 log⁡(1−x) 的泰勒级数展开,但它根本不像那样工作。

【问题讨论】:

    标签: c++ neural-network caffe cross-entropy


    【解决方案1】:

    这一层实现的损失不是只是交叉熵。该层实现了 Sigmoid 激活,然后是交叉熵损失。这允许在数值上更稳定地实现损失。

    请参阅this thread 了解更多信息。 还有this thread

    【讨论】:

    • 嗯好吧:我在 CE 方程中插入了 phat = 1/(1+exp(-x)),我只得到 x_n= 0 的?
    • @Alex 对不起。我无法理解你的评论。你能编辑你的问题吗?
    • 很抱歉,我认为 SO 不支持 mathjax,所以公式很难阅读。我指的是 sigmoid_cross_entropy_loss_layer.cpp 中的第 95 和 96 行,变量 input_data[i] >= 0。你是怎么得到的?
    猜你喜欢
    • 2016-08-01
    • 2018-11-28
    • 2017-03-14
    • 2020-08-16
    • 2021-05-29
    • 2017-11-11
    • 2019-07-13
    • 2020-01-03
    • 2019-08-08
    相关资源
    最近更新 更多