前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytorch基础知识-Cross Entropy(下)

pytorch基础知识-Cross Entropy(下)

作者头像
用户6719124
发布2019-11-17 21:46:35
1.1K0
发布2019-11-17 21:46:35
举报

上节课介绍了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。

以代码具体示例

代码语言:javascript
复制
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)

分别输出为

代码语言:javascript
复制
a: tensor(70.4491)
b: tensor(70.4491)

两者的结果一致

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python pytorch AI机器学习实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档