交叉熵损失函数之前是否需要加 softmax 函数?

2019-04-09 18:54:49 +08:00
 jingous

在我的理解里面,交叉熵( cross-entry)损失函数中的 log 能够抵消 softmax 函数中的 exp.使得梯度能够更好的反向传播。
在看 niftyNet 代码的时候,发现如下内容:
在__init__中:

    if data_loss_function_name.startswith('cross_entropy') \
            or 'xent' in data_loss_function_name:
        tf.logging.info(
            'Cross entropy loss function calls '
            'tf.nn.sparse_softmax_cross_entropy_with_logits '
            'which always performs a softmax internally.')
        self._softmax = False

在 layer_op 中

                if self._softmax:
                    pred_b = tf.cast(pred_b, dtype=tf.float32)
                    pred_b = tf.nn.softmax(pred_b)

为什么损失函数是 cross_entropy 的时候,不需要进行 softmax?

3581 次点击
所在节点    机器学习
4 条回复
dinghow
2019-04-09 19:33:06 +08:00
![]( https://dinghow.site/2018/11/28/Udacity-DL-note1/dl-2.png)
![]( https://dinghow.site/2018/11/28/Udacity-DL-note1/dl-1.png)
应该是要加的,利用 cross_entropy 来计算 softmax 层输出与 label 的 loss
dinghow
2019-04-09 19:38:41 +08:00
@dinghow 囧,至于楼主的疑问,我也母鸡,期待有大神来解答
tinywhale
2019-04-10 07:12:28 +08:00
我记得 tf.nn.sparse_softmax_cross_entropy_with_logits 已经包括了 softmax
jingous
2019-04-10 10:18:10 +08:00
@tinywhale 似乎是这样的,谢谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/553470

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX