softmax in pytorch

背景

在分类中,最常见的设置是一个输入,输出是类数目大小的向量。预测的输入类将是在最后一个网络层中具有最大条目的相应类。在分类任务中,交叉熵损失(交叉熵)是训练这类网络最常见的损失函数。交叉熵损失可以写在下面的方程中。例如,有一个三级cnn.最后一个全连通层的输出(《softmax in pytorch》)是(3×1)张量.还有一个向量《softmax in pytorch》,它的维度相同,它指的是输入的真实标签。

交叉熵

比如说,3个类分别是0、1和2。输入属于0类。如果网络输出(《softmax in pytorch》)是一个经过合理训练的分类器,则网络输出(Y)类似于(3.8,−0.2,0.45)。这个输入的Ground-truth 向量(《softmax in pytorch》)是(1,0,0).因此,对于0类的输入,我们有:

                                                         《softmax in pytorch》

交叉熵损失的正式定义如下:i从0到2:

《softmax in pytorch》

Softmax

Softmax的计算可以用下面的图表所示的Softmax图层来表示。请注意,图中的Softmax层(Z)的输入是上面提到的向量y。

 softmax常用于多分类过程中,它将多个神经元的输出,归一化到( 0, 1) 区间内,因此Softmax的输出可以看成概率,从而来进行多分类。  
《softmax in pytorch》

nn.CrossEntropyLoss() in Pytorch

基本上,交叉熵只有一个项。因为在交叉熵损失方程中只剩下ground-truth类的概率:

《softmax in pytorch》

这里,j对应于地面-真值类.只有当i=j时,才能达到《softmax in pytorch》,否则便等于《softmax in pytorch》。在下面的脚本中,将torch.nn.CrossEntroyLoss()的结果与手工计算的交叉熵损失结果进行比较。证明了torch.n.CrossEntroyLoss()接收原始网络输出层的输入,这意味着函数中包含了Softmax层的计算。因此,在pytorch网络构建时,不需要在最终的完全连接层之后添加额外的Softmax层。

 

 

    原文作者:pytorch
    原文地址: https://www.cnblogs.com/www-caiyin-com/p/10340737.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