理解「交叉熵」损失函数(包含自信息、信息熵、KL散度、交叉熵概念整理)

【计算专业】信息论框架下的自信息和信息熵 作为20世纪重要的科学成就之一,信息论是cs专业的必修课。但是当年我打开教科书,就迷失在各种晦涩的公式之中而不得要领。本文我将梳理对于信息论中“自信息”(self-information)和信息熵(entropy)概念的理解 - 直觉中的信息 我们的日常生活随时随地都在跟“信息”打交道,就好像在跟“长度”打交道一样。长度及其依附的三维空间是如此直观和平常,以至于小学生也可以快速理解“什么是长度”和“什么是空间”。简单来说,在欧式空间里面,从点a出发直线行走到另一个点b,我们能感知到ab两点之间的长度。那么 阅读详情

引言

KL散度、交叉熵通常被用来衡量两个分布之间的差异程度,可以用于衡量模型的“损失”。

要深入理解KL散度和交叉熵,首先要从信息论中的基础概念入手。

自信息(self-information)

假如有两条消息,一条内容是“今天太阳从东边升起”,另一条内容是“今天有日食”。

显然后一条消息的发生概率低,消息内容也更有信息量。

信息论的目标之一就是用最少的编码来传递信息。概率越低的事件,对应更高的信息量,概率越高的事件,对应更低的信息量。

所以在信息论中,把发生随机事件 X = x X=x X=x时的信息量进行量化,定义为自信息1:
I ( x ) = l o g ( 1 P ( x ) ) = − l o g ( P ( x ) ) I(x) = log(\frac{1}{P(x)})=-log(P(x)) I(x)=log(P(x)1​)=−log(P(x))

如果log的底数时e, I ( x ) I(x) I(x)单位是奈特(nats);
如果底数是2,则 I ( x ) I(x) I(x)的单位是比特(bit)或香农(shannons)。

信息熵/香农熵(Entropy)

自信息反映的是单个随机事件的信息量,如果要反映整个随机变量分布的信息量,可以用数学期望来衡量这个分布的信息总量,这就是香农熵,又称为信息熵:
H ( x ) = E x ~ P [ I ( x ) ) ] = − E x ~ P [ l o g P ( x ) ] H(x)=\mathbb{E}_{\bold{x} \text{\textasciitilde} P}[I(x))]=-\mathbb{E}_{\bold{x} \text{\textasciitilde} P}[logP(x)] H(x)=Ex~P​[I(x))]=−Ex~P​[logP(x)]

信息熵给出了对分布为P的符号进行编码时的最优平均编码长度2。单位与自信息相同。

KL散度(Kullback-Leibler(KL)divergence)

KL散度也叫KL距离或相对熵(Relative Entropy),用来表达以分布Q来近似分布P时的信息损失量。

D K L ( P , Q ) = E x ~ P ( l o g P ( x ) − l o g Q ( x ) ) D_{KL}(P,Q)=\mathbb{E}_{\bold{x} \text{\textasciitilde} P}{(log {P(x)}-log{Q(x)})} DKL​(P,Q)=Ex~P​(logP(x)−logQ(x))
在机器学习中,通常用KL散度来衡量训练数据上的经验分布 P ^ d a t a \hat{P}_{data} P^data​和模型分布 P m o d e l P_{model} Pmodel​之间的差异1。
D K L ( P ^ d a t a ∣ ∣ P m o d e l ) = E x ~ P ^ d a t a ( l o g P ^ d a t a ( x ) − l o g P m o d e l ( x ) ) D_{KL}(\hat{P}_{data}||P_{model})=\mathbb{E}_{\bold{x} \text{\textasciitilde} {\hat{P}_{data}}}{(log{\hat{P}_{data}{(\boldsymbol{x})}}-log{P_{model}{(\boldsymbol{x})}})} DKL​(P^data​∣∣Pmodel​)=Ex~P^data​​(logP^data​(x)−logPmodel​(x))

交叉熵(cross-entropy)

