Torch_4(CrossEntrypyLoss)

torch.nn.CrossEntrypyLoss(weight=None,size_average=True)

交叉熵

刻画了实际输出(概率)与期望输出(概率)之间的距离。
交叉熵的值越小,两个概率分布就越接近。
我们记概率分布函数 p p p为期望输出,概率分布函数 q q q为实际输出, H ( p , q ) H(p,q) H(p,q)为交叉熵。
H ( p , q ) = − ∑ x ( p ( x ) log ⁡ q ( x ) + ( 1 − p ( x ) ) log ⁡ ( 1 − q ( x ) ) ) H(p,q)=-\sum_x(p(x)\log{q(x)}+(1-p(x))\log(1-q(x))) H(p,q)=x(p(x)logq(x)+(1p(x))log(1q(x)))

初始参数说明

weight:
 1-D Tensor ,共包含n个元素 ,分别代表了n类的权重 ,如果训练样本不均衡 ,这个参数用处比较大 ,一般默认为None

传入参数说明

input:
2-D shape = batch * num_class 包含了每个类的得分
target:
1-D shape = batch_size 包含了类别的索引

函数

pytorch中的交叉熵函数计算,并不采用上述式子,而是采用下面的式子:
H ( p , q ) = − ∑ x p ( x ) log ⁡ q ( x ) H(p,q)=-\sum_xp(x)\log{q(x)} H(p,q)=xp(x)logq(x)
期望输出的概率一般取1。
pytorch中,将logsoftmax与NLLLoss融合,得到结果。

  1. Softmax后,数值都在0~1之间,所以ln之后的值域在负无穷到0;
  2. 将Softmax之后的结果取log,将乘法改成加法,减少计算量,保证函数的单调性。
  3. 将上面的输出与Label对应的值取出来,取负号,取均值,这就是NLLLoss。
    l o s s ( x , c l a s s ) = − log ⁡ e x [ c l a s s ] ∑ j e x [ j ] = − x [ c l a s s ] + log ⁡ ( ∑ j e x [ j ] ) loss(x,class) = -\log{\frac{e^{x[class]}}{\sum_je^{x[j]}}}=-x[class]+\log{(\sum_je^{x[j]})} loss(x,class)=logjex[j]ex[class]=x[class]+log(jex[j])
    计算出loss后,对mini-batch取平均值。

mini-batch

是一个batch中的很小一部分。
介于batch和SGD之间。
实际上,我们称的batch一般指mini-batch。

NLLLoss

负的对数概率损失。
用于训练n分类器。

输入的是:
1.
包含类别概率的二维Tensor。
形状是(batch_size,num_class)。
2.
类别的索引。
形状(batch,)

一般在调用NLLLoss函数之前调用Softmax,或者直接采用CrossEntropyLoss
函数为:
l o s s ( x , c l a s s ) = − x [ c l a s s ] loss(x,class)=-x[class] loss(x,class)=x[class]
Loss越大,则对应类别的概率值越小,则损失越大。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

右边是我女神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值