这篇博文是专门为你准备的。它不仅梳理了我们刚才费劲配置的“环境”到底是什么,还针对你即将开始的深度学习大作业提供了一条清晰的执行路线图。


前言:我们刚才到底在折腾什么?

在开始写代码之前,很多同学都会被 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_splittorchvision.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 上训练好的模型(它已经学会了识别线条、圆圈、猫耳朵、狗鼻子等特征)。
    • 怎么做?
      1. 载入模型: model = models.vgg16(pretrained=True)
      2. 冻结参数 (Freeze): 把前面提取特征的层锁死,不让它们更新(因为它们已经很强了)。
      3. 替换全连接层 (Classifier): 把最后一层(原本输出1000类)砍掉,换成你自己的分类层(比如你的害虫只有5类,就输出5)。
      4. 只训练最后一层: 这样训练速度极快,效果还好。

第三步:训练 (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 曲线(验证集准确率是不是越来越高?)
    • 展示几张预测正确和预测错误的图片进行分析。

三、 写给你的特别建议

  1. 别慌: 环境报错是常态,我们今天遇到的 CondaSSLError 以后可能还会遇到,记住换源或者手动补 DLL 就行。
  2. 善用轮子: 老师说“依葫芦画瓢”,这是正解。不要试图从零手写 VGGNet 的每一个卷积层,直接调用 torchvision.models 是业界的标准做法。
  3. 关于 D 盘: 你今天最大的成果之一,就是把环境成功“安家”到了 D 盘。这意味着以后你可以肆无忌惮地安装各种大的 Python 包(比如 TensorFlow, OpenCV),而不必担心 C 盘爆红。

祝你大作业顺利!环境已就绪,开始你的模型训练之旅吧!

更多推荐