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')
相关推荐
All The Way North-7 小时前
【完形填空实战】BERT中文MLM微调:数据构造→训练→评估,有完整可运行代码
pytorch·bert·预训练模型·transformers·模型微调·mlm·完形填空
拥抱太阳061611 小时前
HarmonyOS 应用开发《掌上英语》第6篇-资源管理最佳实践多模块资源复用
pytorch·深度学习·harmonyos
YOLO数据集集合15 小时前
果蔬视觉识别数据集全量使用指南|计算机视觉图像分类工程落地|PyTorch迁移学习训练全流程
pytorch·计算机视觉·分类
承渊政道16 小时前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(从退化问题到信息高速公路:ResNet残差网络实战拆解)
网络·人工智能·pytorch·深度学习·resnet·chatglm·卷积
大鹏的NLP博客2 天前
深度学习模型PyTorch与ONNX数值一致性校验通用技术报告
人工智能·pytorch·深度学习·onnx
FriendshipT2 天前
Ultralytics:解读BNContrastiveHead模块
人工智能·pytorch·python·深度学习·目标检测
程序员羽痕2 天前
基于深度学习的眼疾识别系统
人工智能·pytorch·深度学习·分类·django
pokemen邪13 天前
PyTorch KernelAgent 源码解读 ---(6)--- Composer
人工智能·pytorch·composer
FriendshipT4 天前
Ultralytics:解读SPPF模块
人工智能·pytorch·python·深度学习·目标检测
不负信仰4 天前
PyTorch KernelAgent 源码解读 ---(5)--- Dispatcher
人工智能·pytorch·python