pyro plate的先容,plate也能设置cuda pytorch概率编程 贝叶斯神经网络 ...

铁佛  论坛元老 | 2024-8-30 19:59:36 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1845|帖子 1845|积分 5535

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
class plate(name: strsize: Optional[int] = Nonesubsample_size: Optional[int] = Nonesubsample: Optional[torch.Tensor] = Nonedim: Optional[int] = Noneuse_cuda: Optional[bool] = Nonedevice: Optional[str] = None)[source]¶



基元 plate 

获取参数存储()→ pyro.params.param_store。ParamStoreDict[泉源]¶
返回全局ParamStoreDict.
清除参数存储()→ 没有人[泉源]¶
清除全局ParamStoreDict.
如果你在REPL工作,这尤其有用。我们建议在每个练习循环之前调用它(以避免从已往的模子中走漏参数),并且在每个单位测试之前调用它(以避免跨测试走漏参数)。
参数(名字: 潜艇用热中子反应堆(submarine thermal reactor的缩写)初始张量: 可选择的[联盟[火把。张量, 哀求即付的[[], 火把。张量]]] = 没有人限定: 火把.分布.约束.约束 = 真实()事件_尺寸: 可选择的[(同Internationalorganizations)国际构造] = 没有人)→ 火把。张量[泉源]¶
将变量作为参数生存在param存储中。若要与参数存储或写入磁盘举行交互,请拜见因素.
因素


  • 名字 (潜艇用热中子反应堆(submarine thermal reactor的缩写))–参数名称
  • 初始张量 (火把。张量或者哀求即付的)–返回张量的初始张量或惰性可调用函数。对于大的张量,写比方lambda: torch.randn(100000),只对初始语句举行评估。
  • 限定 (火把.分布.约束.约束)–火把约束,默认为constraints.real.
  • 事件_尺寸 ((同Internationalorganizations)国际构造)–(可选)与批处理无关的最右侧维度的数目。左边的维度将被视为批维度;如果param语句在二次抽样的样品板内,则参数的相应批次尺寸将相应地举行二次抽样。如果未指定,全部维度都将被视为事件变暗,并且不会执行二次采样。
返回
受约束的参数。可以通过以下方式访问基本的无约束参数pyro.param(...).unconstrained(),在哪里.unconstrained是weakref属性。
返回类型
火把。张量
样品(名字: 潜艇用热中子反应堆(submarine thermal reactor的缩写)【数学】函数: pyro . distributions . torch _ distribution。火把分配混合*一个参数名无线电定向标选择器: 可选择的[火把。张量] = 没有人obs_mask: 可选择的[火把。BoolTensor] = 没有人暗示: 可选择的[pyro.poutine.runtime.InferDict] = 没有人**夸尔斯)→ 火把。张量[泉源]¶
调用随机函数fn额外的副作用取决于name和封闭上下文(比方推理算法)。看见Pyro简介举行讨论。
因素


  • 名字–样品名称
  • 【数学】函数–分配类别或功能
  • 无线电定向标选择器–观察数据(可选;应仅在推理的上下文中使用)可选地在kwargs中指定
  • obs_mask (弯曲件或者张量)–形状的可选布尔张量掩码,可通过fn.batch_shape。如果提供,mask=True的事件将取决于obs别的的事件将通过抽样来估算。这引入了一个名为name + "_unobserved"导游应该使用它。
  • 暗示 (辞书)–kwargs中指定的推理参数的可选字典。有关具体信息,请拜见推理文档。
返回
样品
因素(名字: 潜艇用热中子反应堆(submarine thermal reactor的缩写)对数因子: 火把。张量*has_rsample: 可选择的[弯曲件] = 没有人)→ 没有人[泉源]¶
Factor语句将恣意对数概率因子添加到概率模子中。
警告
在指南中使用因子语句时,您需要指定因子语句是来自完全重新参数化的采样(比方重新参数化变量转换的雅可比行列式)还是来自非参数化的采样(比方离散样本)。对于完全重新参数化的情况,设置has_rsample=True;对于非参数化的情况,设置has_rsample=False。这仅在指南中需要,在模子中不需要。
因素


  • 名字 (潜艇用热中子反应堆(submarine thermal reactor的缩写))–小样本的名称
  • 对数因子 (火把。张量)–可能分批的对数概率因子。
  • has_rsample (弯曲件)–是否log_factor源于完全重新参数化的分布。在模子中使用时默认为False,但必须指定在指南中使用。
