Linux Pytorch ResNet-18 cifar10 实践报告

本文对比了ResNet-v1和ResNet-v2在CIFAR-10数据集上的表现,发现ResNet-v2有略微优势。同时,通过应用MixUp、CutMix和TrivialAugment三种数据增强技术,测试准确率显著提升,其中CutMix表现最佳。实验表明数据增强能有效防止过拟合,增强模型泛化能力。

硬件资源

cpu: Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz
显卡: 1080Ti
内存: 16G

环境版本

#系统信息
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.5 LTS
Release:	16.04
Codename:	xenial
#主要依赖		
torch              1.10.0
torchvision        0.11.1
#CUDA信息
~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:24:38_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89
~$ cat /usr/local/cuda/version.txt
CUDA Version 10.2.89

实验方法

基于PyTorch使用ResNet-18模型训练cifar10数据集

  1. 对比 ResNet-v1 和 ResNet-v2 的测试集准确率
  2. 对比三种当前比较先进的数据增强方法(MixUp、CutMix、TrivialAugment)的测试集准确率

基本参数设置

#训练集 测试集比例
5:1 即训练集50000张,测试集10000张
# 超参数设置
EPOCH = 100  # 遍历数据集次数
BATCH_SIZE = 512  # 批处理尺寸(batch_size)
LR = 0.1  # 学习率

# 基本的随机增强
RandomCrop
RandomHorizontalFlip

# 损失函数
CrossEntropyLoss #交叉熵
# 优化方式
optim.SGD(net.parameters(), lr=LR, momentum=0.9, weight_decay=5e-4)
# 学习率迭代策略
#在指定的epoch值,[60, 90]处对学习率进行衰减,lr = lr * gamma
scheduler = lr_scheduler.MultiStepLR(optimizer, milestones=[60,90], gamma=0.1)

实验结果

实验测试集准确率
ResNet-v194.13%
ResNet-v294.23%
ResNet-v2 + RandomMixup95.10%
ResNet-v2 + RandomCutmix95.46%
ResNet-v2 + TrivialAugment95.27%

实验结果对比

最终实验结果表明:

  • ResNet-v2的网络模型优于ResNet-v1。
  • 三种当前比较先进的数据增强方法(MixUp、CutMix、TrivialAugment)都有不俗的作用,一定程度上提升了准确率。
  • 针对cifar10数据集,用ResNet-v2的ResNet-18训练时,CutMix的数据增强手段最优。

结果分析

1. ResNet-v1 VS ResNet-v2

ResNet-v1 VS ResNet-v2
由上图可以看出,ResNet-v2相比于ResNet-v1,训练集(蓝线)和测试集准确率(粉红线)都更早更快得达到一个比较好的效果,也就是训练更容易,最终的测试集准确率也超出一点点(94.23% vs 94.13%)。
在这里插入图片描述

ResNet-v2重新设计了一种残差网络基本单元(unit)就是将激活函数(先BN再ReLU)移到权值层之前,形成一种“预激活(pre-activation)”的方式,如上图(b),而不是ResNet-v1中常规的“后激活(post-activation)”方式,如上图(a),并且预激活的单元中的所有权值层的输入都是归一化的信号。这使得网络更易于训练并且泛化性能也得到提升。

2. ResNet-v2 VS ResNet-v2+TrivialAugment

请添加图片描述
从上图可以看到,

  • ResNet-v2训练过程中,训练集准确率(绿线)一直高于测试集准确率(红线),并且最后训练集准确率接近100%,而测试集准确率仅有94.23%。
  • 加上TrivialAugment的数据增强方法后,训练全程测试集准确率(粉红线)一直高于训练集准确率(蓝线),最后训练集准确率达到92%左右,而测试集准确率达到95.27%。
  • 以上结果说明加上TrivialAugment的数据增强方法后,网络过拟合程度大大减小。其原因不难看出是因为强大的数据增强扩充了数据集,增强了网络的泛化能力。

3. MixUp vs CutMix vs TrivialAugment

请添加图片描述
几种数据增强的区别:MixUp vs CutMix vs TrivialAugment

  • MixUp:将随机的两张样本按比例混合,分类的结果按比例分配
    在这里插入图片描述

  • CutMix:将一部分区域cut掉但不填充0像素而是随机填充训练集中的其他数据的区域像素值,分类结果按一定的比例分配
    在这里插入图片描述

  • TrivialAugment:每次随机选择一个图像增强操作,然后随机确定它的增强幅度,并对图像进行增强。由于没有任何超参数,所以不需要任何搜索
    在这里插入图片描述

  • TrivialAugment通过组合多种数据增强手段,随即增强强度,可能会有不稳定因素

  • mixup是将两张图按比例进行插值来混合样本,cutmix是采用cut部分区域再补丁的形式去混合图像,不会有图像混合后不自然的情形

  • cutmix通过要求模型从局部视图识别对象,对cut区域中添加其他样本的信息,能够进一步增强模型的定位能力

  • cutmix不会有图像混合后不自然的情形,能够提升模型分类的表现,最终测试准确率也更高一些