交叉熵 H ( P , Q ) H(P,Q) H(P,Q)与KL散度相比,少一项 H ( P ) H(P) H(P):

H ( P , Q ) = − E x ~ P l o g Q ( x ) H(P,Q)=-\mathbb{E}_{\bold{x} \text{\textasciitilde} P}{log{Q(x)}} H(P,Q)=−Ex~P​logQ(x)
在给定分布P的情况下,如果分布Q和P越接近,交叉熵越小;如果分布Q和P越远,交叉熵就越大。

由于训练数据上的经验分布 P ^ d a t a \hat{P}_{data} P^data​是不变的,所以最小化两个分布之间的差异性,就相当于最小化两个分布之间的交叉熵:
H ( P ^ d a t a , P m o d e l ) = − E x ~ P ^ d a t a l o g P m o d e l ( x ) ) H(\hat{P}_{data},P_{model})=-\mathbb{E}_{\bold{x} \text{\textasciitilde} {\hat{P}_{data}}}{log{P_{model}{(\boldsymbol{x})}})} H(P^data​,Pmodel​)=−Ex~P^data​​logPmodel​(x))

分类任务中的交叉熵损失

交叉熵可以衡量模型输出和标签之间的距离,所以机器学习、深度学习都常用交叉熵作为损失函数。

以分类任务为例,标签是 [ 0 , 0 , 1 ] T [0, 0, 1]^T [0,0,1]T,而模型的输出概率是 [ 0.3 , 0.3 , 0.4 ] T [0.3, 0.3, 0.4]^T [0.3,0.3,0.4]T,则交叉熵损失为 − ( 0 × l o g ( 0.3 ) + 0 × l o g ( 0.3 ) + 1 × l o g ( 0.4 ) ) = − l o g ( 0.4 ) -(0×log(0.3)+0×log(0.3)+1×log(0.4)) = -log(0.4) −(0×log(0.3)+0×log(0.3)+1×log(0.4))=−log(0.4)。2

为了减少模型输出和标签之间的距离,模型学习的准则就是找到使经验风险最小化的参数。

经验风险用训练集 D D D上的平均损失来表示:
R D ( θ ) = 1 N ∑ n = 1 N L ( y ( n ) , f ( x ( n ) ; θ ) ) = 1 N ∑ n = 1 N ( − l o g f y ( n ) ( x ( n ) ; θ ) ) R_D(θ) = \frac{1}{N}\sum_{\mathclap{n=1}}^NL(y^{(n)},f(\boldsymbol{x}^{(n)};\theta))=\frac{1}{N}\sum_{\mathclap{n=1}}^N(-log{f_{y^{(n)}}}(\boldsymbol{x}^{(n)};\theta)) RD​(θ)=N1​n=1∑N​L(y(n),f(x(n);θ))=N1​n=1∑N​(−logfy(n)​(x(n);θ))

pytorch代码示例

pytorch中交叉熵损失对应的实现是torch.nn.CrossEntropyLoss3。

torch.nn.CrossEntropyLoss( weight=None , size_average=None , ignore_index=-100 , reduce=None , reduction=‘mean’ )

  • 参数weight:(可选)是为每个类分配权重的一维张量,如果给定,必须是大小为C的张量,C表示类别数量(num of classes)。

前向计算:

  • 输入参数Input:形状为 (N, C) ,或(N, C, d_1, d_2, ..., d_K) , K ≥ 1 K \geq 1 K≥1,C表示类别数量(num of classes),N表示minibatch
  • 输入参数Target:形状为 (N) 或(N, d_1, d_2, ..., d_K) ,每个值满足: 0 ≤ targets [ i ] ≤ C − 1 0 \leq \text{targets}[i] \leq C-1 0≤targets[i]≤C−1
  • 输出Output:标量,形状为(N),或(N, d_1, d_2, ..., d_K), K ≥ 1 K \geq 1 K≥1
    如果reduction是'none',输出和target的形状相同。

