项目简介
Uncertainty Baselines 项目旨在为研究人员提供一个可以构建的模板。该项目提供了一套标准和前沿方法的高质量实现,适用于标准任务。这些基线可以用作新想法、应用的起点,或作为不确定性和稳健性研究领域的交流基础。项目通过以下几种方式实现这一目标:
- 提供标准任务上标准和先进方法的高质量实现。
- 使项目代码库中其他文件的依赖关系最小化,方便基线不依赖其他模块独立使用。
- 为不确定性和稳健性基准测试推荐最佳实践。
项目动机
在 GitHub 上有很多关于不确定性和稳健性的实现,但通常是为特定论文而做的独立实验,很多论文甚至没有代码。不确定性研究人员缺少可以快速构建和原型开发的清晰示例。即使在标准任务上,不同项目之间在实验设置上也有细微差异,如架构、超参数或数据预处理。这导致难以正确比较不同的基线。
安装说明
最新的开发版本可以通过以下命令安装:
pip install "git+https://github.com/google/uncertainty-baselines.git#egg=uncertainty_baselines"
目前,该库还没有稳定版本或官方发布版本,所有 API 均可能更改。安装 uncertainty_baselines
不会自动安装任何后端。对于 TensorFlow,用户需要另外安装 TensorFlow、TensorFlow Addons 和 TensorBoard。
使用指南
基线
baselines/
目录包含所有基线,按照它们的训练数据集进行组织。例如,baselines/cifar/determinstic.py
是一个能在 CIFAR-10 上取得 96.0% 测试准确率的宽残差网络(Wide ResNet 28-10)。
使用 TPU 启动
重新生产基线时,通常需要 TPU。用户可以选择以下方式:
-
Colab:Colab 提供免费的 TPU 资源,适合简单实验,但长期以来对 Colab 的依赖可能面临 TPU 访问不稳定等问题。
-
Google Cloud:这是最灵活的选项,用户需要创建虚拟机实例。
-
修改参数:用户可以更改参数设置,比如从 8 个 TPU 核心切换到 8 个 GPU,或者减少核心数量以训练基线。
数据集
ub.datasets
模块提供符合 TensorFlow Datasets API 的数据集,他们增加了数据预处理等基础逻辑。
import uncertainty_baselines as ub
# 加载 CIFAR-10 数据集,其中 10% 用于验证。
dataset_builder = ub.datasets.Cifar10Dataset(split='train', validation_percent=0.1)
train_dataset = dataset_builder.load(batch_size=FLAGS.batch_size)
模型
ub.models
模块提供基于 tf.keras.Model
API 的模型。
import uncertainty_baselines as ub
model = ub.models.wide_resnet(input_shape=(32, 32, 3), depth=28, width_multiplier=10, num_classes=10, l2=1e-4)
评估指标
Uncertainty Baselines 定义了一系列在数据集间通用的评估指标:
- 参数数量:训练后用于预测的模型参数数量。
- 测试准确率:测试集上的准确率。
- 测试校准误差:基于期望校准误差(ECE)的测试集评价。
- 测试负对数似然:用 nats 测量的测试集负对数似然。
- 训练/测试运行时间:训练和测试的总时钟时间以及设备的非空闲运行时间。
用户可以通过 TensorBoard 查看这些指标。
参考文献
用户在引用 Uncertainty Baselines 时,可以参考如下 BibTeX 条目:
@article{nado2021uncertainty,
author = {Zachary Nado et al.},
title = {{Uncertainty Baselines}: Benchmarks for Uncertainty & Robustness in Deep Learning},
journal = {arXiv preprint arXiv:2106.04015},
year = {2021},
}