问题标签 [probabilistic-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
764 浏览

probabilistic-programming - Pyro Paramstore 的不同访问方法给出不同的结果

我正在关注预测中的 Pyro 入门教程,并在训练模型后尝试访问学习的参数,我对其中一些使用不同的访问方法得到了不同的结果(而对另一些得到相同的结果)。

这是教程中精简的可重现代码:

到目前为止,一切都很好; 现在,我想检查存储在Paramstore. 似乎有不止一种方法可以做到这一点;使用get_all_param_names()方法:

我明白了

但是使用named_parameters()方法:

为 location ( locs) 参数提供相同的值,但为所有参数提供不同scales的值:

这怎么可能?根据文档Paramstore是一个简单的键值存储;里面只有这六个键:

因此,不可能一种方法访问一组项目而另一种访问不同的项目。

我在这里错过了什么吗?

0 投票
1 回答
175 浏览

julia - 将 `missing` 参数传递给 Turing.jl 中的伯努利模型

Turing.jl 有一个指南,展示了如何编写允许您传递数据或missing参数的模型。在第一种情况下,它将为您提供后验,在第二种情况下,它将从所有变量中提取。

设置

工作示例是这样的:

我试图将此代码改编为简单的硬币翻转。我认为,bernoulli分布应该有数据类型BoolInt64不过我也试过)。我试过这样做:

但它给了我一个很长的错误消息,我没有得到,但很可能指向一个类型问题:

试图从gdemo上面的工作函数中模仿语法(我没有完全理解),给你:

这也会失败并显示以以下开头的错误消息:

我该如何正确地写这个?解释我做错了什么的奖励积分:D 谢谢!

0 投票
1 回答
2723 浏览

pytorch - NumPyro vs Pyro:为什么前者快 100 倍,我什么时候应该使用后者?

来自 Pytorch-Pyro 的网站

我们很高兴地宣布发布 NumPyro,这是一个由 NumPy 支持的 Pyro,使用 JAX 进行自动微分和 JIT 编译,HMC 和 NUTS 的加速超过 100 倍!

我的问题:

  1. NumPyro(超过 Pyro)的性能增益(有时是 340 倍或 2 倍)究竟来自哪里?
  2. 更重要的是,为什么(更确切地说,在哪里)我会继续使用 Pyro?

额外的:

  1. 与 Tensorflow Probability 相比,我应该如何查看 NumPyro 的性能和功能,以决定在哪里使用哪个?
0 投票
0 回答
223 浏览

tensorflow - 在 MNIST 数据集上使用 Tensoroflow_Probability NOT 实现变分自动编码器

我知道有很多与变分自动编码器相关的问题。但是,这个问题在两个方面与现有的问题不同:1)它是使用Tensforflow V2和Tensorflow_probability实现的;2)它不使用MNIST或任何其他图像数据集。

至于问题本身:

我正在尝试使用 Tensorflow_probability 和 Keras 实现 VAE。我想在一些合成数据集上对其进行训练和评估——作为我研究的一部分。我提供了下面的代码。

虽然实现已经完成并且在训练期间,损失值降低了,但是一旦我想在我的测试集上评估训练好的模型,我就会面临不同的错误。

我以某种方式确信该问题与输入/输出形状有关,但不幸的是我没有设法解决它。

这是代码:

问题:

  1. 使用上面的代码,我收到以下错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError:reshape 的输入是具有 80 个值的张量,但请求的形状有 160 [Op:Reshape]

  1. 据我所知,我们可以在解码器模型中在其输出层之前添加任意数量的层——因为它是通过卷积 VAE 完成的,对吗?

  2. 如果我在解码器中取消注释以下两行代码:

我看到以下警告和即将出现的错误:

警告:张量流:当最小化损失时,变量 ['dec_dense1/kernel:0', 'dec_dense1/bias:0', 'dec_dense2/kernel:0', 'dec_dense2/bias:0'] 不存在梯度。警告:张量流:当最小化损失时,变量 ['dec_dense1/kernel:0', 'dec_dense1/bias:0', 'dec_dense2/kernel:0', 'dec_dense2/bias:0'] 不存在梯度。警告:张量流:当最小化损失时,变量 ['dec_dense1/kernel:0', 'dec_dense1/bias:0', 'dec_dense2/kernel:0', 'dec_dense2/bias:0'] 不存在梯度。警告:张量流:当最小化损失时,变量 ['dec_dense1/kernel:0', 'dec_dense1/bias:0', 'dec_dense2/kernel:0', 'dec_dense2/bias:0'] 不存在梯度。

