问题标签 [tensorflow-probability]

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 投票
1 回答
1010 浏览

python - 使用 TensorFlow 概率的贝叶斯逻辑回归

我在尝试运行有关 tensorflow 概率的贝叶斯逻辑回归示例时遇到问题,如图所示An Introduction to probabilistic Programming,现在可在 TensorFlow Probability中找到。

如果我只是在网站上运行代码,我会收到以下错误:

然后,当我指定 num_adaptation_steps=5 时,出现以下错误:

我不知道我做错了什么,任何帮助将不胜感激。谢谢!!

0 投票
1 回答
335 浏览

python - tensorflow_probability:当反向传播正态分布样本的 log_prob 时,梯度始终为零

作为项目的一部分,我在使用 tensorflow_probability 的正态分布梯度时遇到了问题。为此,我创建了一个正态分布,从中抽取了一个样本。然后将这个样本的 log_prob 输入优化器以更新网络的权重。

如果我得到某个常数的 log_prob,我总是得到非零梯度。不幸的是,我没有在教程或类似的帮助来源中找到任何相关帮助。

输出:梯度 [array([0.], dtype=float32)]

如果在计算样本的梯度时,我希望得到非零梯度。相反,输出始终为“0”。

0 投票
1 回答
451 浏览

python - 如何在 TensorFlow 中为矢量化参数设置双射器?

我在GaussianProcessRegressionModel上遵循本教程第三个示例的逻辑。但是,我的设置中的一个区别是我的幅值长度尺度是向量。但是,我很难为矢量化参数设置双射器。

我尝试了官方示例教程中的一种方法(单击此处并搜索关键字“Batching Bijectors”)。

他们用

更改 Softplus for scalar 参数的形状。但是控制台一直显示相同的错误消息。

compute_joint_log_prob_3只是在给定所有数据和参数的情况下输出标量对数后验概率。我已经测试过该功能运行良好。唯一的问题是unconstrained_bijectors在存在矢量化内核超参数的情况下的设置。

它应该可以工作,并且模型将抽取此参数的样本。相反,我收到一堆错误消息说

我不知道这些输入形状到底是什么意思。感谢您的时间和解释。

--------我是人工分隔线------

在和布赖恩讨论之后,我知道我错在哪里了。错误消息可能意味着结果compute_joint_log_prob_3不是标量而是其他形状。

正如布赖恩昨天所说,Softplus()能够根据它所依赖的张量自动广播。如果我想改变它的柔软度,那么我可以修改hinge_softness=....

并且在阅读了关于张量流分布形状的教程后,我也有了更深入的了解。

再次感谢您的澄清......在我知道我错在哪里之后,这是多么美好的一天......

0 投票
1 回答
295 浏览

python - TensorFlow 2 中许多伪数据实现的优化函数

我的最终目标是模拟似然比测试统计数据,但是,我遇到的核心问题是我不明白如何让 TensorFlow 2 为不同的数据输入执行许多优化。这是我的尝试,希望它能让您了解我正在尝试的内容:

输出:

最后我想计算测试统计

并表明它具有 5 个自由度的卡方分布。

我是 TensorFlow 的新手,所以也许我这样做完全错误,但我希望你能明白我想要什么。

编辑:

所以我玩了更多,我想 TensorFlow 根本不会像我假设的那样对输入张量进行并行优化。或者也许可以,但我需要进行不同的设置,即也许给它一个输入参数的张量和一个巨大的联合损失函数来一次所有的最小化?

我也尝试用一个简单的循环来做事,看看会发生什么。正如预测的那样,它慢得可怜,但我什至没有得到正确的答案:

输出不是 DOF=5 的卡方分布。实际上,检验统计量通常具有负值,这意味着优化后的结果通常比零假设更差,这应该是不可能的。

不是 DOF=5 的卡方分布

编辑2:

这是对“怪物”解决方案的一次尝试,我一次将每个伪数据实现的不同输入变量的巨大网络最小化。这感觉更像是 TensorFlow 可能擅长做的事情,尽管我觉得一旦我处理大量伪数据集就会耗尽内存。不过,我可能可以遍历成批的伪数据。

不幸的是,我现在收到错误:

我认为这是一种基本的错误。我想我只是不明白 TensorFlow 如何跟踪它需要计算的导数。如果我在损失函数内部而不是外部定义变量,似乎一切正常,但我需要在外部使用它们以便稍后访问它们的值。所以我想我不明白这里的一些东西。

0 投票
1 回答
1011 浏览

tensorflow - 如何在回归模型中使用来自 Tensorflow 概率的 Gamma 函数作为对数似然损失

我正在尝试使用该log_prob方法在自定义 Keras 损失函数中使用来自 tfp 的 Gamma 函数,但该函数总是nan在训练开始时返回。

我已经测试了损失函数,似乎工作正常:

问题可能与我传递给函数的参数 (alphabeta) 有关,这些参数由我正在使用的模型的最终(自定义)层生成。这是完整的片段:

