先附上官方文档说明:torch.nn.functional — PyTorch 1.13 documentation

torch.nn.functional.kl_div(inputtargetsize_average=Nonereduce=Nonereduction='mean')

Parameters

  • input – Tensor of arbitrary shape

  • target – Tensor of the same shape as input

  • size_average (booloptional) – Deprecated (see reduction). By default, the losses are averaged over each loss element in the batch. Note that for some losses, there multiple elements per sample. If the field size_average is set to False, the losses are instead summed for each minibatch. Ignored when reduce is False. Default: True

  • reduce (booloptional) – Deprecated (see reduction). By default, the losses are averaged or summed over observations for each minibatch depending on size_average. When reduce is False, returns a loss per batch element instead and ignores size_average. Default: True

  • reduction (stringoptional) – Specifies the reduction to apply to the output: 'none' | 'batchmean' | 'sum' | 'mean''none': no reduction will be applied 'batchmean': the sum of the output will be divided by the batchsize 'sum': the output will be summed 'mean': the output will be divided by the number of elements in the output Default: 'mean'

然后看看怎么用:第一个参数传入的是一个对数概率矩阵,第二个参数传入的是概率矩阵。这里很重要,不然求出来的kl散度可能是个负值

比如现在我有两个矩阵X, Y。因为kl散度具有不对称性,存在一个指导和被指导的关系,因此这连个矩阵输入的顺序需要确定一下。

举个例子:如果现在想用Y指导X,第一个参数要传X,第二个要传Y。就是被指导的放在前面,然后求相应的概率和对数概率就可以了。

import torch
import torch.nn.functional as F# 定义两个矩阵
x = torch.randn((4, 5))
y = torch.randn((4, 5))# 因为要用y指导x,所以求x的对数概率,y的概率
logp_x = F.log_softmax(x, dim=-1)
p_y = F.softmax(y, dim=-1)kl_sum = F.kl_div(logp_x, p_y, reduction='sum')
kl_mean = F.kl_div(logp_x, p_y, reduction='mean')print(kl_sum, kl_mean)>>> tensor(3.4165) tensor(0.1708)

贴一下下面的评论解释一下reduction参数,比如mean是对所有元素求平均,那么最后kl_sum就是kl_mean的4*5=20倍,即3.41是0.17的20倍。

pytorch 计算 kl散度 F.kl_div()相关推荐

  1. PyTorch中计算KL散度详解

    PyTorch计算KL散度详解 最近在进行方法设计时,需要度量分布之间的差异,由于样本间分布具有相似性,首先想到了便于实现的KL-Divergence,使用PyTorch中的内置方法时,踩了不少坑,在 ...

  2. matlab计算kl散度命令,熵,交叉熵,KL散度公式与计算实例

    交叉熵(Cross Entropy)和KL散度(Kullback–Leibler Divergence)是机器学习中极其常用的两个指标,用来衡量两个概率分布的相似度,常被作为Loss Function ...

  3. python计算矩阵的散度_python 3计算KL散度(KL Divergence)

    KL Divergence KL( Kullback–Leibler) Divergence中文译作KL散度,从信息论角度来讲,这个指标就是信息增益(Information Gain)或相对熵(Rel ...

  4. Pytorch中KL loss

    1. 概念 KL散度可以用来衡量两个概率分布之间的相似性,两个概率分布越相近,KL散度越小. 上述公式表示P为真实事件的概率分布,Q为理论拟合出来的该事件的概率分布.D(P||Q)(P拟合Q)和D(Q ...

  5. pytorch中的kl散度,为什么kl散度是负数?

    F.kl_div()或者nn.KLDivLoss()是pytroch中计算kl散度的函数,它的用法有很多需要注意的细节. 输入 第一个参数传入的是一个对数概率矩阵,第二个参数传入的是概率矩阵.并且因为 ...

  6. KL散度的计算及其相关问题题

    KL散度的计算及其相关问题题 关键词:KLKLKL散度计算,softmaxsoftmaxsoftmax,可不可以用sigmoidsigmoidsigmoid,KLKLKL散度为负数 KL散度的计算 K ...

  7. 损失函数——KL散度(Kullback-Leibler Divergence,KL Divergence)

    KL散度(Kullback-Leibler Divergence,简称KL散度)是一种度量两个概率分布之间差异的指标,也被称为相对熵(Relative Entropy).KL散度被广泛应用于信息论.统 ...

  8. 模型量化中的KL散度扫盲

    万万没想到,最后还是入了算法的坑,虽然学的是工科,但数学能力和正经数学,信息学相关专业毕业的同学没法比,充其量算是半个爱好者,但是逐渐愿意投入时间思考这方面的问题,对于一个年近不惑的中年人来说,不知道 ...

  9. 机器学习:KL散度详解

    KL 散度,是一个用来衡量两个概率分布的相似性的一个度量指标. 我们知道,现实世界里的任何观察都可以看成表示成信息和数据,一般来说,我们无法获取数据的总体,我们只能拿到数据的部分样本,根据数据的部分样 ...

最新文章

  1. 深度学习11个实用技巧
  2. NOIp 图论算法专题总结 (1):最短路、最小生成树、最近公共祖先
  3. react key的作用
  4. Hightchart y轴不允许显示小数
  5. 洛谷P4831 Scarlet loves WenHuaKe
  6. python中从键盘输入的代码_python如何从键盘获取输入实例
  7. html5 移动端单页面布局
  8. Bailian4067 回文数字(Palindrome Number)【数学】
  9. 百度搜索引擎关键字URL采集爬虫优化行业定投方案高效获得行业流量-笔记篇
  10. 设计模式(行为型模式)——模板方法模式(Template Method)
  11. JAVA中的继承和覆盖
  12. 引文工具的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  13. tushare基本用法
  14. Linux查看内存的方法
  15. 动手学数据分析之数据加载及探索性数据分析
  16. 台式计算机有哪些部分组成,常用台式电脑的基本组成
  17. 爬取分析雪球网实盘用户数据
  18. 逻辑回归实现鸢尾花分类
  19. 远程桌面链接怎么共享本地磁盘
  20. 2021会同一中高考成绩查询,2021年怀化高考状元是谁分数多少分,历年怀化高考状元名单...

热门文章

  1. openpyxl更改字体类型、字体颜色
  2. 查看linux文件生成时间,【linux】如何查看文件的创建、修改时间
  3. 基于Wireshark的TCP SACK重传介绍
  4. Java——entity(实体类)的写法规范
  5. 超声波模块HC-SR04简介以及编程
  6. 产品管理工具和项目管理工具
  7. 三类考试新练习试题附答案
  8. js input 正则保留2位小数中文拼音输入问题 + 限制输入整数的方案
  9. Mysql 入门学习总结
  10. mousemove实现图片鼠标跟随效果