【发布时间】: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