首页 > 编程语言 >pyro plate的介绍,plate也能设置cuda pytorch概率编程 贝叶斯神经网络

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

时间:2024-09-03 11:24:45浏览次数:11  
标签:plate 张量 火炬 pyro pytorch 模块 data


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存储中。若要与参数存储或写入磁盘进行交互,请参见因素.

因素

返回

受约束的参数。可以通过以下方式访问基本的无约束参数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的缩写)价值: 火炬。张量事件_尺寸: 可选择的[(同Internationalorganizations)国际组织] = 没有人)→ 火炬。张量[来源]

确定性语句来添加Delta名为的网站名字和价值价值追踪到。当我们想要记录完全由父母决定的值时,这很有用。例如:


x = pyro.sample("x", dist.Normal(0, 1))
x2 = pyro.deterministic("x2", x ** 2)


注意

场地不影响模型密度。这当前转换为sample()语句,但将来可能会改变。

因素

子样品(数据: 火炬。张量事件_尺寸: (同Internationalorganizations)国际组织)→ 火炬。张量[来源]

基于封闭对数据张量进行子采样的子采样语句plate

这通常在以下参数上调用model()当子采样由自动执行时plates通过传递subsample或者subsample_size克沃格。例如,以下内容是等效的:


# Version 1. using indexing
def model(data):
    with pyro.plate("data", len(data), subsample_size=10, dim=-data.dim()) as ind:
        data = data[ind]
        # ...

# Version 2. using pyro.subsample()
def model(data):
    with pyro.plate("data", len(data), subsample_size=10, dim=-data.dim()):
        data = pyro.subsample(data, event_dim=0)
        # ...


因素

返回

的二次抽样版本data

返回类型

张量

classplate(name: str, size: Optional[int] = None, subsample_size: Optional[int] = None, subsample: Optional[torch.Tensor] = None, dim: Optional[int] = None, use_cuda: Optional[bool] = None, device: Optional[str] = None)[source]¶

班级盘子(名字: 潜艇用热中子反应堆(submarine thermal reactor的缩写)大小: 可选择的[(同Internationalorganizations)国际组织] = 没有人子样本_大小: 可选择的[(同Internationalorganizations)国际组织] = 没有人子样品: 可选择的[火炬。张量] = 没有人暗淡的: 可选择的[(同Internationalorganizations)国际组织] = 没有人使用_cuda: 可选择的[弯曲件] = 没有人设备: 可选择的[潜艇用热中子反应堆(submarine thermal reactor的缩写)] = 没有人)[来源]

碱基:pyro.poutine.plate_messenger.PlateMessenger

条件独立变量序列的构造。

plate可以作为生成器顺序使用,也可以作为上下文管理器并行使用(以前irangeiarange,分别为)。

连续的plate类似于range()因为它生成一系列值。

矢量化plate类似于torch.arange()因为它产生一个索引数组,通过该数组可以索引其他张量。plate不同于torch.arange()因为它还通知推理算法被索引的变量是有条件独立的。为此,plate是作为上下文管理器而不是函数提供的,用户必须保证中的所有计算plate上下文是有条件独立的:


with pyro.plate("name", size) as ind:
    # ...do conditionally independent stuff with ind...


此外,plate可以通过对索引进行二次采样并通知推理算法来缩放各种计算值,从而利用条件独立性假设。这通常用于对小批量数据进行二次抽样:


with pyro.plate("data", len(data), subsample_size=100) as ind:
    batch = data[ind]
    assert len(batch) == 100


缺席subsample_size=False这简单地产生了一个torch.arange(0, size)。如果0 < subsample_size <= size这产生了单个随机批次的大小索引subsample_size并将所有对数似然项缩放为size/batch_size在这种情况下。

警告

只有在上下文中所有计算都是有条件独立的情况下,这才是正确的。

因素

返回

一个可重用的上下文管理器torch.Tensor指数。

例子


