问题标签 [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.
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_kl
PyTorch 中自己实现它。
这是正确的假设吗?如果是这样,有人可以解释为什么不对给定的分布类别实施 KL Divergence 吗?我想我错过了一些非常基本的东西。
如果我的假设是错误的,有人可以解释如何正确地让 TensorFlow 和 PyTorch 实现这些操作吗?
如需其他参考,在本示例中使用与 Edward 一起使用的旧版 TensorFlow,
在上面这个最小的例子中,我试图在(或)中实现以下edward
玩具示例代码的等价物。tfp
torch
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 输出等。
我的问题是:
- 张量流双射器/分布是否应该与 keras(模型)兼容?如果是,有谁知道是否有任何重要的例子可供我看一下?如果不是,是否有计划使它们兼容?
- 在我认为一个模型有多个不同输出的情况下,我应该如何使用 keras 模型?例如,在我上面的例子中,可学习的 RealNVP 分布直观地感觉它应该是一个模型,但它有多个,可能是独立的输入/输出,这使得它很难适应 keras 模型框架。我愿意接受我的直觉是错误的,在这种情况下,很高兴听到构建此类模型的最佳实践是什么。
- 有没有办法像 [1] 中所做的那样将非张量数据作为输入/输出传递给 keras 模型,同时仍然保持模型以某种方式连接。如果在此示例中使用输入而不是
tfe.Variable
s,则它会中断,因为图形未连接。
编辑:在发布此内容并使用上述实现进行一些额外测试后,我注意到该模型毕竟不可训练,因为 RealNVP 双射器的变量是在 keras lambda 层中创建的。这表明我构建这些模型的功能方式根本不能用于这些类型的模型。
[2] https://blog.keras.io/building-autoencoders-in-keras.html
tensorflow - Tensorflow_probability 整数类型错误
我正在尝试使用tensorflow_probability
构建一个 mcmc 链。这是我的代码:
但我得到了这个错误::
tensorflow-probability - TensorFlow 概率逻辑回归示例
我觉得我必须遗漏一些明显的东西,在努力获得对张量流概率的逻辑回归的积极控制。
我在这里修改了逻辑回归的示例,并创建了正控制特征和标签数据。我努力实现超过 60% 的准确度,但是对于“普通”Keras 模型(准确度 100%)来说,这是一个简单的问题。我错过了什么?我尝试了不同的层、激活等。使用这种设置模型的方法,是否真的在执行后更新?我需要指定一个拦截器对象吗?非常感谢..
python - 在 TensorFlow 中保存和恢复函数
我正在 TensorFlow 中开发一个 VAE 项目,其中编码器/解码器网络内置于函数中。这个想法是能够保存,然后加载训练好的模型并使用编码器功能进行采样。
恢复模型后,我无法让解码器函数运行并将恢复的、经过训练的变量返回给我,出现“未初始化值”错误。我认为这是因为该功能要么创建一个新的,要么覆盖现有的,或者以其他方式。但我不知道如何解决这个问题。这是一些代码:
想跑samples = vae.sample_decoder(5)
在我的训练程序中,我运行:
更新
根据以下建议的答案,我更改了还原方法
但是现在在创建 Saver() 对象时得到一个值错误:
tensorflow - tensorflow.while_loop 带有来自 tensorflow_distribution 的样本
我正在努力使以下代码正常工作。它不断进行伯努利试验,直到成功。
上面的代码打印出0
to的值3
,这是没有意义的。我希望它能打印数百个。此外,当我将geometric
呼叫更改为 时geometric(0.000001)
,我仍然得到相同的结果。
谁能指出我上面的代码有什么问题?
python - 在 tensorflow 双射器中使用和修改变量
在TensorFlow Distributions(现为Probability )的参考论文中,提到了 TensorFlow可用于构造和对象,即:Variable
Bijector
TransformedDistribution
我现在想修改 shift 变量(比如说,我可能会计算一些似然函数的梯度作为 shift 的函数并更新它的值)所以我这样做
我希望如此gx=y+1
,但我看到了gx=y
……确实,myBij.shift
仍然评估为1
.
如果我尝试直接修改双射器,即:
我明白了
计算梯度也不能按预期工作:
Yields None
,以及脚本结束时的此异常:
我在这里想念什么?
编辑:我让它与图形/会话一起工作,所以似乎急切执行存在问题......
注意:我有 tensorflow 版本 1.12.0 和 tensorflow_probability 版本 0.5.0
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.
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)
我不确定如何解决此错误;有人可以帮助我吗?