CrossEntropyLoss结合了LogSoftmax4 + NLLLoss5,通过在网络的最后一层添加LogSoftmax层,可以轻松获得神经网络中的对数概率 。如果不想添加额外的层,可以直接用CrossEntropyLoss。

以上一节的分类任务为例,标签是 [ 0 , 0 , 1 ] T [0, 0, 1]^T [0,0,1]T,而模型输出是 [ 0.3 , 0.3 , 0.4 ] T [0.3, 0.3, 0.4]^T [0.3,0.3,0.4]T,计算一下nn.CrossEntropyLoss的损失是多少:

import torch.nn as nn

criterion = nn.CrossEntropyLoss()

# 获取数据,前向计算,此处略... outputs = net(inputs)
outputs = torch.tensor([[0.3,0.3,0.4]])#shape:(N, C),C是类别数
labels = torch.tensor([1])#shape:(N)
loss = criterion(outputs, labels)
print(loss) 

输出:0.9162907318741551,与前面计算的-log(0.4)的结果一致。

小结

简单总结一下本文涉及的基本概念:

  • 自信息:单个随机事件的信息量
  • 信息熵:整个随机分布的信息量
  • KL散度:训练数据上的分布和模型分布之间的差距
  • 交叉熵:两个分布之间差异性的变量部分,常用于损失函数

如果本文对你有帮助的话,欢迎一键三连支持下博主~


  1. 《深度学习》伊恩.古德费洛 ↩︎ ↩︎

  2. 《神经网络与深度学习》邱锡鹏 ↩︎ ↩︎

  3. https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html#torch.nn.CrossEntropyLoss ↩︎

  4. https://pytorch.org/docs/stable/generated/torch.nn.LogSoftmax.html#torch.nn.LogSoftmax ↩︎

  5. https://pytorch.org/docs/stable/generated/torch.nn.NLLLoss.html#torch.nn.NLLLoss ↩︎

KL散度和交叉熵有什么关系?logits是什么?知识蒸馏损失函数如何选择?为什么深度网络(vgg,resnet)最后都不使用softmax函数,而是直接使用fc层的输出作为output? 阅读详情

相关推荐

【机器学习算法面试】(一)为什么逻辑回归的损失函数是交叉熵?

前言目前公众号的体裁似乎限定在序列推荐,但这样并不利于广度的学习,因此接下来分享的内容并不会局限于序列推荐(例如上篇文章),会结合目前自己的学习情况,这也是为了扩大读者的范围。当前正在整...

Blank_Space 1063

信息熵

熵又称为自信息(self-information), 表示信源 X 每发一个符号(不论发什么符号)所提供的平均信息量。 熵也可以被视为描述一个随机变量的不确定性的数量。一个随机变量的熵越大,它的不确定性越大。那么,正确估计其值的可能性就越小。 越不确定的随机变量越需要大的信息量用以确定其值。 熵(entropy): 当随机分布为均匀分布时,熵最大,且0≤H(X)≤log|x| [1] ...

xuliwei950318的博客 1011

从猜硬币到深度学习:用生活案例图解信息熵的5层境界

本文通过抛硬币、天气预报等生活案例,由浅入深地阐释了信息熵的五个核心层次。从量化不确定性出发,逐步讲解条件熵、互信息、交叉熵与KL散度,并最终揭示其在深度学习损失函数与正则化中的关键作用,帮助读者直观理解这一核心概念。

weixin_29213827的博客 504

c语言信息熵 自信息,自信息和互信息、信息熵

自信息自信息(英语:self-information),又译为信息本体,由克劳德·香农提出,用来衡量单一事件发生时所包含的信息量多寡。它的单位是bit,或是nats。自信息的含义包括两个方面:1.自信息表示事件发生前,事件发生的不确定性。2.自信息表示事件发生后,事件所包含的信息量,是提供给信宿的信息量,也是解除这种不确定性所需要的信息量。互信息:互信息(Mutual Information)是信...

weixin_42230607的博客 1398

从零实现深度学习框架——深入浅出交叉熵