0 投票
0 回答
47 浏览

tensorflow-probability - 如何计算 tfd.Normal(0,1) *x + tfd.Norma(2,3)

我正在尝试构建具有以下结构的贝叶斯神经网络:
y1 = w11 x11 w12 x12 + b1

y2 = w2 y1 + b2

w11, w12, b1, w2, b2 ~ N(0,1)
x11, x12变量的类型在哪里tf.float32

如何获得随机变量 y1?

我试过 edward2,但我想实现我自己版本的变分推理方法。所以我决定自己实现

我对 y 的预期结果应该是一个随机变量 ~ 正常

我懂了

0 投票
1 回答
235 浏览

python - 如何在 TensorFlow Probability 中创建不同内核对象的总和?

我有一个关于在Tensorflow-probability.

通常,如果我想创建一个内核对象,我会写

我知道内核对象支持批量广播。但是,如果我想构建一个内核对象,它是几个不同内核对象的总和,比如加性高斯过程,该怎么办?

我不确定如何在 Tensorflow 中“总结”内核对象。我能做的是创建几个单独的内核对象K1, ... KJ,网上好像没有类似的问题。

我在这里先向您的帮助表示感谢。


更新:我试过 direct +,但协方差矩阵有些奇怪

我编写了以下示例:

前四个协方差矩阵很好,我通过逐k(x_i, x_j)元素比较来仔细检查。

但是,我不知道它如何计算最后一个。我试过了

  1. 带有 kernel_1 的 feature_1 和带有 kernel_2 的 feature_2
  2. 带有 kernel_2 的 feature_1 和带有 kernel_1 的 feature_2

下面是最后三个矩阵的结果:

它们与我的结果不匹配。有谁知道他们如何计算不同的最后一个矩阵index_points

或者在一般情况下,我如何指定内核,以便它们可以拟合模型,例如additive Gaussian processes,其中不同index_points对应于不同的内核函数,以便我可以y_i = f_1(x_{1,i}) + f_2(x_{2,i}) + ...在 TensorFlow Probability 框架下拟合模型?

0 投票
1 回答
72 浏览

python - 来自 tfd.Distribution.sample 的复杂 event_shape

我正在尝试实现一个自定义 tfd.Distribution ,它代表一个复杂的状态转换模型(STM)。我需要从抽象方法 tfd.Distribution._sample_n 的实现中返回具有不同维度的 2 个数组的元组。但是,当包装器方法 (tfd.Distribution.sample) 尝试打包这些数组时,我遇到了麻烦。

STM 表征存在于多个互斥状态的群体。随着时间的推移,人口中的个体根据随机过程在状态之间转换。为了表示 STM(即样本)的实现,您最终会得到一个长度为 T 的向量,其中包含转换发生的时间,以及一个形状为 [T, M, N] 的多维数组,其中 T 是时间步数, M 是州的数量,N 是人口中的个体数量。

到目前为止,我有:

期望的结果:调用foo.sample()应该返回一个 (tf.tensor, tf.tensor) 的元组,其形状分别为 [T] 和 [T, M, N]。

实际的:

0 投票
0 回答
194 浏览

python - 将翻转层应用于 Keras DQN

我已经使用 tf-keras 创建了一个 DQN,现在我想通过使用 tensorflow-probability 添加一些贝叶斯翻转层来扩展 DQN。但是,我收到一个错误。我认为错误是由于我使用没有名称范围的 tensorflow 层,但我不确定应该将名称范围放在哪里(我是 tf 的新手,所以......)

DQN 代码:

错误信息:

0 投票
1 回答
131 浏览

probability-distribution - 在张量流概率中构建基于离散表的 CPD?

我正在尝试构建具有多个离散随机变量和条件概率的贝叶斯网络的最简单示例(科勒书中的“学生网络”,请参见1

虽然有点笨拙,但我设法使用 pymc3 构建了这个网络。特别是,在 pymc3 中创建 CPD 并不是那么简单,请参见下面的代码片段:

但我不知道如何使用 tensoflow-probability (versions: tfp-nightly==0.7.0.dev20190517, tf-nightly-2.0-preview==2.0.0.dev20190517)构建这个网络

对于无条件的二元变量,可以使用分类分布,例如

但是如何构建 CPD?

tensorflow-probability 中可能相关的类/方法很少(在tensorflow_probability/python/distributions/deterministic.py或已弃用ConditionalDistribution),但文档相当稀疏(需要深入了解 tfp)。

--- 更新问题 ---

克里斯的回答是一个很好的起点。然而,即使对于一个非常简单的二变量模型,事情仍然有点不清楚。

这很好用:

但是这个失败了

(我试图在第二个例子中明确地建模分类只是为了学习目的)

-- 更新:已解决 ---

显然,最后一个示例使用错误,tf.gather_nd而不是tf.gather因为我们只想根据dist_xoutome 选择第一行或第二行。此代码现在有效: