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=1Npilogqipi=i=1Npi(logpilogqi)  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>

函数定义:

torch.nn.KLDivLoss(size_average=None, reduce=None, reduction='mean', log_target=False)

  其中,size_averagereduce参数已被弃用,具体功能由参数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(logPQ),这与定义式的结果不同,因此,还需要对input取对数操作(在官方文档中也有提及,建议将input映射到对数空间,防止数值下溢),一个示例代码为:

import torch
import torch.nn.Functional as F
torch.nn.KLDivLoss(F.softmax(Q).log(), F.softmax(P), reduction='mean')

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-24 12:26:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-24 12:26:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-24 12:26:04       82 阅读
  4. Python语言-面向对象

    2024-03-24 12:26:04       91 阅读

热门阅读

  1. HTML世界之标签Ⅶ

    2024-03-24 12:26:04       40 阅读
  2. GaussDB分区表自动新增分区

    2024-03-24 12:26:04       39 阅读
  3. 横向滚动展示内容

    2024-03-24 12:26:04       44 阅读
  4. vite vue3中使用 webworker

    2024-03-24 12:26:04       42 阅读
  5. (数据类型)前端八股文修炼Day1

    2024-03-24 12:26:04       29 阅读
  6. 【保姆级讲解计算机视觉的研究方向】

    2024-03-24 12:26:04       34 阅读
  7. 【Docker】常用命令 docker logs

    2024-03-24 12:26:04       37 阅读
  8. 第二十八章:Docker自动化部署脚本

    2024-03-24 12:26:04       32 阅读