tfp.layers中先验的Tensorflow概率变化(可能的问题)

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

我的研究需要改变先验分布参数来训练贝叶斯神经网络模型。更具体地说,我想改变先前的高斯分布mu和sigma

我已经阅读了Tensorflow概率的核心代码,并实现了我自己的代码来更改先前的代码。然而,经过两次极端实验后,结果证明,结果与理论直接矛盾。在这里,问题要么在于我实现Previor的方式,要么在于Tensorflow实现的贝叶斯权重更新,要么在于这些权重更新背后的推导

现在,最简单的方法是确保我在代码中正确地实现了previor的更改。您能告诉我什么是实现另一个Previor for tfp.layers的正确方法吗

我的实现代码如下所示:

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的源代码,你就会看到他们是如何实现它的。你到底想使用哪种先验知识?你忘了提这个。