首页 > 编程语言 >述FunsorFunsor是一个类似张量的函数和分布库。概率规划的泛函张量获取系统描述 ppl,pyro的衍生项目,人工智能python编程 ,深度神经网络

述FunsorFunsor是一个类似张量的函数和分布库。概率规划的泛函张量获取系统描述 ppl,pyro的衍生项目,人工智能python编程 ,深度神经网络

时间:2024-09-03 11:23:17浏览次数:7  
标签:Pyro 张量 value funsor pyro FunsorFunsor Funsors


项目描述

Funsor

Funsor是一个类似张量的函数和分布库。

看见概率规划的泛函张量获取系统描述。

安装

使用pip安装:

Funsor支持Python 3.7+。


pip install funsor


从源安装:


git clone [email protected]:pyro-ppl/funsor.git cd funsor git checkout master pip install .


使用funsor

Funsor可以通过许多界面使用:

设计

看见设计文档.

这个库的目标是概括放火狂者的延迟推理算法从离散变量到连续变量,并创造机器,使部分延迟采样兼容的普遍性。为了实现这一目标,该库选择了三种正交设计:

  1. 开放术语是对象。Funsors将张量接口一般化,以涵盖多变量的任意函数(“输入”),其中变量可以是整数、实数或实张量。函数求值/替换是基本操作,广义张量索引。这允许概率分布是第一类有趣的,并利用现有的张量机制,例如,我们可以将张量压缩推广到计算共轭概率模型中的解析积分。
  2. 支持非标准解读。Funsors支持用户定义的解释,包括,eager,lazy,混合eager+lazy,memoized(像opt_einsum的共享),以及近似解释,像积分运算的蒙特卡罗近似(例如.sum()在一个有趣的维度上)。
  3. 命名维度。换人是搞笑者最基本的操作。为了避免位置索引张量库中广播和高级索引的困难,所有的函数维都被命名。索引使用.__call__()方法,并且可以解释为替换(具有很好理解的语义)。Funsors被视为每维有一个代数自由变量的代数表达式。每个维度要么是协变的(一个输出),要么是逆变的(一个输入)。

使用funsor我们可以很容易地实现Pyro风格延迟采样,大致是:


trace_log_prob = 0.

def pyro_sample(name, dist, obs=None):
    assert isinstance(dist, Funsor)
    if obs is not None:
        value = obs
    elif lazy:
        # delayed sampling (like Pyro's parallel enumeration)
        value = funsor.Variable(name, dist.support)
    else:
        value = dist.sample('value')[0]['value']

    # save log_prob in trace
    trace_log_prob += dist(value)

    return value

# ...later during inference...
loss = -trace_log_prob.reduce(logaddexp)  # collapses delayed variables


看见funsor/minipyro.py完整的实现。

相关项目

引用

如果您使用Funsor,请考虑引用:

@article{obermeyer2019functional,
  author = {Obermeyer, Fritz and Bingham, Eli and Jankowiak, Martin and
            Phan, Du and Chen, Jonathan P},
  title = {{Functional Tensors for Probabilistic Programming}},
  journal = {arXiv preprint arXiv:1910.10775},
  year = {2019}
}

标签:Pyro,张量,value,funsor,pyro,FunsorFunsor,Funsors
From: https://blog.51cto.com/u_16120231/11907336

相关文章

  • PyTorch从入门到放弃之张量模块
    目录张量的数据类型torch.rand()函数torch.randn()函数torch.normal()函数torch.linspace()函数torch.manual_seed()函数torch.ones()、torch.zeros()、torch.eye()张量的基本操作增加和删除维度交换维度拼接和分割堆叠和分解索引和切片基本数学运算元素求和按索引求和元素乘积求......
  • Pytorch:torch.diag()创建对角线张量方式例子解析
    在PyTorch中,torch.diag函数可以用于创建对角线张量或提取给定矩阵的对角线元素。以下是一些详细的使用例子:创建对角矩阵:如果输入是一个向量(1D张量),torch.diag将返回一个2D方阵,其中输入向量的元素作为对角线元素。例如:a=torch.randn(3)print(a)#输出:tensor([0.5950,......
  • 【深度学习】文本张量表示方法
    1文本张量表示将一段文本使用张量进行表示,其中一般将词汇为表示成向量,称作词向量,再由各个词向量按顺序组成矩阵形成文本表示.举个例子:["人生","该","如何","起头"]==>#每个词对应矩阵中的一个向量[[1.32,4,32,0,32,5.2],[3.1,5.43,0.34,3.2],[3.21,......
  • 【PyTorch学习6】张量形状操作
    reshapereshape函数用于改变数据的维度;#使用data.shapedata.size()查看数据大小#reshape前后元素个数不变data=torch.tensor([[1,2,3],[4,5,6]])#torch.Size([2,3])data1=data.reshape(3,2)#torch.Size([3,2])#使用-1省略形状data2=data.reshape(1......
  • 掌握 PyTorch 张量乘法:八个关键函数与应用场景对比解析
    PyTorch提供了几种张量乘法的方法,每种方法都是不同的,并且有不同的应用。我们来详细介绍每个方法,并且详细解释这些函数有什么区别:1、torch.matmultorch.matmul是PyTorch中用于矩阵乘法的函数。它能够处理各种不同维度的张量,并根据张量的维度自动调整其操作方式。torch......
  • Pytorch入门:tensor张量的构建
    tensor数据结构是pytorch的基础与核心,本文主要介绍三种常用的tensor张量的构建方式。1.从已有其他数据转换为tensor数据常用方法有如下两种:torch.tensortorch.Tensor上述两种方法有细微的差别,具体通过示例来进行展示运行结果为 首先,torch.tensor会对转换前容器内元素......
  • 命名张量的解释
    importtorch把3个颜色grb通道合并为一个灰度通道定义变量,用随机数模拟img_t=torch.randn(3,5,5)batch_t=torch.randn(2,3,5,5)weights=torch.randn(3)朴素的求法以channels通道的平均数为灰度值img_gray_naive=img_t.mean(-3)batch_gray_naive=batch......
  • 深度学习张量数值计算
    张量的介绍PyTorch是一个Python深度学习框架,它将数据封装成张量(Tensor)来进行运算。PyTorch中的张量就是元素为同一种数据类型的多维矩阵。在PyTorch中,张量以"类"的形式封装起来,对张量的一些运算、处理的方法被封装在类中。张量基本运算基本运算中,包括add、sub、mul......
  • 如何使用字典更改张量中的值?
    当我有如下的张量和字典时,如何将字典映射到张量?例如,Dict={1:'A',2:'B',3:'C'}ex=torch.tensor([[1,2,3],[3,2,1]])#Expectedresult#tensor([[A,B,C],#[C,B,A]])我尝试了这个代码和torch.where,但它不起作用出色地。......
  • ValueError:层“dense_2”需要 1 个输入,但它收到了 2 个输入张量
    我无法加载我的模型,它一直显示错误ValueError:层“dense_2”需要1个输入,但它收到了2个输入张量。收到的输入:[<KerasTensorshape=(None,7,7,1280),dtype=float32,稀疏=False,name=keras_tensor_2896>,<KerasTensorshape=(None,7,7,1280),dtype=float32,稀疏=F......