从信息熵入手,再到极大似然估计,然后引入KL散度,最后来看KL散度与交叉熵的关系。看完本文,你一定会对交叉熵损失有更高一层的领悟。

日积月累,天道酬勤 6557

电价预测的Transformer实战:从注意力机制到超长序列建模

本文深入探讨了Transformer模型在电价预测领域的实战应用,对比了其与LSTM在处理长序列依赖和误差累积问题上的优劣。文章详细解析了自注意力机制的原理,并提供了处理超长序列的位置编码方法、构建专用预测模型的完整PyTorch代码,以及防止信息泄露的关键技巧。通过实战对比,展示了Transformer在并行计算、长距离建模和预测精度上的显著优势,并分享了应对极端波动和提升模型效率的高级优化策略。

f6g7h8i9j的博客 540

熵的概念简单总结

熵的概念 熵 (entropy) 这一词最初来源于热力学。1948年,克劳德·爱尔伍德·香农将热力学中的熵引入信息论,所以也被称为香农熵 (Shannon entropy),信息熵 (information entropy)。百度百科这样解释信息,信息是指指音讯、消息、通讯系统传输和处...

ouyangfushu的博客 4998

删除win10电脑U盘使用记录

手工删除:和查看的方法类似,分三步,缺一不可,顺序也不能反! 第一步 设置环境变量,变量名为“devmgr_show_nonpresent_devices”,值为“1”。 第二步 打开设备管理器,勾上“查看”菜单中的“显示隐藏设备”。如果之前已经打开设备管理器,则要关了,重新打开。 第三步 清除“磁盘驱动器”、“存储卷”、“通用串行总线控制器”3个栏目下所有的灰色的图标,注意是所有!右键点击灰色图标,然后选择“卸载”。 成功 :结果USBSTOR 没有了 ...

qq_40544338的博客 2万+

信息熵和交叉熵损失函数

是模型预测的各个类别的概率分布,两个向量的点乘求和(就是公式中里面那个求和计算)就是这个样本的一次交叉熵损失值了,这和信息熵几乎一样。可以看出torch实现的交叉熵损失函数F.cross_entropy 和我们实现的结果是一致的(注意两者的实现公式稍有不同)代码中cross_entropy函数对信息熵的计算和本文推导的公式稍有不同,本质一样,主要为了代码编写方便。信息熵较小,三个事件中倾向发生事件三,数据的确定性较高(等价数据的不确定性较低)。理解那个为1的类别其概率为100%,其他类别的概率都为0,

weixin_42924890的博客 1235

细节增强卷积DEConv详解及代码复现

这种预训练模型能够捕捉图像的基本特征,为后续的端到端训练提供良好的初始参数。例如,在RESIDE和RESIDE-6K数据集上的实验结果表明,使用MSPLCK模块的MixDehazeNet-L模型在RESIDE-IN数据集上首次超过了42dB的PSNR指标,且在所有数据集上均优于先前的方法。例如,在RESIDE和RESIDE-6K数据集上的实验结果表明,使用MSPLCK模块的MixDehazeNet-L模型在RESIDE-IN数据集上首次超过了42dB的PSNR指标,且在所有数据集上均优于先前的方法。

hasakie的博客 1909

FPGA防抄板实战:如何利用Xilinx芯片的“身份证”(DNA)实现你的加密锁?

本文深入探讨了如何利用Xilinx FPGA芯片的DNA(Device Native Authentication)功能实现硬件级加密保护,防止设计被抄袭。文章详细解析了DNA的物理实现、获取方式,并提供了从DNA到加密密钥的转换方法,以及构建商业级加密防护系统的实战方案。通过JTAG和原语两种读取方式的对比,帮助开发者选择最适合的方案。

weixin_42548829的博客 382

机器学习-信息熵、交叉熵、KL散度汇总