和错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError:reshape 的输入是具有 640 个值的张量,但请求的形状有 160 [Op:Reshape]

现在的问题是为什么在训练期间不使用解码器层,正如警告中提到的那样。

PS,我也尝试在训练和评估过程中直接通过x_train,x_valid,x_test,但没有帮助。

任何帮助都将不胜感激。

0 投票
1 回答
861 浏览

python - PyStan 或 PyMC3 来利用机器学习桌面?

如果我想最大限度地利用我的 4 GPU 机器学习桌面的计算能力,我应该使用 PyStan 还是 PyMC3 在 Python 中进行概率编程?

0 投票
0 回答
22 浏览

python - 为什么 PyroPPL 中的 `Distribution` 类有 `log_prob()` 方法但没有 `prob()` 方法?

在 PyroPPL 中,存在一个Distribution具有sample()方法和log_prob()方法的抽象类。该log_prob()方法允许您评估给定标量或值数组的分布的对数概率密度。我很惊讶没有prob()方法。这意味着无论何时您希望评估概率密度,您都需要以菊花链方式连接一个log_prob()方法和一个exp()方法。没有方法的原因是什么prob()?假设评估给定分布的概率密度将是一种常见操作是否正确?

我对 PPL 相当陌生,所以这是其他 PPL 的常见选择吗?

0 投票
0 回答
40 浏览

scala - 我可以在 Rainier 中使用学生 T 分布吗?

我想开始使用 Rainier 统计框架。有一个预建发行版列表,其中不包括我的项目需要的 Student's T。如何在我的模型之前使用自定义分布?

0 投票
1 回答
143 浏览

probabilistic-programming - Pyro 在使用 NUTS (MCMC) 采样器时改变离散潜变量的维度

感谢您花时间阅读我的问题,如下所示。

我需要帮助的问题是,当我使用 NUTS 采样器运行模型时,我的二项式分布输出的维度在第二次迭代期间(自动)发生变化。因此,我的其余代码(此处未给出)会引发尺寸不匹配错误。如果我只通过调用函数(不使用采样器)来运行模型函数,它会很好,即使我一直重复调用函数。但是当我使用采样器时它失败了。

我使用如下所述的更小更简单的代码复制了该问题(此代码不代表我的实际代码,但复制了该问题)。

  • 我导入的包:

Pyro 的版本是 1.5,PyTorch 是 1.7

  • 该模型
  • 直接调用模型生成模拟数据时的输出
  • MCMC 采样器代码
  • 运行 MCMC 采样器时的输出(上面的代码)

在上面的输出中,请观察变量A的维度。最初它的大小为 5,后来变为 2。由于我在 DINA 模型中的剩余代码给出了错误。

在上面的代码中,变量A基于先验变量,先验的维度是 5。那么据我所知,A应该始终为 5。请帮助我理解为什么它会变为 2,以及如何避免这种情况发生。

另外,我无法理解的是B的维度始终保持为 5。在上面的代码中,BA作为输入,但即使A改变了维度, B也不会改变维度。

非常感谢您的帮助。

0 投票
1 回答
35 浏览

algorithm - 概率算法,最好的情况实例可以依赖于随机参数吗?

给定这个概率算法(伪代码):

编辑:数组中的可能值为 1..n

我认为有一个最好的情况实例 (array[0] = p) 但是,这包括一个随机参数,我觉得它不正确。我是对还是错,为什么?

0 投票
0 回答
106 浏览

julia - 对 Julia、Turing.jl 和 Distributions.jl 中的概率编程语言感到困惑

我目前正在研究一个简单的贝叶斯问题,其中我的可能性是N泊松分布的乘积,所以我得到了以下信息:

其中x是一个向量,表示变量,另一边的乘积在维度上运行(从iN)。是与向量mean_i中的变量相关联的平均值。x_ix

据我了解图灵和分布,我认为以下是可能性的“正确”代码部分:

其中means是一个向量,包含与每个泊松过程相关的各种方法。这是对的吗?:D