Pytorch测井标准化计算

oalqel3c  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(100)

我不明白Pytorch是如何进行日志规范化的,我找不到一个好的例子/解释。有人能提供一个解释吗?
eg

input_tensor =torch.tensor([0.6,0.4])
m = dist.Categorical(logits = input_tensor)
print(np.log(input_tensor))
print(m.logits)

gives: 
tensor([-0.5981, -0.7981])
tensor([-0.5108, -0.9163])

字符串
我的概率之和为1,所以没有什么需要标准化的,但Pytorch正在转换我的输入。
Pytorch的文档说:

  • logits参数将被解释为未标准化的对数概率,因此可以是任何真实的数字。它同样将被标准化,以便得到的概率之和沿最后一个维度沿着为1。logits将返回此标准化值。*

https://pytorch.org/docs/stable/distributions.html

tct7dpnv

tct7dpnv1#

np.log函数通过表达式计算值



因此,如果输入值是[0.6, 0.4],则结果输出将是tensor([-0.5108, -0.9163])
在处理Categorical时,您可以在这里探索PyTorch categorical.py源代码:https://github.com/pytorch/pytorch/blob/main/torch/distributions/categorical.py)。
你会发现一行代码:

self.logits = logits - logits.logsumexp(dim=-1, keepdim=True)

字符串
考虑输入Tensor为[0.6, 0.4],因此logits.logsumexp(dim=-1, keepdim=True)的值为


的数据
因此,这就是为什么m.logits产生tensor([-0.5981, -0.7981])

相关问题