确定性的(名字: 潜艇用热中子反应堆(submarine thermal reactor的缩写)代价: 火把。张量事件_尺寸: 可选择的[(同Internationalorganizations)国际构造] = 没有人)→ 火把。张量[泉源]¶
确定性语句来添加Delta名为的网站名字和代价代价追踪到。当我们想要记载完全由父母决定的值时,这很有用。比方:
  1. x = pyro.sample("x", dist.Normal(0, 1))
  2. x2 = pyro.deterministic("x2", x ** 2)
复制代码
注意
场地不影响模子密度。这当前转换为sample()语句,但将来可能会改变。
因素


  • 名字 (潜艇用热中子反应堆(submarine thermal reactor的缩写))–站点的名称。
  • 代价 (火把。张量)–网站的代价。
  • 事件_尺寸 ((同Internationalorganizations)国际构造)–可选事件维度,默认为value.ndim.
子样品(数据: 火把。张量事件_尺寸: (同Internationalorganizations)国际构造)→ 火把。张量[泉源]¶
基于封闭对数据张量举行子采样的子采样语句plate南
这通常在以下参数上调用model()当子采样由主动执行时plates通过传递subsample或者subsample_size克沃格。比方,以下内容是等效的:
  1. # Version 1. using indexing
  2. def model(data):
  3.     with pyro.plate("data", len(data), subsample_size=10, dim=-data.dim()) as ind:
  4.         data = data[ind]
  5.         # ...
  6. # Version 2. using pyro.subsample()
  7. def model(data):
  8.     with pyro.plate("data", len(data), subsample_size=10, dim=-data.dim()):
  9.         data = pyro.subsample(data, event_dim=0)
  10.         # ...
复制代码
因素


  • 数据 (张量)–批量数据的张量。
  • 事件_尺寸 ((同Internationalorganizations)国际构造)–数据张量的事件维度。左侧的维度被视为批次维度。
返回
的二次抽样版本data
返回类型
张量
   classplate(name: strsize: Optional[int] = Nonesubsample_size: Optional[int] = Nonesubsample: Optional[torch.Tensor] = Nonedim: Optional[int] = Noneuse_cuda: Optional[bool] = Nonedevice: Optional[str] = None)[source]¶
  班级盘子(名字: 潜艇用热中子反应堆(submarine thermal reactor的缩写)大小: 可选择的[(同Internationalorganizations)国际构造] = 没有人子样本_大小: 可选择的[(同Internationalorganizations)国际构造] = 没有人子样品: 可选择的[火把。张量] = 没有人暗淡的: 可选择的[(同Internationalorganizations)国际构造] = 没有人使用_cuda: 可选择的[弯曲件] = 没有人设备: 可选择的[潜艇用热中子反应堆(submarine thermal reactor的缩写)] = 没有人)[泉源]¶
碱基:pyro.poutine.plate_messenger.PlateMessenger
条件独立变量序列的构造。
plate可以作为生成器顺序使用,也可以作为上下文管理器并行使用(以前irange和iarange,分别为)。
一连的plate类似于range()因为它生成一系列值。
矢量化plate类似于torch.arange()因为它产生一个索引数组,通过该数组可以索引其他张量。plate差别于torch.arange()因为它还通知推理算法被索引的变量是有条件独立的。为此,plate是作为上下文管理器而不是函数提供的,用户必须保证中的全部计算plate上下文是有条件独立的:
  1. with pyro.plate("name", size) as ind:
  2.     # ...do conditionally independent stuff with ind...
复制代码
别的,plate可以通过对索引举行二次采样并通知推理算法来缩放各种计算值,从而利用条件独立性假设。这通常用于对小批量数据举行二次抽样:
  1. with pyro.plate("data", len(data), subsample_size=100) as ind:
  2.     batch = data[ind]
  3.     assert len(batch) == 100