>>> # This version declares sequential independence and subsamples data:
>>> for i in pyro.plate('data', 100, subsample_size=10):
...     if z[i]:  # Control flow in this example prevents vectorization.
...         obs = pyro.sample(f'obs_{i}', dist.Normal(loc, scale),
...                           obs=data[i])
 
>>> # This version declares vectorized independence:
>>> with pyro.plate('data'):
...     obs = pyro.sample('obs', dist.Normal(loc, scale), obs=data)
 
>>> # This version subsamples data in vectorized way:
>>> with pyro.plate('data', 100, subsample_size=10) as ind:
...     obs = pyro.sample('obs', dist.Normal(loc, scale), obs=data[ind])
 
>>> # This wraps a user-defined subsampling method for use in pyro:
>>> ind = torch.randint(0, 100, (10,)).long() # custom subsample
>>> with pyro.plate('data', 100, subsample=ind):
...     obs = pyro.sample('obs', dist.Normal(loc, scale), obs=data[ind])
 
>>> # This reuses two different independence contexts.
>>> x_axis = pyro.plate('outer', 320, dim=-1)
>>> y_axis = pyro.plate('inner', 200, dim=-2)
>>> with x_axis:
...     x_noise = pyro.sample("x_noise", dist.Normal(loc, scale))
...     assert x_noise.shape == (320,)
>>> with y_axis:
...     y_noise = pyro.sample("y_noise", dist.Normal(loc, scale))
...     assert y_noise.shape == (200, 1)
>>> with x_axis, y_axis:
...     xy_noise = pyro.sample("xy_noise", dist.Normal(loc, scale))
...     assert xy_noise.shape == (200, 320)


看见SVI第二部分进行长时间的讨论。

板材_堆叠(前缀: 潜艇用热中子反应堆(submarine thermal reactor的缩写)大小: 顺序[(同Internationalorganizations)国际组织]最右边_dim: (同Internationalorganizations)国际组织 = - 1)→ 迭代程序[没有人][来源]

创建一个连续的堆栈plate带有尺寸的:

rightmost_dim - len(sizes), ..., rightmost_dim

因素

组件(名字: 潜艇用热中子反应堆(submarine thermal reactor的缩写)nn _模块: 火炬. nn .模块.模块.模块更新模块参数: 弯曲件 = 错误的)→ 火炬. nn .模块.模块.模块[来源]

注册的所有参数torch.nn.Module用Pyro的param_store。结合使用ParamStoreDict save()load()功能,这允许用户保存和加载模块。

注意

考虑改用PyroModule,是的更新替代产品pyro.module()它更好地支持:jitting,在C++中服务,以及将参数转换为随机变量。有关详细信息,请参见模块教程 .

因素

返回

火炬. nn .模块

随机模块(名字nn _模块在先的;在前的*一个参数名**夸尔斯)[来源]

警告

这随机模块原语已被弃用,并将在未来的版本中被删除。使用PyroModule而不是创建贝叶斯模型torch.nn.Module实例。参见贝叶斯回归教程举个例子。

不推荐使用在模块的参数上放置一个priornn _模块。返回一个分布(可调用)nn。组件s,它在调用时返回一个采样的nn。组件.

因素

返回

返回采样模块的可调用函数

屏障(数据: 火炬。张量)→ 火炬。张量[来源]

实验确保中的所有值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输出的属性。对此属性调用诊断方法。

示例:


def model(x):
    scale = pyro.param("scale", torch.tensor(0.5), constraint=constraints.positive)
    return pyro.sample("y", dist.Normal(x, scale))

@pyro.ops.jit.trace
def model_log_prob_fn(x, y):
    cond_model = pyro.condition(model, data={"y": y})
    tr = pyro.poutine.trace(cond_model).get_trace(x)
    return tr.log_prob_sum()


因素

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

标签:plate,张量,火炬,pyro,pytorch,模块,data
From: https://blog.51cto.com/u_16120231/11907310

