tfp.layers中先验的Tensorflow概率变化(可能的问题)
我的研究需要改变先验分布参数来训练贝叶斯神经网络模型。更具体地说,我想改变先前的高斯分布mu和sigma 我已经阅读了Tensorflow概率的核心代码,并实现了我自己的代码来更改先前的代码。然而,经过两次极端实验后,结果证明,结果与理论直接矛盾。在这里,问题要么在于我实现Previor的方式,要么在于Tensorflow实现的贝叶斯权重更新,要么在于这些权重更新背后的推导 现在,最简单的方法是确保我在代码中正确地实现了previor的更改。您能告诉我什么是实现另一个Previor for tfp.layers的正确方法吗 我的实现代码如下所示:tfp.layers中先验的Tensorflow概率变化(可能的问题),tensorflow,tensorflow2.0,bayesian-networks,tensorflow-probability,Tensorflow,Tensorflow2.0,Bayesian Networks,Tensorflow Probability,我的研究需要改变先验分布参数来训练贝叶斯神经网络模型。更具体地说,我想改变先前的高斯分布mu和sigma 我已经阅读了Tensorflow概率的核心代码,并实现了我自己的代码来更改先前的代码。然而,经过两次极端实验后,结果证明,结果与理论直接矛盾。在这里,问题要么在于我实现Previor的方式,要么在于Tensorflow实现的贝叶斯权重更新,要么在于这些权重更新背后的推导 现在,最简单的方法是确保我在代码中正确地实现了previor的更改。您能告诉我什么是实现另一个Previor for tf
tfp.layers.Convolution2DReparameterization(
filters=6, kernel_size=(5,5), padding='same', activation='relu', dtype=‘float64’,
kernel_divergence_fn=lambda q, p, _: tfp.distributions.kl_divergence(q, p) / num_example,
kernel_prior_fn= _Prior_fn(mean=initialization[0], scale=initialization[1]),
bias_posterior_fn=tfp.layers.default_mean_field_normal_fn(),
bias_prior_fn= _Prior_fn(mean=initialization[2], scale=initialization[3]),
bias_divergence_fn=lambda q, p, _: tfp.distributions.kl_divergence(q, p) / num_example)
def _Prior_fn(mean, scale,*args, **kwargs):
d = tfd.Normal(loc=mean, scale=scale)
def fn(*args, **kwargs):
return tfd.Independent(d, reinterpreted_batch_ndims=tf.size(d.batch_shape_tensor()))
return fn
**初始化[0],初始化[1]具有内核的精确形状,初始化[3],初始化[4]具有偏差的精确形状
在传递到tfp.layers之前,您可以验证这个代码,或者给我另一个示例代码来实现我自己的代码吗
非常感谢您的帮助,如果您查看TFP的源代码,您将看到他们是如何实现它的。你到底想使用哪种先验知识?你忘了提到这一点。如果你看看TFP的源代码,你就会看到他们是如何实现它的。你到底想使用哪种先验知识?你忘了提这个。