项目简介
pytorch-cifar100
是一个使用 PyTorch 在 CIFAR-100 数据集上进行深度学习训练和测试的项目。CIFAR-100 是一个常用的图像分类基准数据集,包含 100 个类别的图片,每个类别有 600 张图片。这一项目旨在帮助用户轻松地对 CIFAR-100 数据进行模型训练,并支持多种流行的深度学习模型。
需求环境
在运行该项目之前,需要确保以下软件环境:
- Python 3.6
- PyTorch 1.6.0 + cu101
- (可选) TensorBoard 2.2.2
如何使用
进入项目目录
首先,用户需要通过终端进入项目所在目录。命令如下:
$ cd pytorch-cifar100
数据集准备
项目中使用的是 torchvision 提供的 CIFAR-100 数据集,非常方便地获取和使用。此外,项目中还保留了一些示例代码,如果用户希望自行编写数据集模块,可以参考这些代码。
安装和运行 TensorBoard(可选)
如果用户打算使用 TensorBoard 进行训练过程的可视化,可以通过以下命令来安装并运行 TensorBoard:
$ pip install tensorboard
$ mkdir runs
$ tensorboard --logdir='runs' --port=6006 --host='localhost'
模型训练
用户可以使用 train.py
脚本来训练模型。训练时需要指定网络模型类型,示例如下:
# 使用 GPU 训练 VGG16 网络
$ python train.py -net vgg16 -gpu
有时,用户可能希望在初期阶段使用 warmup 训练,通过设置 -warm
参数为 1 或 2 来防止网络发散。
项目支持多种网络架构,包括但不限于:
- VGG 系列(如 VGG16)
- ResNet 系列
- Inception 系列
- MobileNet
- DenseNet 等
通常情况下,具有最佳准确性的权重文件会被保存到 checkpoint
文件夹,文件名会带有 best
后缀。
模型测试
测试模型性能可以使用 test.py
脚本,示例如下:
$ python test.py -net vgg16 -weights path_to_vgg16_weights_file
实现的网络模型
项目中实现了多个知名的卷积神经网络架构,包括:
- VGG:适用于大规模图像识别的深度卷积网络
- GoogLeNet:通过卷积进行更深层次的特征提取
- Inception 系列:重新思考计算机视觉中的 Inception 架构
- ResNet:深度残差学习用于图像识别
- MobileNet:高效率的卷积神经网络,尤其适用于移动设备
- DenseNet:密集连接的卷积网络
- ShuffleNet:极为高效的卷积神经网络,适用于移动设备
- 其他多个具有研究意义和实际应用价值的网络
训练细节
本项目在训练时遵循了一篇研究论文中的超参数设置,即初始学习率为 0.1,在第 60、120 和 160 个周期分别降低学习率至原来的 1/5,总训练周期为 200,批次大小为 128,权重衰减为 5e-4,惯性动量采用 Nesterov 方法,动量值为 0.9。
用户可以自行尝试不同的超参数微调,从而获得更好的结果,并可以选择是否使用 TensorBoard 来可视化训练过程。
结果展示
通过使用相同的超参数训练不同的网络架构,结果表明,不同的架构会对训练的最终效果产生影响。项目中的结果以表格形式展现,以便用户进行比较和分析。用户可以自行尝试调整网络架构和参数设置,以期望得到更优的分类性能。