Pytorch log_prob做什么?
在一些(例如机器学习)库中,我们可以找到Pytorch log_prob做什么?,pytorch,probability-distribution,Pytorch,Probability Distribution,在一些(例如机器学习)库中,我们可以找到log\u prob函数。它的作用是什么?它与普通的log有何不同 例如,此代码的目的是什么: dist = Normal(mean, std) sample = dist.sample() logprob = dist.log_prob(sample) 接下来,我们为什么要先获取一个日志,然后对结果值求幂,而不是直接计算它: prob = torch.exp(dist.log_prob(sample)) 部分答案是,log\u prob返回给定样本值
log\u prob
函数。它的作用是什么?它与普通的log
有何不同
例如,此代码的目的是什么:
dist = Normal(mean, std)
sample = dist.sample()
logprob = dist.log_prob(sample)
接下来,我们为什么要先获取一个日志,然后对结果值求幂,而不是直接计算它:
prob = torch.exp(dist.log_prob(sample))
部分答案是,
log\u prob
返回给定样本值下评估的概率密度/质量函数的对数。正如您自己的答案所述,log\u prob
返回密度或概率的对数。在这里,我将谈谈你问题中的其余几点:
- 这与
有何不同?发行版没有方法log
。如果他们这样做了,最接近的解释可能确实是类似于log
的东西,但这不是一个非常精确的名称,因为If回避了“记录什么”的问题?一个分布有多个数值属性(例如其平均值、期望值等),而概率或密度只是其中之一,因此名称可能不明确log_prob
Tensor.log()
方法(这可能是您的想法),因为Tensor
本身就是一个数学量,我们可以使用log
- 为什么以后只取概率的对数来求幂呢?以后可能不需要对其求幂。例如,如果您有概率的日志
和p
,那么您可以直接将q
计算为log(p*q)
,避免中间求幂。这在数值上更稳定(避免下溢),因为概率可能会变得非常接近零,而它们的日志则不会。一般来说,加法也比乘法更有效,其导数更简单。网站上有一篇关于这些主题的好文章log(p)+log(q)
log\u prob
记录(某些动作)的概率。例如:
action_logits = torch.rand(5)
action_probs = F.softmax(action_logits, dim=-1)
action_probs
返回:
张量([0.1457,0.2831,0.1569,0.2221,0.1922])
然后:
返回:
张量(-1.8519)张量(-1.8519)你找到答案了吗?我希望有一种直接的方法来计算torch中的PDF。这很接近,但很烦人,你必须尝试一下。
dist = Categorical(action_probs)
action = dist.sample()
print(dist.log_prob(action), torch.log(action_probs[action]))