复制代码
缺席subsample_size=False这简单地产生了一个torch.arange(0, size)。如果0 < subsample_size <= size这产生了单个随机批次的大小索引subsample_size并将全部对数似然项缩放为size/batch_size在这种情况下。
警告
只有在上下文中全部计算都是有条件独立的情况下,这才是正确的。
因素


  • 名字 (潜艇用热中子反应堆(submarine thermal reactor的缩写))–帮助推理算法匹配的唯一名称plate模子和指南之间的站点。
  • 大小 ((同Internationalorganizations)国际构造)–二次抽样聚集的可选大小(如制止内置的范围).
  • 子样本_大小 ((同Internationalorganizations)国际构造)–二次抽样中使用的小批量的大小。默认为大小.
  • 子样品(任何支持len()。)–用于用户界说子采样方案的可选自界说子采样。如果指定,则子样本_大小将被设置为len(子样本).
  • 暗淡的 ((同Internationalorganizations)国际构造)–用于此独立性指数的可选维度。如果指定,dim应为负值,即应从右侧开始索引。如果没有指定,dim被设置为全部封闭的左边的最右边的尺寸plate背景。
  • 使用_cuda (弯曲件)–已弃用,请使用设备请改为arg。可选布尔值,指定是否将cuda张量用于子样品和log_prob。默认为torch.Tensor.is_cuda.
  • 设备 (潜艇用热中子反应堆(submarine thermal reactor的缩写))–可选关键字,指定放置结果的设备子样品和log_prob开着。默认情况下,结果与默认张量放置在同一设备上。
返回
一个可重用的上下文管理器torch.Tensor指数。
例子
  1. >>> # This version declares sequential independence and subsamples data:
  2. >>> for i in pyro.plate('data', 100, subsample_size=10):
  3. ...     if z[i]:  # Control flow in this example prevents vectorization.
  4. ...         obs = pyro.sample(f'obs_{i}', dist.Normal(loc, scale),
  5. ...                           obs=data[i])
复制代码
  1. >>> # This version declares vectorized independence:
  2. >>> with pyro.plate('data'):
  3. ...     obs = pyro.sample('obs', dist.Normal(loc, scale), obs=data)
复制代码
  1. >>> # This version subsamples data in vectorized way:
  2. >>> with pyro.plate('data', 100, subsample_size=10) as ind:
  3. ...     obs = pyro.sample('obs', dist.Normal(loc, scale), obs=data[ind])
复制代码
  1. >>> # This wraps a user-defined subsampling method for use in pyro:
  2. >>> ind = torch.randint(0, 100, (10,)).long() # custom subsample
  3. >>> with pyro.plate('data', 100, subsample=ind):
  4. ...     obs = pyro.sample('obs', dist.Normal(loc, scale), obs=data[ind])
复制代码
  1. >>> # This reuses two different independence contexts.
  2. >>> x_axis = pyro.plate('outer', 320, dim=-1)
  3. >>> y_axis = pyro.plate('inner', 200, dim=-2)
  4. >>> with x_axis:
  5. ...     x_noise = pyro.sample("x_noise", dist.Normal(loc, scale))
  6. ...     assert x_noise.shape == (320,)
  7. >>> with y_axis:
  8. ...     y_noise = pyro.sample("y_noise", dist.Normal(loc, scale))
  9. ...     assert y_noise.shape == (200, 1)
  10. >>> with x_axis, y_axis:
  11. ...     xy_noise = pyro.sample("xy_noise", dist.Normal(loc, scale))
  12. ...     assert xy_noise.shape == (200, 320)
复制代码
看见SVI第二部门举行长时间的讨论。
板材_堆叠(前缀: 潜艇用热中子反应堆(submarine thermal reactor的缩写)大小: 顺序[(同Internationalorganizations)国际构造]最右边_dim: (同Internationalorganizations)国际构造 = - 1)→ 迭代步调[没有人][泉源]¶
创建一个一连的堆栈plate带有尺寸的:
  1. rightmost_dim - len(sizes), ..., rightmost_dim
复制代码
因素


  • 前缀 (潜艇用热中子反应堆(submarine thermal reactor的缩写))–铭牌的名称前缀。
  • 大小 (可迭代的)–可重复的板尺寸。
  • 最右边_dim ((同Internationalorganizations)国际构造)–从右数,最右边的dim。
