【Pytorch 深度学习新手指南】从环境配置到搞定迁移学习·期末大作业
·
这篇博文是专门为你准备的。它不仅梳理了我们刚才费劲配置的“环境”到底是什么,还针对你即将开始的深度学习大作业提供了一条清晰的执行路线图。
前言:我们刚才到底在折腾什么?
在开始写代码之前,很多同学都会被 CUDA、Anaconda、PyTorch 这些名词搞晕。看着屏幕上的框框报错,不仅心累,还容易产生“我是谁?我在哪?”的疑惑。
其实,你刚才费劲配置的这一套东西,就像是在搭建一个顶级厨房。
1. 拨开迷雾:层级关系图解
- 第 1 层:显卡 (GPU) ——【超级大厨】
- 这是硬件基础。相比 CPU(全能管家),GPU 更像是一个拥有几千只手的超级厨师,专门负责大规模并行计算(切菜、炒菜),处理深度学习中的矩阵运算快得飞起。
- 第 2 层:显卡驱动 (Driver) ——【厨师的上岗证】
- 没有驱动,Windows 就不认识你的显卡,更别提指挥它干活了。(英伟达GPU用英伟达驱动·注意兼容性)
- 第 3 层:CUDA ——【厨师的特制刀具】
- 这是 NVIDIA 推出的一套运算平台。它允许我们绕过图形渲染,直接调用 GPU 进行数学计算。没有它,显卡就只能打游戏,不能跑深度学习。
- 第 4 层:cuDNN (CUDA Deep Neural Network library) ——【切菜神技】
- 这是专门配合 CUDA 的加速库。它就像是厨师练就的“土豆切丝”神技,专门针对神经网络中的卷积等操作进行了极致优化。据老黄说装了cuDNN至少能提速30%…
- 第 5 层:PyTorch / TensorFlow ——【菜谱与锅具】
- 这是我们直接打交道的深度学习框架。我们写 Python 代码调用 PyTorch,PyTorch 去调用 CUDA,CUDA 指挥 GPU 干活。如果没有 PyTorch,你就得自己写 C++ 去操作显卡,难度极高。
- 第 6 层:Anaconda ——【独立厨房管理器】
- 为什么我们需要它?(它其实就相当与一个盒子装着python和pytorch/TensorFlow)(Anaconda管理下可以有很多个盒子:比如 ①Py+Pytorch ②Py+TensorFlow 来做深度学习,也可以创建 ③④⑤…来做普通的脚本)
- Python 的包管理很乱。Anaconda 允许我们创建“虚拟环境”(比如刚才的
DP_learn)。这就好比给每个项目分配一个独立的厨房。 - 在这个厨房里(
DP_learn),我们装了 Python 3.9 和 PyTorch 1.12;在另一个厨房里,我们可以装 Python 3.7 和 TensorFlow。它们互不干扰,不想用了直接把整个厨房(文件夹)删掉即可,干净卫生。(这时候记住env下包的路径就显得非常重要)
提要: 你刚才解决路径迁移、SSL报错,就是为了把这个“独立厨房”建好,并买好“锅具”(PyTorch),打通和“大厨”(GPU)的连接。

二、 如何完成你的大作业?
老师的要求虽然看起来多,但其实是一个非常标准的深度学习流水线 (Pipeline)。
第一步:数据准备 (Data Preparation)
-
任务: 使用病虫害数据集。
-
关键点 1:数据划分 (Data Splitting)
- 永远不要用考试题来训练学生!你需要把数据分成三份:
- 训练集 (Train): 约 70%-80%,用来教模型学习。
- 验证集 (Val): 约 10%-20%,训练过程中用来做模拟考,看看模型有没有学偏(过拟合)。
- 测试集 (Test): 约 10%,最后的期末考试,模型在训练期间绝对不能见过这些图。
- 代码实现: 常用
sklearn.model_selection.train_test_split或torchvision.datasets.ImageFolder配合random_split。
- 永远不要用考试题来训练学生!你需要把数据分成三份:
-
关键点 2:数据增强 (Data Augmentation)
- 为什么要做? 只有几百张图片很容易死记硬背(过拟合)。我们要把图片旋转、翻转、剪裁、调色,让模型“举一反三”。
- 代码实现: 使用
torchvision.transforms。
transforms.Compose([ transforms.RandomHorizontalFlip(), # 随机水平翻转 transforms.RandomRotation(10), # 随机旋转 transforms.ToTensor(), # 变成张量 transforms.Normalize(...) # 归一化 ])
第二步:模型选择与迁移学习 (Transfer Learning)
- 任务: 预训练模型 + 迁移学习。
- 核心原理(必读):
- 从零训练一个 VGGNet 或 ResNet 需要百万级的数据(如 ImageNet)和几周的时间。你的数据集太小,从头练不仅慢,而且效果极差。
- 迁移学习 (Transfer Learning) 就是“站在巨人的肩膀上”。我们下载一个已经在 ImageNet 上训练好的模型(它已经学会了识别线条、圆圈、猫耳朵、狗鼻子等特征)。
- 怎么做?
- 载入模型:
model = models.vgg16(pretrained=True) - 冻结参数 (Freeze): 把前面提取特征的层锁死,不让它们更新(因为它们已经很强了)。
- 替换全连接层 (Classifier): 把最后一层(原本输出1000类)砍掉,换成你自己的分类层(比如你的害虫只有5类,就输出5)。
- 只训练最后一层: 这样训练速度极快,效果还好。
- 载入模型:
第三步:训练 (Training)
- CPU vs GPU:
- 老师备注说“使用CPU时间较长”。现在你环境配好了,请务必使用 GPU!
- 代码里加上这句:
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) # 把模型搬到显卡上 # 训练时把数据也搬上去: inputs, labels = inputs.to(device), labels.to(device) - 如果你用 GPU 跑迁移学习,可能几分钟就训练完了。
第四步:评估与报告 (Evaluation)
- 验证测试: 也就是把测试集扔进去,算出准确率 (Accuracy)。
- 写报告:
- 画出 Loss 曲线(训练过程中误差是不是越来越小?)
- 画出 Accuracy 曲线(验证集准确率是不是越来越高?)
- 展示几张预测正确和预测错误的图片进行分析。
三、 写给你的特别建议
- 别慌: 环境报错是常态,我们今天遇到的
CondaSSLError以后可能还会遇到,记住换源或者手动补 DLL 就行。 - 善用轮子: 老师说“依葫芦画瓢”,这是正解。不要试图从零手写 VGGNet 的每一个卷积层,直接调用
torchvision.models是业界的标准做法。 - 关于 D 盘: 你今天最大的成果之一,就是把环境成功“安家”到了 D 盘。这意味着以后你可以肆无忌惮地安装各种大的 Python 包(比如 TensorFlow, OpenCV),而不必担心 C 盘爆红。
祝你大作业顺利!环境已就绪,开始你的模型训练之旅吧!
更多推荐
所有评论(0)