本文系统介绍了信息论中的核心概念及其关系。首先从信息量出发,阐释了事件概率与信息量的反比关系;进而引出信息熵作为系统不确定性的度量,并说明其编码意义。随后介绍了交叉熵和KL散度的定义,揭示了三者关系:交叉熵=信息熵+KL散度。最后分析了交叉熵作为损失函数的优势,指出最小化交叉熵等价于最小化KL散度,使预测分布逼近真实分布。文章通过数学推导和直观解释相结合的方式,清晰展现了信息论基本概念的内在联系及其在机器学习中的应用价值。

qq_20604231的博客 452

Jetson AGX Orin到手必看:DP线选错黑屏、SSD不识别?这篇避坑指南帮你一次搞定

本文详细介绍了Jetson AGX Orin开发套件的硬件避坑指南,涵盖开箱检查、DP线选择、SSD兼容性等关键问题。通过实测数据和实用技巧,帮助开发者避免黑屏、存储不识别等常见问题,提升开发效率。特别推荐符合VESA认证的DP 1.4a线缆和兼容性优秀的SSD型号,确保设备稳定运行。

weixin_33696822的博客 433

【机器学习基础】为什么逻辑回归的损失函数是交叉熵?

前言当前正在整理机器学习中逻辑回归的基础和面试内容,这里有一个值得思考的问题与大家分享与讨论。本文约1k字,预计阅读5分钟。概要逻辑回归(logistic regression)在机器学习...

fengdu78的博客 2178

codesys【modbusRTU】主站

【代码】modbusRTU【codesys】

cfqq1989的博客 4370

工业激光器核心参数详解与选型实战:从理论到产线落地(五)

本文深入解析了脉冲激光加工的三大核心参数——脉宽、重复频率和脉冲能量的协同作用机制。通过公式推导和产线案例,揭示了参数设置对加工良率的关键影响:1. 脉宽决定热影响区大小,缩短脉宽可显著提升加工精度;2. 重复频率影响加工速度和热积累效应,需平衡效率与质量;3. 脉冲能量决定材料去除量,过大易导致加工缺陷。文中以ABS塑料打标、模具清洗和微孔钻孔为例,展示了参数优化如何将良率从65%提升至99%,并提供了不同应用场景的参数选型表和调试技巧,强调峰值功率比平均功率更具决定性作用。

weixin_44520581的博客 2421

从信息熵到模型量化

​ 今天做模型量化的时候想了解下背后的原理,然后发现又用到了KL散度,在模型量化中用它去评估量化前后的精度损失,同时也看到了老朋友交叉熵,整理一番之后又有了新的收获。 交叉熵与KL散度 问题:KL散度和交叉熵是什么关系?为什么之前深度学习分类问题中使用交叉熵而不是KL散度作为loss函数?? 信息论里的熵是什么 熵(Entropy)最早由热力学引入,而信息论中的熵指的是随机变量的不确定性。 信息论认为百分百概率发生的事件信息量为0,概率越低的事件信息量越大,所以可以用事件发生概率的倒数取对数来量化

Ctrlturtle的博客 1274

手把手教你学PCIE--所有 PF(Physical Function)共同管理和分配 VF

但具体如何分配和使用 VF 取决于硬件设计、驱动程序配置以及实际应用场景。

MHD0815的博客 1462

深刻理解交叉熵损失函数、Focal Loss

<最近真是觉得自己基础太差啦,好多都只会用,但并不了解背后真正的原理。 趁这一个月好好整理下吧。祈祷今年找个好工作~> 交叉熵损失函数(CrossEntropy Loss)-----分类问题中经常使用的一种损失函数 交叉熵是信息论中的一个重要概念,主要用于度量两个概率分布间的差异性。 信息量 信息熵 信息熵也被称为熵,用来表示所有信息量的期望。 期望是试验中每次可能结果的概率乘以其结果的总和。 相对熵(KL散度) 交叉熵 #1、pytorch直接调用二分类交叉熵损失

ZSH12345678900的博客 2185

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

相对熵与交叉熵_熵、交叉熵、相对熵的整理