组件(名字: 潜艇用热中子反应堆(submarine thermal reactor的缩写)nn _模块: 火把. nn .模块.模块.模块更新模块参数: 弯曲件 = 错误的)→ 火把. nn .模块.模块.模块[泉源]¶
注册的全部参数torch.nn.Module用Pyro的param_store。结合使用ParamStoreDict save()和load()功能,这答应用户生存和加载模块。
注意
考虑改用PyroModule,是的更新替换产品pyro.module()它更好地支持:jitting,在C++中服务,以及将参数转换为随机变量。有关具体信息,请拜见模块教程 .
因素


  • 名字 (潜艇用热中子反应堆(submarine thermal reactor的缩写))–模块的名称
  • nn _模块 (火把. nn .模块)–要向Pyro注册的模块
  • 更新模块参数–确定PyTorch模块中的参数是否被ParamStore中的值覆盖(如果有)。默认为错误的
返回
火把. nn .模块
随机模块(名字nn _模块在先的;在前的*一个参数名**夸尔斯)[泉源]¶
警告
这随机模块原语已被弃用,并将在未来的版本中被删除。使用PyroModule而不是创建贝叶斯模子torch.nn.Module实例。拜见贝叶斯回归教程举个例子。
不保举使用在模块的参数上放置一个priornn _模块。返回一个分布(可调用)nn。组件s,它在调用时返回一个采样的nn。组件.
因素


  • 名字 (潜艇用热中子反应堆(submarine thermal reactor的缩写))–烟火模块的名称
  • nn _模块 (火把. nn .模块)–要向pyro注册的模块
  • 在先的;在前的–pyro分布、随机函数或python字典,以参数名作为关键字,以相应的分布/随机函数作为值。
返回
返回采样模块的可调用函数
屏障(数据: 火把。张量)→ 火把。张量[泉源]¶
实验确保中的全部值data是底子,而不是懒惰的爱好者或代价观。这在与结合使用时非常有用pyro.poutine.collapse().
启用_验证(is _验证: 弯曲件 = 真实的)→ 没有人[泉源]¶
在Pyro中启用或禁用验证检查。验证检查提供有用的警告和错误,比方NaN检查、验证分布参数和支持值、检测ELBO和MCMC的不正确使用。由于这些检查中的一些可能是昂贵的,您可能想要禁用成熟模子的验证以加速推断。
默认行为模仿Python的assert语句:默认情况下,验证是打开的,但是如果Python在优化模式下运行(通过python -O).同样,默认行为取决于Python的全局__debug__代价通过pyro.enable_validation(__debug__).
对于全部支持PyTorch jit的推理算法,在jit编译期间会临时禁用验证。我们建议用非JIT化的推理算法开辟模子以简化调试,一旦模子正确,就可以选择转移到JIT化的推理。
因素
is _验证 (弯曲件)–(可选;默认为True)是否启用验证检查。
验证_启用(is _验证: 弯曲件 = 真实的)→ 迭代步调[没有人][泉源]¶
临时启用/禁用验证检查时有用的上下文管理器。
因素
is _验证 (弯曲件)–(可选;默认为真)临时验证检查覆盖。
找到;查出(【数学】函数=没有人忽略_警告=错误的jit _选项=没有人)[泉源]¶
懒惰的替换品torch.jit.trace()与调用的Pyro函数一起工作pyro.param().
现实的编译工件存储在compiled输出的属性。对此属性调用诊断方法。
示例:
  1. def model(x):
  2.     scale = pyro.param("scale", torch.tensor(0.5), constraint=constraints.positive)
  3.     return pyro.sample("y", dist.Normal(x, scale))
  4. @pyro.ops.jit.trace
  5. def model_log_prob_fn(x, y):
  6.     cond_model = pyro.condition(model, data={"y": y})
  7.     tr = pyro.poutine.trace(cond_model).get_trace(x)
  8.     return tr.log_prob_sum()
复制代码
因素


  • 【数学】函数 (哀求即付的)–要跟踪的函数。
  • 忽略_警告 (弯曲件)–是否忽略jit警告。
  • jit _选项 (辞书)–要传递给的可选选项字典torch.jit.trace(),比方{"optimize": False}.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

铁佛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表