真是晕,搞一堆名字相近的API。真不知道咋想的,你搞出来了新的,麻烦就把旧的废弃掉好不好。。。。
softmax 只是把数值分布变成概率分布
softmax_cross_entropy 才是求loss,得到一个值!
- mx.symbol.SoftmaxOutput
计算交叉熵损失相对于softmax输出的梯度。
1). 根据网络输出计算softmax输出 (网络输出通过指数计算为核心的softmax函数转成0~1之间的概率分布)
2). 根据softmax输出和gt label计算交叉熵损失 (基于两种概率分布计算交叉熵损失)
https://datascience.stackexchange.com/questions/20296/cross-entropy-loss-explanation
3). 根据交叉熵损失和label计算梯度(梯度等于softmax输出减去gt label)
推导:http://machinelearningmechanic.com/deep_learning/2019/09/04/cross-entropy-loss-derivative.html
由此可见,计算梯度的话,实际上不用计算交叉熵损失。
所以,上述三步计算其实两步(1、3)就可以了。这就是官网所说的(一开始让人云里雾里):https://mxnet.apache.org/versions/1.6/api/r/docs/api/mx.symbol.SoftmaxOutput.html
-
mx.symbol.SoftmaxActivation
将softmax激活应用于输入。适用于隐层。已被弃用,请使用softmax。 -
mx.symbol.softmax_cross_entropy
计算softmax输出和一个独热标签的交叉熵。