栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pytorch:交叉熵(cross entropy)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pytorch:交叉熵(cross entropy)

1、entropy

entropy中文叫做熵,也叫不确定性,某种程度上也叫惊喜度(measure of surprise)

=

如果p(x)采用0-1分部,那么entropy=1log1=0

而对于entropy越大,即熵越大,越不稳定,惊喜度越高

import torch
a=torch.full([4],1/4.)
a*torch.log2(a)
# tensor([-0.5000, -0.5000, -0.5000, -0.5000])
-(a*torch.log2(a)).sum()
#输出  tensor(2.)

输出熵为2,不确定性较大惊喜度就比较高

import torch
a=torch.tensor([0.001,0.001,0.001,0.999])
-(a*torch.log2(a)).sum()
# 输出tensor(0.0313)

此时,输出熵为0.0313,比较小,不确定性小,惊喜度很低。

2、cross entropy

cross entropy有两个分部,H(p,q)=

推导成

其中,后半部分是KL Divergent,真正衡量两个分部距离的关系。如果,p和q相似度较低,则比较大,如果p和q完全相似,则接近于0。

所以有结论,p=q时,H(p,q)=H(p)即cross entropy=entropy

当采用0-1分布时,H(p)=0,刚好优化

举例说明

 而当我们得到的模型概率q(x)变化时,得到以下结果。

 3、为什么不用MSE?

原因:(1)当使用sigmoid+MSE时,很容易使sigmoid出现饱和的情况,出现梯度弥散。

(2)梯度信息小,收敛慢

(3)但是偶尔cross entropy不行的时候,可以考虑MSE

4、总结

一个神经网络的流程

python中cross entropy()=softmax()+log+null_loss()

代码过程

import torch
import torch.nn.functional as F
x=torch.randn(1,784)
w=torch.randn(10,784)
logits=x@w.t()  # x和w矩阵相乘加上b得到logits
pred=F.softmax(logits,dim=1)  # 经过softmax得到一个pred
pred_log=torch.log(pred)  # 进行log操作,得到log(pred)
F.cross_entropy(logits,torch.tensor([3]))  # 使用cross entropy 第一项必须是logits,因为cross entropy内有softmax
#  python中cross entropy()=softmax()+log+null_loss()
#输出tensor(2.9087)
F.nll_loss(pred_log,torch.tensor([3]))
#输出tensor(2.9087)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/529368.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号