F.kl_div()或者nn.KLDivLoss()是pytroch中计算kl散度的函数,它的用法有很多需要注意的细节。
输入
第一个参数传入的是一个对数概率矩阵,第二个参数传入的是概率矩阵。并且因为kl散度具有不对称性,存在一个指导和被指导的关系,因此这连个矩阵输入的顺序需要确定一下。如果现在想用Y指导X,第一个参数要传X,第二个要传Y。就是被指导的放在前面,然后求相应的概率和对数概率就可以了。
所以,一随机初始化一个tensor为例,对于第一个输入,我们需要先对这个tensor进行softmax(确保各维度和为1),然后再取log;对于第二个输入,我们需要对这个tensor进行softmax。
import torch
import torch.nn.functional as F
a = torch.tensor([[0,0,1.1,2,0,10,0],[0,0,1

本文探讨了在PyTorch中计算KL散度时出现负数的原因,强调了输入矩阵的处理方式,包括需要对第一个参数进行softmax和log操作,第二个参数仅需softmax。错误的softmax应用或精度问题可能导致各维度和不为1,从而计算出负的KL散度。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



