使用 tfprobability 进行变分卷积网络

在贝叶斯神经网络中,层权重是分布,而不是张量。使用 tfprobability(TensorFlow Probability 的 R 包装器),我们可以构建具有概率层的常规 Keras 模型,从而“免费”获得不确定性估计。在这篇文章中,我们展示了如何定义、训练和从概率卷积神经网络中获得预测。

来源:RStudio AI博客

一年多前,Nick Strayer 在其精彩的客座文章中展示了如何使用智能手机记录的陀螺仪和加速度计数据对一组日常活动进行分类。准确度非常好,但 Nick 继续更仔细地检查分类结果。是否有比其他活动更容易被误分类的活动?那些错误的结果又如何:网络报告它们的置信度与正确结果相同还是更低?

客座文章

从技术上讲,当我们以这种方式谈论置信度时,我们指的是在 softmax 激活后获得的“获胜”类别的分数。如果获胜分数是 0.9,我们可能会说“网络确定那是一只巴布亚企鹅”;如果是 0.2,我们反而会得出结论“对于网络来说,两个选项似乎都不合适,但猎豹看起来最好。”

置信度 分数

这种“置信度”的使用令人信服,但它与置信度(或可信度、预测,随便什么)间隔无关。我们真正想做的是将分布放在网络权重上并使其成为贝叶斯分布。使用 tfprobability 的变分 Keras 兼容层,我们实际上可以做到这一点。

贝叶斯 tfprobability

使用 tfprobability 向 Keras 模型添加不确定性估计显示了如何使用变分密集层来获得认知不确定性的估计。在这篇文章中,我们将 Nick 的文章中使用的卷积网络修改为始终变分。在开始之前,让我们快速总结一下任务。

使用 tfprobability 向 Keras 模型添加不确定性估计

任务

基于智能手机的人类活动和姿势转换数据集识别 (Reyes-Ortiz 等人,2016 年) Reyes-Ortiz 等人,2016 年 加速度计 陀螺仪

到达此阶段所需的代码(从 Nick 的帖子复制)可在本页底部的附录中找到。

训练管道

tfdatasets trainData$data data.frame pad_size (batch_size, pad_size, 6)

我们最初创建我们的训练数据集:

train_x <- train_data$data %>% <- $