ptorch中的nn.KLDivLoss:KL散度损失

KL散度被广泛应用于度量分布之间的差异,其形式为: D K L ( P ∣ ∣ Q ) = ∑ i = 1 N p i l o g p i q i = ∑ i = 1 N p i ∗ ( l o g p i − l o g q i ) D_{KL}(P||Q)=\sum_{i=1}^{N}p_ilog\frac{p_i}{q_i}=\sum_{i=1}^{N}p_i*(logp_i-logq_i) DKL(P∣∣Q)=i=1∑Npilogqipi=i=1∑Npi∗(logpi−logqi)  pytorch中给出了两种不同的方法用于计算KL散度,分别是torch.nn.functional.kl_div()和torch.nn.KLDivLoss(),两者计算效果类似,区别无非是直接计算和作为损失函数类,我们重点看torch.nn.KLDivLoss(),在深度学习中是一个很常见的损失。官方文档地址为:

nn.KLDivLoss:https://pytorch.org/docs/stable/generated/torch.nn.KLDivLoss.html#torch.nn.KLDivLoss\>

函数定义:

c 复制代码
torch.nn.KLDivLoss(size_average=None, reduce=None, reduction='mean', log_target=False)

其中,size_average与reduce参数已被弃用,具体功能由参数reduction代替;reduction:指定损失输出的形式,有四种选择:none|mean|batchmean|sum。none:损失不做任何处理,直接输出一个数组;mean:将得到的损失求平均值再输出;batchmean:将输出的总和除以batchsize;sum:将得到的损失求和再输出;log_target:指定是否对输入的target使用log操作。

在使用上,nn.KLDivLoss和交叉熵损失是不同的,对于pytorch中的交叉熵损失torch.nn.CrossEntropyLoss,我们给进的网络预测结果不需要进行softmax处理,给进的labels可以仅仅是一个label的list,函数中内置了对标签进行的ont-hot操作,而在nn.KLDivLoss中并没有这种操作,因此,对于nn.KLDivLoss输入的两个分布input和target,我们首先要对其进行softmax操作。此外,当log_target参数设定为False时,计算方式为: P ∗ ( l o g P − Q ) P*(logP-Q) P∗(logP−Q),这与定义式的结果不同,因此,还需要对input取对数操作(在官方文档中也有提及,建议将input映射到对数空间,防止数值下溢),一个示例代码为:

c 复制代码
import torch
import torch.nn.Functional as F
torch.nn.KLDivLoss(F.softmax(Q).log(), F.softmax(P), reduction='mean')
相关推荐
羊小猪~~2 小时前
深度学习项目----用LSTM模型预测股价(包含LSTM网络简介,代码数据均可下载)
pytorch·python·rnn·深度学习·机器学习·数据分析·lstm
醒了就刷牙2 小时前
58 深层循环神经网络_by《李沐:动手学深度学习v2》pytorch版
pytorch·rnn·深度学习
Hoper.J11 小时前
PyTorch 模型保存与加载的三种常用方式
人工智能·pytorch·python
没有余地 EliasJie11 小时前
Windows Ubuntu下搭建深度学习Pytorch训练框架与转换环境TensorRT
pytorch·windows·深度学习·ubuntu·pycharm·conda·tensorflow
被制作时长两年半的个人练习生13 小时前
【pytorch】权重为0的情况
人工智能·pytorch·深度学习
GarryLau16 小时前
使用pytorch进行迁移学习的两个步骤
pytorch·迁移学习·torchvision
醒了就刷牙1 天前
56 门控循环单元(GRU)_by《李沐:动手学深度学习v2》pytorch版
pytorch·深度学习·gru
橙子小哥的代码世界1 天前
【深度学习】05-RNN循环神经网络-02- RNN循环神经网络的发展历史与演化趋势/LSTM/GRU/Transformer
人工智能·pytorch·rnn·深度学习·神经网络·lstm·transformer
最近好楠啊1 天前
Pytorch实现RNN实验
人工智能·pytorch·rnn
IFTICing1 天前
【文献阅读】Attention Bottlenecks for Multimodal Fusion
人工智能·pytorch·python·神经网络·学习·模态融合