pytorch基础知识-Cross Entropy

pytorch基础知识-Cross Entropy

https://cloud.tencent.com/developer/article/1539723

上节课介绍了Cross Entropy 与 Enropy的区别,本节介绍Cross Entropy到底在二分类问题中是如何运算的。

假设面对的是猫狗的二分类问题,此时的Cross Entropy的表示公式为:

 

为更好的理解,我们以5分类问题进行解释

 

实际值为小猫。

 

当模型预测效果较好时

 

这里注意到使用Cross Entropy实现了0.9→0.02的过程。但采用MSE法,只能下降0.3左右。因此在分类问题上,采用Cross Entropy具有更快的运算速度。

另外目前主流上也不将MSE用于分类问题上,原因在于:

(1) Sigmoid+MSE的方法有时会造成梯度离散的现象,且会增加training的难度。

(2) 采用Cross Entropy进行分类的速度会更快。

(3) 但也要学会变通,对于前沿问题上,若采用Cross Entropy法收敛效果不佳,可以使用MSE尝试一下。因为MSE法更为简单,且新算法刚出现时,使用时通常会伴随各种问题,采用MSE法的效果常常会更好。

至此我们以基本上了解了一个神经网络所具备的全部结构,那么在这里以简图绘制

 

输入值先变线型模型再经logit和softmax,通过CrossEntorpy计算输出label。

以代码具体示例

import torch
import torch.nn.functional as F

x = torch.randn(1, 784)
w = torch.randn(10, 784)

logits = x@w.t()
# 将w与x相乘,变为x*w+b模型
pred = F.softmax(logits, dim=1)
pred_log = torch.log(pred)
# 这里为了示例,设置了pred的log值作为对照
# 下面进行softmax
a = F.cross_entropy(logits, torch.tensor([3]))
# 这里要格外注意,cross_entropy函数默认包含了softmax功能,因此后面要传入的是logits,
# 此时若传入pred,再运行上段代码时会额外进行一次softmax
print('a:', a)

# 这里若想自己手动完成,则要改写代码为.bll_loss函数
b = F.nll_loss(pred_log, torch.tensor([3]))
print('b:', b)

分别输出为

a: tensor(70.4491)
b: tensor(70.4491)

两者的结果一致

总结为:若使用Cross Entropy,则会默认使用了softmax + log + nll_loss三个函数功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值