【问题标题】:Coding Bayesian Neural Network in TensorFlow Probability在 TensorFlow Probability 中编码贝叶斯神经网络
【发布时间】:2020-12-02 16:20:22
【问题描述】:

我正在尝试使用 TensorFlow Probability 为生物信息学回归任务实施贝叶斯深度学习。传统数据科学中最接近的类比是图像评分,其中模型试图预测标签(浮点值)尽可能接近真实标签。

我之前在我的数据集上使用 TensorFlow 中的正常密集层训练了一个模型,它确实收敛并在独立测试集上表现良好。然而,当密集网络最终收敛到小于 1 的损失时,贝叶斯网络似乎根本没有收敛,损失约为 10,000。我认为错误可能在于我对贝叶斯神经网络的实现。任何帮助将不胜感激。

下面是来自贝叶斯神经网络和我试图替换的密集网络的代码 sn-ps。

贝叶斯神经网络

kernel_divergence_fn=lambda q, p, _: tfp.distributions.kl_divergence(q, p)
bias_divergence_fn=lambda q, p, _: tfp.distributions.kl_divergence(q, p)

    interpretation1 = tfp.layers.DenseFlipout(1000,bias_posterior_fn=tfp.layers.util.default_mean_field_normal_fn(),
                           bias_prior_fn=tfp.layers.default_multivariate_normal_fn,
                           kernel_divergence_fn=kernel_divergence_fn,
                           bias_divergence_fn=bias_divergence_fn,activation="relu")(merged)
    interpretation2 = tfp.layers.DenseFlipout(500,bias_posterior_fn=tfp.layers.util.default_mean_field_normal_fn(),
                           bias_prior_fn=tfp.layers.default_multivariate_normal_fn,
                           kernel_divergence_fn=kernel_divergence_fn,
                           bias_divergence_fn=bias_divergence_fn,activation="relu")(interpretation1)
    interpretation3 = tfp.layers.DenseFlipout(200,bias_posterior_fn=tfp.layers.util.default_mean_field_normal_fn(),
                           bias_prior_fn=tfp.layers.default_multivariate_normal_fn,
                           kernel_divergence_fn=kernel_divergence_fn,
                           bias_divergence_fn=bias_divergence_fn,activation="relu")(interpretation2)
    outputs = Dense(1)(interpretation3)

密集神经网络

dense1 = Dense(1000, activation="relu")(merged)
dense_drop1 = Dropout(0.35)(dense1)
dense2 = Dense(500, activation="relu")(dense_drop1)
dense_drop2 = Dropout(0.35)(dense2)
dense3 = Dense(200, activation="relu")(dense_drop2)
dense_drop3 = Dropout(0.35)(dense3)

【问题讨论】:

  • 您的帖子不清楚问题所在。你的模型根本不合适吗?还是性能不如非贝叶斯模型?贝叶斯模型并不总是比相同的非贝叶斯模型带来性能改进,并且通常会有不同的训练动态(和不同的超参数)。如果您能提供更多关于问题所在的信息,我们可以尝试提供更多有用的信息。
  • @bigmac 感谢您的回复。抱歉,我最近很少使用 StackExchange。我已经更深入地编辑了问题以及我试图替换的密集网络的代码。

标签: python tensorflow tensorflow-probability


【解决方案1】:

你能包括你编译和拟合数据的行吗?

损失的高值对应于Kl-divergence损失的贡献。因为您对所有层都有固定的先验,所以它们通常会使您的近似后验靠近它们,并且您观察到一个不好的平均拟合。最小化先验影响的一种方法是使用 II 型最大似然估计(也称为经验贝叶斯),其中还可以在学习阶段更新先验参数。请参阅此 (blog) 以供参考。

【讨论】:

    猜你喜欢
    • 2016-02-07
    • 2014-08-07
    • 2011-03-31
    • 2010-09-23
    • 1970-01-01
    • 2022-08-24
    • 2018-07-15
    • 2013-04-08
    相关资源
    最近更新 更多