问题标签 [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.
probabilistic-programming - Pyro Paramstore 的不同访问方法给出不同的结果
我正在关注预测中的 Pyro 入门教程,并在训练模型后尝试访问学习的参数,我对其中一些使用不同的访问方法得到了不同的结果(而对另一些得到相同的结果)。
这是教程中精简的可重现代码:
到目前为止,一切都很好; 现在,我想检查存储在Paramstore
. 似乎有不止一种方法可以做到这一点;使用get_all_param_names()
方法:
我明白了
但是使用named_parameters()
方法:
为 location ( locs
) 参数提供相同的值,但为所有参数提供不同scales
的值:
这怎么可能?根据文档,Paramstore
是一个简单的键值存储;里面只有这六个键:
因此,不可能一种方法访问一组项目而另一种访问不同的项目。
我在这里错过了什么吗?
julia - 将 `missing` 参数传递给 Turing.jl 中的伯努利模型
Turing.jl 有一个指南,展示了如何编写允许您传递数据或missing
参数的模型。在第一种情况下,它将为您提供后验,在第二种情况下,它将从所有变量中提取。
设置
工作示例是这样的:
我试图将此代码改编为简单的硬币翻转。我认为,bernoulli
分布应该有数据类型Bool
(Int64
不过我也试过)。我试过这样做:
但它给了我一个很长的错误消息,我没有得到,但很可能指向一个类型问题:
试图从gdemo
上面的工作函数中模仿语法(我没有完全理解),给你:
这也会失败并显示以以下开头的错误消息:
我该如何正确地写这个?解释我做错了什么的奖励积分:D 谢谢!
pytorch - NumPyro vs Pyro:为什么前者快 100 倍,我什么时候应该使用后者?
来自 Pytorch-Pyro 的网站:
我们很高兴地宣布发布 NumPyro,这是一个由 NumPy 支持的 Pyro,使用 JAX 进行自动微分和 JIT 编译,HMC 和 NUTS 的加速超过 100 倍!
我的问题:
- NumPyro(超过 Pyro)的性能增益(有时是 340 倍或 2 倍)究竟来自哪里?
- 更重要的是,为什么(更确切地说,在哪里)我会继续使用 Pyro?
额外的:
- 与 Tensorflow Probability 相比,我应该如何查看 NumPyro 的性能和功能,以决定在哪里使用哪个?
tensorflow - 在 MNIST 数据集上使用 Tensoroflow_Probability NOT 实现变分自动编码器
我知道有很多与变分自动编码器相关的问题。但是,这个问题在两个方面与现有的问题不同:1)它是使用Tensforflow V2和Tensorflow_probability实现的;2)它不使用MNIST或任何其他图像数据集。
至于问题本身:
我正在尝试使用 Tensorflow_probability 和 Keras 实现 VAE。我想在一些合成数据集上对其进行训练和评估——作为我研究的一部分。我提供了下面的代码。
虽然实现已经完成并且在训练期间,损失值降低了,但是一旦我想在我的测试集上评估训练好的模型,我就会面临不同的错误。
我以某种方式确信该问题与输入/输出形状有关,但不幸的是我没有设法解决它。
这是代码:
问题:
- 使用上面的代码,我收到以下错误:
tensorflow.python.framework.errors_impl.InvalidArgumentError:reshape 的输入是具有 80 个值的张量,但请求的形状有 160 [Op:Reshape]
据我所知,我们可以在解码器模型中在其输出层之前添加任意数量的层——因为它是通过卷积 VAE 完成的,对吗?
如果我在解码器中取消注释以下两行代码:
我看到以下警告和即将出现的错误:
警告:张量流:当最小化损失时,变量 ['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,但没有帮助。
任何帮助都将不胜感激。
python - PyStan 或 PyMC3 来利用机器学习桌面?
如果我想最大限度地利用我的 4 GPU 机器学习桌面的计算能力,我应该使用 PyStan 还是 PyMC3 在 Python 中进行概率编程?
python - 为什么 PyroPPL 中的 `Distribution` 类有 `log_prob()` 方法但没有 `prob()` 方法?
在 PyroPPL 中,存在一个Distribution
具有sample()
方法和log_prob()
方法的抽象类。该log_prob()
方法允许您评估给定标量或值数组的分布的对数概率密度。我很惊讶没有prob()
方法。这意味着无论何时您希望评估概率密度,您都需要以菊花链方式连接一个log_prob()
方法和一个exp()
方法。没有方法的原因是什么prob()
?假设评估给定分布的概率密度将是一种常见操作是否正确?
我对 PPL 相当陌生,所以这是其他 PPL 的常见选择吗?
scala - 我可以在 Rainier 中使用学生 T 分布吗?
我想开始使用 Rainier 统计框架。有一个预建发行版列表,其中不包括我的项目需要的 Student's T。如何在我的模型之前使用自定义分布?
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。在上面的代码中,B将A作为输入,但即使A改变了维度, B也不会改变维度。
非常感谢您的帮助。
algorithm - 概率算法,最好的情况实例可以依赖于随机参数吗?
给定这个概率算法(伪代码):
编辑:数组中的可能值为 1..n
我认为有一个最好的情况实例 (array[0] = p) 但是,这包括一个随机参数,我觉得它不正确。我是对还是错,为什么?
julia - 对 Julia、Turing.jl 和 Distributions.jl 中的概率编程语言感到困惑
我目前正在研究一个简单的贝叶斯问题,其中我的可能性是N
泊松分布的乘积,所以我得到了以下信息:
其中x
是一个向量,表示变量,另一边的乘积在维度上运行(从i
到N
)。是与向量mean_i
中的变量相关联的平均值。x_i
x
据我了解图灵和分布,我认为以下是可能性的“正确”代码部分:
其中means
是一个向量,包含与每个泊松过程相关的各种方法。这是对的吗?:D