翼度科技»论坛 编程开发 python 查看内容

Pytorch中的 torch.distributions库详解

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
Pytorch torch.distributions库


包介绍

torch.distributions包包含可参数化的概率分布和采样函数。 这允许构建用于优化的随机计算图和随机梯度估计器。
不可能通过随机样本直接反向传播。 但是,有两种主要方法可以创建可以反向传播的代理函数。
这些是
评分函数估计量 score function estimato
似然比估计量 likelihood ratio estimator
REINFORCE
路径导数估计量 pathwise derivative estimator
REINFORCE 通常被视为强化学习中策略梯度方法的基础,
路径导数估计器常见于变分自编码器的重新参数化技巧中。
虽然评分函数只需要样本 f(x)的值,但路径导数需要导数 f'(x)。
本文重点讲解Pytorch中的 torch.distributions库。
pytorch 的 torch.distributions 中可以定义正态分布:
  1. import torch
  2. from torch.distributions import  Normal
  3. mean=torch.Tensor([0,2])
  4. normal=Normal(mean,1)
复制代码
  1. sample()
复制代码
就是直接在定义的正太分布(均值为mean,标准差std是1)上采样:
  1. result = normal.sample()
  2. print("sample():",result)
复制代码
输出:
  1. sample(): tensor([-1.3362,  3.1730])
复制代码
  1. rsample()
复制代码
不是在定义的正太分布上采样,而是先对标准正太分布 N(0,1) 进行采样,然后输出:
  1. mean + std × 采样值
复制代码
  1. result = normal.rsample()
  2. print("rsample():",result)
复制代码
输出:
  1. rsample: tensor([ 0.0530,  2.8396])
复制代码
  1. log_prob(value)
复制代码
是计算value在定义的正态分布(mean,1)中对应的概率的对数,正太分布概率密度函数是:

对其取对数可得:

这里我们通过对数概率还原其对应的真实概率:
  1. print("result log_prob:",normal.log_prob(result).exp())
复制代码
输出:
  1. result log_prob: tensor([ 0.1634,  0.2005])
复制代码
到此这篇关于Pytorch中的 torch.distributions库的文章就介绍到这了,更多相关Pytorch torch.distributions库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/article/276347.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具