相关文章

  • python 数据分析 损失数值 如何放到csv中呢 人工智能 深度神经网络,Pytorch ,tensorflo
    损失数值如何放到csv中呢 在Python中,使用`csv`模块将数据写入CSV文件是一种常见的操作。从你提供的代码片段来看,你想要将损失数值写入名为`middle_losse.csv`的文件中。但是,你提供的代码片段中存在一些需要修改的地方,以确保数据能够正确地写入CSV文件。首先,`csv.writer`对象的`wr......
  • pyro 概率编程语言 能直接调用pytorch的save函数保存模型,贝叶斯神经网络
    NeuralNetworks—Pyrodocumentationhttps://docs.pyro.ai/en/stable/nn.htmldocs.pyro.ai/en/stable/nn.html神经网络¶该模块pyro.nn提供在深度概率编程上下文中有用的神经网络模块的实现。烟火模块¶Pyro包括一个类PyroModule,的子类torch.nn.Module,其属性可以被火焰效果修......
  • NumPyro入门API和开发人员参考 pyro分布推理效果处理程序贡献代码更改日志入门教程使
    NumPyro文档¶NumPyro入门API和开发人员参考烟火元素分布推理效果处理程序贡献代码更改日志入门教程使用NumPyro的贝叶斯回归贝叶斯分层线性回归例如:棒球击球率示例:变型自动编码器例子:尼尔的漏斗例子:随机波动例如:亚麻和俳句可变推断参数化NumPyro模型的自动绘制不良后几何及......
  • 述FunsorFunsor是一个类似张量的函数和分布库。概率规划的泛函张量获取系统描述 ppl,p
    项目描述FunsorFunsor是一个类似张量的函数和分布库。看见概率规划的泛函张量获取系统描述。安装使用pip安装:Funsor支持Python3.7+。pipinstallfunsor从源安装:[email protected]:pyro-ppl/funsor.gitcdfunsorgitcheckoutmasterpipinstall.使用funsorFunsor......
  • 第J2周:ResNet50V2算法实战与解析(pytorch版)
    >-**......
  • PyTorch构建模型训练模块
    前面几篇分别是数据导入模块,模型类的构建模块,损失函数模块,优化器模块,上述模块搭建好后建立训练模块,将上述几个模块在训练模块中调用完成训练。这个不太好解释直接看模块示例: 上面是训练模块,分别传入训练总轮次steps,实例化模型model,损失函数loss_func,但是下面训练的时候它将损......
  • Pytorch损失函数模块
     直接调用定义就好了要使用的损失函数,但是nn.functional和nn.Module中都有损失函数,至于从哪个包中调用损失函数看你的需求,和图中所说一样,如果没有需要学习的参数就用nn.functional,如果有要学习更新的参数就用nn.Module。虽然是这样说,但是我看这个代码下面使用的就算是使用func......
  • PyTorch自定义模型类
    使用Pytorch自己建立一个模型类:继承初始  建立一个模型的类,一定要继承nn,Module父类,初始化:def__init__(self):super(self).__init__():如果不这样操作就使用不了继承中初始化,也使用不了继承的一些函数。 建立自己的网络层图中初始化后的self.conv都是使......
  • PyTorch导入数据
    先导入数据:将要处理的文件数据导入x_train,y_train,x_valid,y_valid中,转换为张量。 使用PyTorch中的数据模块,将上面转换为张量的数据使用TensorDataset函数转换为数据集。之后使用DataLoader来加载数据集,DataLoader包相当于一个派发器的感觉。 下方也是一个导入数据示例......
  • 动手学深度学习8.1. 序列模型-笔记&练习(PyTorch)
    本节课程地址:序列模型_哔哩哔哩_bilibili本节教材地址:8.1.序列模型—动手学深度学习2.0.0documentation(d2l.ai)本节开源代码:...>d2l-zh>pytorch>chapter_multilayer-perceptrons>sequence.ipynb序列模型想象一下有人正在看网飞(Netflix,一个国外的视频网站)上的电影。......