pytorch 计算 kl散度 F.kl_div()
先附上官方文档说明:torch.nn.functional — PyTorch 1.13 documentation
torch.nn.functional.
kl_div
(input, target, size_average=None, reduce=None, reduction='mean')Parameters
input – Tensor of arbitrary shape
target – Tensor of the same shape as input
size_average (bool, optional) – 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 fieldsize_average
is set toFalse
, the losses are instead summed for each minibatch. Ignored when reduce isFalse
. Default:True
reduce (bool, optional) – Deprecated (see
reduction
). By default, the losses are averaged or summed over observations for each minibatch depending onsize_average
. Whenreduce
isFalse
, returns a loss per batch element instead and ignoressize_average
. Default:True
reduction (string, optional) – 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()相关推荐
- PyTorch中计算KL散度详解
PyTorch计算KL散度详解 最近在进行方法设计时,需要度量分布之间的差异,由于样本间分布具有相似性,首先想到了便于实现的KL-Divergence,使用PyTorch中的内置方法时,踩了不少坑,在 ...
- matlab计算kl散度命令,熵,交叉熵,KL散度公式与计算实例
交叉熵(Cross Entropy)和KL散度(Kullback–Leibler Divergence)是机器学习中极其常用的两个指标,用来衡量两个概率分布的相似度,常被作为Loss Function ...
- python计算矩阵的散度_python 3计算KL散度(KL Divergence)
KL Divergence KL( Kullback–Leibler) Divergence中文译作KL散度,从信息论角度来讲,这个指标就是信息增益(Information Gain)或相对熵(Rel ...
- Pytorch中KL loss
1. 概念 KL散度可以用来衡量两个概率分布之间的相似性,两个概率分布越相近,KL散度越小. 上述公式表示P为真实事件的概率分布,Q为理论拟合出来的该事件的概率分布.D(P||Q)(P拟合Q)和D(Q ...
- pytorch中的kl散度,为什么kl散度是负数?
F.kl_div()或者nn.KLDivLoss()是pytroch中计算kl散度的函数,它的用法有很多需要注意的细节. 输入 第一个参数传入的是一个对数概率矩阵,第二个参数传入的是概率矩阵.并且因为 ...
- KL散度的计算及其相关问题题
KL散度的计算及其相关问题题 关键词:KLKLKL散度计算,softmaxsoftmaxsoftmax,可不可以用sigmoidsigmoidsigmoid,KLKLKL散度为负数 KL散度的计算 K ...
- 损失函数——KL散度(Kullback-Leibler Divergence,KL Divergence)
KL散度(Kullback-Leibler Divergence,简称KL散度)是一种度量两个概率分布之间差异的指标,也被称为相对熵(Relative Entropy).KL散度被广泛应用于信息论.统 ...
- 模型量化中的KL散度扫盲
万万没想到,最后还是入了算法的坑,虽然学的是工科,但数学能力和正经数学,信息学相关专业毕业的同学没法比,充其量算是半个爱好者,但是逐渐愿意投入时间思考这方面的问题,对于一个年近不惑的中年人来说,不知道 ...
- 机器学习:KL散度详解
KL 散度,是一个用来衡量两个概率分布的相似性的一个度量指标. 我们知道,现实世界里的任何观察都可以看成表示成信息和数据,一般来说,我们无法获取数据的总体,我们只能拿到数据的部分样本,根据数据的部分样 ...
最新文章
- 深度学习11个实用技巧
- NOIp 图论算法专题总结 (1):最短路、最小生成树、最近公共祖先
- react key的作用
- Hightchart y轴不允许显示小数
- 洛谷P4831 Scarlet loves WenHuaKe
- python中从键盘输入的代码_python如何从键盘获取输入实例
- html5 移动端单页面布局
- Bailian4067 回文数字(Palindrome Number)【数学】
- 百度搜索引擎关键字URL采集爬虫优化行业定投方案高效获得行业流量-笔记篇
- 设计模式(行为型模式)——模板方法模式(Template Method)
- JAVA中的继承和覆盖
- 引文工具的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- tushare基本用法
- Linux查看内存的方法
- 动手学数据分析之数据加载及探索性数据分析
- 台式计算机有哪些部分组成,常用台式电脑的基本组成
- 爬取分析雪球网实盘用户数据
- 逻辑回归实现鸢尾花分类
- 远程桌面链接怎么共享本地磁盘
- 2021会同一中高考成绩查询,2021年怀化高考状元是谁分数多少分,历年怀化高考状元名单...