1、熵1.1 信息量信息量是指信息多少的度量。一般而言,我们认为一个事件发生的概率越大,那么它包含的信息量就越小。如我们所,明天的太阳还会从东边升起来,这个事情发生的概率非常大,那么它所含的信息量其实没有多少,但是如果我们说如果明天美国要和我们开战了,那么它所含的信息量会更巨大,因为我们不知道美国为什么要和我们开战,开战之后会照成什么样的影响,这些都是我们无法估计的,所以此时它所含有信息量会就很大...

weixin_39992788的博客 938

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

交叉熵的故事

《关于交叉熵的故事》   做视觉三年多了,自己能力虽然提升了,但是总感觉没有沉淀下来一些可见的东西,所以从去年年末开始写博客,或者是翻译论文,或者是整理对一些知识理解的文章,总的来说赠人玫瑰,手有余香吧,还是挺有收获的,所以还是会继续坚持,把一些相对抽象的数学公式以故事的形式呈现出来,这也感谢很多前辈的文章。 Key Words:熵、KL散度、交叉熵、BCE Beijing, 2020 作者:RaySue Code: Agile Pioneer   信息量   交叉熵是信息论中的一个.

雄关漫道真如铁 而今迈步从头越 641

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

从熵到交叉熵损失函数:深入解析信息论在深度学习中的应用

本文深入解析了信息论中的熵、交叉熵和KL散度在深度学习中的关键应用。从物理学中的熵概念到信息熵的数学表达,再到交叉熵损失函数在图像分类、自然语言处理等领域的实践价值,揭示了这些理论如何提升模型性能。特别探讨了Softmax与交叉熵的黄金组合及其在PyTorch中的实现细节,为开发者提供了实用的技术洞见。

weixin_28715081的博客 303

18种损失函数全详解及其PyTorch实现与机制

文章目录基础概念损失函数(Loss Function)代价函数(Cost Function)目标函数(Objective Function)PyTorch实现与机制nn.CrossEntropyLoss功能与使用数学原理信息熵相对熵(KL散度)交叉熵使用实例nn.NLLLoss()功能与使用数学原理nn.BCELoss()功能与使用数学原理nn.BCEWithLogitsLoss()nn.L1Lo...

nstarLDS的博客 1万+

Quora Question Pairs整理 - 理解交叉熵损失函数

引言 在Quora Question Pairs比赛中,我们的目标是判断给定的两个问题的语义信息是否相同(即是否为重复问题),使用的评估标准是log loss,交叉熵损失函数 \[ \frac{1}{N}\sum_{i=0}^{N}{-y_i \log{\widehat{y}_i} - (1-y_i)\log{(1-\widehat{y}_i)}}\] 在这个比赛中,训练集和测试集的类型存在不平衡...

weixin_30418341的博客 268

深度学习损失函数原理解析(一)

在深度学习中,我们经常用到损失函数,损失函数选择使用情况直接决定我们模型训练效果。 1.前言 损失函数是深度学习与机器学习里面的重要函数。从字面意思可确定,损失函数(Loss Function)反应的是模型对数据的拟合程度。损失函数越小,说明模型对数据拟合程度越好,反之拟合程度越差。 损失函数是用来估量模型的预测值prediction(x)与真值Y之间的不一致问题,非负值函数,通常L(Y,prediction(x))表示损失函数公式,损失函数越好,鲁棒性越好,损失函数是经验风险函数的核心部分,也是结构风险函

智市科技博客 2614

Cross Entropy in Machine Learning

整理摘自:https://blog.youkuaiyun.com/tsyccnh/article/details/79163834 信息论 Outline 1. 信息量与信息熵 2. 相对熵(KL散度) 3. 交叉熵 -------------------------------- 1. 信息量与信息熵 https://baike.baidu.com/item/%E4%BF%A1%E6%81%...

weixin_30642029的博客 131
上一篇: OpenCV中的「SVM分类器」:基本原理、函数解析和示例代码
下一篇: Python自动绘制UML类图、函数调用图(Call Graph)
虾米小馄饨
博客等级 码龄12年 1万+粉丝 60原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值