问题标签 [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 回答
927 浏览

python - TensorFlow Probability 和 PyTorch 中未实现正态和拉普拉斯的 KL 散度

在 TensorFlow Probability ( v0.4.0) 和 PyTorch ( v0.4.1) 中,正态分布 ( tfp, PyTorch ) 和拉普拉斯分布 ( tfp, PyTorch ) 的 KL Divergence 都没有实现,从而导致NotImplementedError抛出错误。

我假设这两个库都缺少这个,这是有充分理由的,并且用户应该tfp.distributions.RegisterKL在 TensorFlow Probability 和torch.distributions.kl.register_klPyTorch 中自己实现它。

这是正确的假设吗?如果是这样,有人可以解释为什么不对给定的分布类别实施 KL Divergence 吗?我想我错过了一些非常基本的东西。

如果我的假设是错误的,有人可以解释如何正确地让 TensorFlow 和 PyTorch 实现这些操作吗?

如需其他参考,在本示例中使用与 Edward 一起使用的旧版 TensorFlow,

在上面这个最小的例子中,我试图在(或)中实现以下edward玩具示例代码的等价物。tfptorch

0 投票
0 回答
675 浏览

python - TensorFlow:将 Keras 与可学习的 tfp.bijectors/tfp.distributions 结合使用

我正在尝试使用 tf.keras 重构我们的一些强化学习方法。keras 模型似乎非常适合我用于价值函数和预处理器的前馈网络,但是在尝试使用 keras 实现一些概率模型(例如策略)时,我遇到了困难。特别是,将 tfp.distributions 和 tfp.bijectors 与 tf.keras.Model 结合起来对我来说感觉非常不直观,而且我看到的所有示例(例如 [1, 2, 3])要么过于简单,要么依赖在我看来,“黑客”似乎破坏了使用 keras 模型的许多好处(例如,能够从模型本身隐藏输入处理、会话和数值评估)。

假设我想实现一个潜在空间策略,如 [4] 中所述,它使用 RealNVP 流将基于状态的高斯样本转换为动作。该策略需要至少支持两种操作: 1. 对动作 Y 进行采样,使得 Y = g(X|S) X ~ Normal(0, 1),其中 g 是 [4, 5] 中描述的 RealNVP 变换, S 是条件变量(例如,RL 案例中的状态观察)。2. 计算采样 Y 的对数概率。

一个简单的实现可能如下所示:

其中conditioned_real_nvp_template创建了一个前馈网络,它将潜在样本和沿最后一个轴的条件值连接起来,并将它们用作其输入。完整的例子可以在这里找到:https ://gist.github.com/hartikainen/17ac2ec102032e986cb4d31e225f592a

这种处理分配的方式对我来说有两个主要好处。首先,我不必手动处理参数的重用。我可以samples_and_log_probs在我的代码中多次调用,它会自动重用模型的参数。其次,如果我想获得数字输出,我不需要知道任何关于会话的信息。将中间层包装到它们自己的模型中允许我调用处理会话的预测方法。

进一步扩展示例时会出现问题。假设我想修改 ,LearnableConditionalRealNVP以便我可以提供潜在样本 x 作为输入,而不是调用distribution.sample()samples_and_log_probs_fn而是返回distribution.forward(x)。或者,也许我想将样本和 log_probs 分别从模型中取出。这将需要我将其拆分samples_and_log_probs_fn为两个单独的 lambda 函数,但如果我想共享 RealNVP 双射器的参数,这样做并非易事(因为我不能将双射器作为输入/输出传递给/来自 keras 层)。

LearnableConditionalRealNVP我尝试通过子类化from 来解决这些问题tf.keras.Model,但我所有的尝试都导致实现混乱,主要是由于输入和输出的变化。具体来说,我无法call为模型创建 - 方法以使模型保留与 一起使用的能力predict,并且我必须在 - 方法中制作一些技巧__call__。这些都不是很可怕,但它们确实增加了使用 keras 模型的开销,以至于我更容易在普通的 tensorflow 中实现这些类型的东西并手动处理会话、numpy 输出等。

我的问题是:

  1. 张量流双射器/分布是否应该与 keras(模型)兼容?如果是,有谁知道是否有任何重要的例子可供我看一下?如果不是,是否有计划使它们兼容?
  2. 在我认为一个模型有多个不同输出的情况下,我应该如何使用 keras 模型?例如,在我上面的例子中,可学习的 RealNVP 分布直观地感觉它应该是一个模型,但它有多个,可能是独立的输入/输出,这使得它很难适应 keras 模型框架。我愿意接受我的直觉是错误的,在这种情况下,很高兴听到构建此类模型的最佳实践是什么。
  3. 有没有办法像 [1] 中所做的那样将非张量数据作为输入/输出传递给 keras 模型,同时仍然保持模型以某种方式连接。如果在此示例中使用输入而不是tfe.Variables,则它会中断,因为图形未连接。

编辑:在发布此内容并使用上述实现进行一些额外测试后,我注意到该模型毕竟不可训练,因为 RealNVP 双射器的变量是在 keras lambda 层中创建的。这表明我构建这些模型的功能方式根本不能用于这些类型的模型。

[1] https://github.com/tensorflow/probability/blob/5f5510201865350b6cce2a0f18fbe0cdf4f15eee/tensorflow_probability/examples/disentangled_vae.py#L186

[2] https://blog.keras.io/building-autoencoders-in-keras.html

[3] http://louistiao.me/posts/implementing-variational-autoencoders-in-keras-beyond-the-quickstart-tutorial/

[4] https://arxiv.org/pdf/1804.02808.pdf

[5] https://arxiv.org/abs/1605.08803

0 投票
0 回答
82 浏览

tensorflow - Tensorflow_probability 整数类型错误

我正在尝试使用tensorflow_probability构建一个 mcmc 链。这是我的代码:

但我得到了这个错误::

0 投票
1 回答
760 浏览

tensorflow-probability - TensorFlow 概率逻辑回归示例

我觉得我必须遗漏一些明显的东西,在努力获得对张量流概率的逻辑回归的积极控制。

我在这里修改了逻辑回归的示例,并创建了正控制特征和标签数据。我努力实现超过 60% 的准确度,但是对于“普通”Keras 模型(准确度 100%)来说,这是一个简单的问题。我错过了什么?我尝试了不同的层、激活等。使用这种设置模型的方法,是否真的在执行后更新?我需要指定一个拦截器对象吗?非常感谢..

0 投票
0 回答
49 浏览

python-3.x - 最佳回报概率风险计算

我有一个为外汇市场开发的交易系统。当我分析结果时,我需要进行最佳级别分析以创建我的入门级别。

https://i.stack.imgur.com/qPoeX.png 如图所示;

在第一个交易结果中,峰值(范围值)为 50,作为回报,范围值增加了 20 个单位。这意味着如果在传递范围值时输入直接处理,将写入 20 个单位的利润。

在第二次和第三次交易中,即使打开了不可逾越的交易头寸,至少有 20 个单位是盈利的。

从逻辑上讲,至少有 20 个单位成为目标,并且 4. 进入处理时;无法实现20个单位的利润,将损坏29个具有范围值的单位。

如果未达到预期的利润数字,则范围值将被损坏。如何根据这些数据获得解决方案?

谢谢你的回答。

0 投票
1 回答
435 浏览

python - 在 TensorFlow 中保存和恢复函数

我正在 TensorFlow 中开发一个 VAE 项目,其中编码器/解码器网络内置于函数中。这个想法是能够保存,然后加载训练好的模型并使用编码器功能进行采样。

恢复模型后,我无法让解码器函数运行并将恢复的、经过训练的变量返回给我,出现“未初始化值”错误。我认为这是因为该功能要么创建一个新的,要么覆盖现有的,或者以其他方式。但我不知道如何解决这个问题。这是一些代码:

想跑samples = vae.sample_decoder(5)

在我的训练程序中,我运行:

更新

根据以下建议的答案,我更改了还原方法

但是现在在创建 Saver() 对象时得到一个值错误:

0 投票
1 回答
65 浏览

tensorflow - tensorflow.while_loop 带有来自 tensorflow_distribution 的样本

我正在努力使以下代码正常工作。它不断进行伯努利试验,直到成功。

上面的代码打印出0to的值3,这是没有意义的。我希望它能打印数百个。此外,当我将geometric呼叫更改为 时geometric(0.000001),我仍然得到相同的结果。

谁能指出我上面的代码有什么问题?

0 投票
1 回答
795 浏览

python - 在 tensorflow 双射器中使用和修改变量

在TensorFlow Distributions(现为Probability )的参考论文中,提到了 TensorFlow可用于构造和对象,即:VariableBijectorTransformedDistribution

我现在想修改 shift 变量(比如说,我可能会计算一些似然函数的梯度作为 shift 的函数并更新它的值)所以我这样做

我希望如此gx=y+1,但我看到了gx=y……确实,myBij.shift仍然评估为1.

如果我尝试直接修改双射器,即:

我明白了

计算梯度也不能按预期工作:

Yields None,以及脚本结束时的此异常:

我在这里想念什么?

编辑:我让它与图形/会话一起工作,所以似乎急切执行存在问题......

注意:我有 tensorflow 版本 1.12.0 和 tensorflow_probability 版本 0.5.0

0 投票
1 回答
822 浏览

tensorflow - Forming conditional distributions in TensorFlow probability

I am using Tensorflow Probability to build a VAE which includes image pixels as well as some other variables. The output of the VAE:

I am trying to understand how to form other conditional distributions based on this which I can use with the inference methods (MCMC or VI). Say the output above was P(A,B,C | Z), how would I take that distribution to form a posterior P(A|B, C, Z) that I could perform inference on? I have been trying to read through the docs but I am having some trouble grasping them.

0 投票
1 回答
292 浏览

python - Tensorflow 实现多元学生 T 对角分布

我正在实现对角多元学生 t 分布(所以 logP(x1,x2,x3,..xD) = logP(x1) + logP(x2)+ ....+ logP(xD) )这样它可以用作 TensorFlow 中双射器的基本分布

我进行了更改tfd.StudentT.log_prob(),使其在最后一个轴上求和。它以形状[batch_size,dim]为输入并返回具有形状的pdf[batch_size,]

但是,当我打电话时Q.log_prob(x);我有错误ValueError: event_ndims (0) must be larger than min_event_ndims (1)

我不确定如何解决此错误;有人可以帮助我吗?