你输入的命令: ```bash conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia ``` 是一个 **使用 Conda 安装 PyTorch 深度学习框架及其相关组件,并启用 CUDA 11.8 支持** 的标准命令。下面我将详细解释这个命令的每一部分、它的作用、适用场景以及常见问题和解决方案。 --- ## ✅ 命令详解 ```bash conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia ``` | 部分 | 含义 | |------|------| | `conda install` | 使用 Anaconda/Miniconda 的包管理器安装软件 | | `pytorch` | 主体:PyTorch 框架(用于张量计算和深度神经网络) | | `torchvision` | 扩展库:提供图像数据处理工具(如 transforms)、预训练模型(ResNet 等)和常用数据集(CIFAR, ImageNet) | | `torchaudio` | 扩展库:音频处理支持(加载 WAV 文件、频谱图等) | | `pytorch-cuda=11.8` | 指定使用 NVIDIA CUDA 11.8 版本进行 GPU 加速运算 | | `-c pytorch` | 添加官方 [PyTorch 的 Conda 渠道](https://anaconda.org/pytorch)(必须!否则找不到包) | | `-c nvidia` | 添加 NVIDIA 的 Conda 渠道,用于获取 CUDA 相关依赖 | > 🔔 这个命令会自动安装与 CUDA 11.8 兼容的 PyTorch 构建版本,让你可以在支持的 GPU 上运行深度学习模型。 --- ## 📦 安装了哪些内容? | 包名 | 功能 | |------|------| | `pytorch` | 核心深度学习框架,支持动态计算图、自动求导、GPU 计算 | | `torchvision` | 图像处理模块:<br>• `transforms` 数据增强<br>• `models.resnet50()` 等预训练模型<br>• `datasets.ImageFolder` 加载图片数据 | | `torchaudio` | 音频处理模块:<br>• 读取 `.wav` 文件<br>• 提取梅尔频谱图(Mel-spectrogram)<br>• 集成 Kaldi 工具 | | `pytorch-cuda=11.8` | 不是独立库,而是“虚拟包”,用来触发 Conda 安装包含 CUDA 支持的 PyTorch 构建版本 | --- ## 💻 示例:验证是否安装成功 安装完成后,在 Python 中运行以下代码测试: ```python import torch print("PyTorch version:", torch.__version__) print("CUDA available:", torch.cuda.is_available()) print("CUDA version:", torch.version.cuda) print("Number of GPUs:", torch.cuda.device_count()) if torch.cuda.is_available(): print("Current GPU:", torch.cuda.get_device_name(0)) ``` ✅ 正常输出示例(表示 GPU 可用): ``` PyTorch version: 2.0.1 CUDA available: True CUDA version: 11.8 Number of GPUs: 1 Current GPU: NVIDIA GeForce RTX 3080 ``` ❌ 如果 `CUDA available: False`,说明没有正确启用 GPU,请查看下方“常见问题”。 --- ## ⚠️ 常见问题与解决方法 ### ❌ 问题 1:`CondaError: Packages missing in current channels` > 报错原因:未添加 `-c pytorch` 或网络连接失败 ✅ 解决方案: 确保完整命令中包含两个渠道: ```bash conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia ``` 不要漏掉 `-c pytorch`! 也可以尝试先更新 conda: ```bash conda update conda ``` --- ### ❌ 问题 2:CUDA 不可用(`torch.cuda.is_available()` 返回 `False`) 请检查以下几点: 1. **是否有 NVIDIA 显卡?** - Intel/AMD 集成显卡不支持 CUDA 2. **是否安装了最新版 NVIDIA 驱动?** - 打开命令提示符运行: ```bash nvidia-smi ``` - 输出应显示驱动版本和 GPU 信息 3. **驱动版本是否支持 CUDA 11.8?** - 一般要求驱动版本 ≥ 520.xx 4. **是否在正确的环境中激活?** ```bash conda activate your_env_name ``` --- ### 🐍 替代方式:使用 pip 安装(推荐速度更快) 如果你发现 conda 安装慢或冲突多,可以用 pip: ```bash pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 ``` - `cu118` 表示 CUDA 11.8 - 更快、更灵活,社区主流选择 > 官方推荐安装方式见:👉 https://pytorch.org/get-started/locally/ --- ## 🧩 推荐做法:创建独立虚拟环境安装 避免污染 base 环境,建议创建专属环境: ```bash # 1. 创建新环境(名为 pytorch_env) conda create -n pytorch_env python=3.9 # 2. 激活环境 conda activate pytorch_env # 3. 安装 PyTorch + CUDA 支持 conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia ``` 这样你的项目依赖完全隔离,安全又干净。 --- ## 🖼️ 总结图示 ``` 你的电脑 ├── 操作系统 Windows/Linux/macOS ├── NVIDIA 显卡 + 驱动 ├── CUDA Driver (由 nvidia-smi 显示) └── Anaconda └── 虚拟环境 pytorch_env ├── python=3.9 ├── pytorch (with CUDA 11.8 support) ├── torchvision └── torchaudio → 在 PyCharm/Jupyter 中设置解释器为此环境即可使用 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值