课程概述
📚 内容概要
本课程提供了一个使用 PyTorch 的深度学习全面入门,PyTorch 是机器学习研究中最受欢迎的框架。从张量基础开始,学生将逐步掌握完整的机器学习工作流程、计算机视觉、模块化软件工程、迁移学习以及模型部署。课程采用“代码先行”的教学方式,强调动手实现与实验,确保学生不仅理解理论,还能构建、优化并部署稳健的深度学习系统。
核心目标简述:全面掌握整个 PyTorch 生态系统,从基础数学知识过渡到可投入生产的计算机视觉应用。
🎯 学习目标
- 实现从基础张量操作到模型训练、评估和持久化的完整 PyTorch 机器学习工作流程。
- 设计并部署深度学习架构,包括人工神经网络(ANN)和卷积神经网络(CNN),用于复杂的分类和计算机视觉任务。
- 通过采用标准化工程实践和目录结构,将实验性代码转化为生产就绪的模块化软件。
- 利用迁移学习等高级技术及系统化的实验跟踪(如 TensorBoard),在自定义数据集上实现顶尖水平的结果。
- 准备并部署训练好的模型至交互式网页应用,并利用现代 PyTorch 2.0 特性加速推理过程。
🔹 第1课:PyTorch 基础
概述: 本基础课程介绍 PyTorch 及其核心数据结构——张量。我们将首先阐明为何 PyTorch 是现代深度学习研究的首选框架,重点强调其动态计算图特性。核心技术焦点在于掌握张量操作。学生将学习如何使用多种方法(如 torch.zeros()、torch.rand())初始化张量——从零维标量到高维矩阵。关键操作包括逐元素算术运算(加法、乘法)以及专门的线性代数运算,如矩阵乘法(torch.matmul)。我们还将探讨结构管理技术,例如索引、切片、重塑(.view()、.reshape())和去除冗余维度(.squeeze())。最后,我们将讲解如何通过 .to() 方法在不同设备(CPU 与 GPU)之间高效移动张量,为后续课程中的加速计算做好准备。
学习成果:
- 解释张量作为深度学习和 PyTorch 中基本数据结构的作用。
- 使用内置方法创建并初始化各种维度的 PyTorch 张量(标量、向量、矩阵)。
- 执行标准的张量算术运算和矩阵乘法等特殊操作。
- 使用索引、切片、重塑和挤压技术操控张量结构。
- 高效地在 CPU 与 GPU 设备间移动张量以实现加速计算。
🔹 第2课:PyTorch 工作流程
概述: 本课程建立一个可重复使用的、基础的 PyTorch 工作流程,通过从头实现一个简单的线性回归模型来完成。我们从数据准备入手,重点在于生成合成数据并将其划分为训练集和测试集,强调数据类型与设备对齐(CPU/GPU)的重要性。接着,我们通过正确继承 torch.nn.Module 并实现 forward() 方法来定义模型架构。工作流程的核心包括选择合适的损失函数(如用于回归的 nn.L1Loss)和优化器(随机梯度下降或 SGD)。随后,我们将严谨构建训练循环(前向传播、损失计算、梯度清零、反向传播、优化器步进)以及用于性能评估的测试/评估循环。最后,我们学习使用 torch.save() 保存训练后的模型状态字典,并随后加载以进行推理或重用,从而完成整个端到端的机器学习周期。
学习成果:
- 结构化并实现 PyTorch 端到端机器学习工作的六个基础步骤。
- 通过正确定义继承自
torch.nn.Module的类,构建一个简单的线性模型。 - 为基本回归任务应用适当的损失函数(
nn.L1Loss)和优化器(torch.optim.SGD)。 - 定义并执行训练循环,包含反向传播和梯度下降,以及独立的评估循环。
- 使用 PyTorch 工具实现模型状态字典的保存与加载功能,以实现模型持久化。
🔹 第3课:神经网络分类
概述: 本课程将 PyTorch 工作流程应用于解决非线性分类问题,超越简单的线性回归。我们首先区分二分类与多分类场景,并演示如何使用 Sigmoid(用于二分类)和 Softmax(用于多分类)激活函数来设置输出层。通过在隐藏层中引入 ReLU 激活函数,引入非线性的关键概念,使网络能够学习复杂的决策边界。学生将实现适用于分类任务的正确损失函数:BCEWithLogitsLoss 与 CrossEntropyLoss。实践部分包括在一个复杂且合成的数据集(如“moons”数据集)上生成并训练神经网络,并通过可视化结果决策面,确认网络有效分离非线性数据点的能力,确保掌握基础深度学习模型架构。
学习成果:
- 区分并实现适用于二分类与多分类任务的 PyTorch 模型。
- 解释非线性激活函数(ReLU、Sigmoid、Softmax)在实现复杂决策边界中的必要性。
- 应用适当的损失函数(
BCEWithLogitsLoss、CrossEntropyLoss)并计算分类准确率指标。 - 在非线性数据集上实现完整的 PyTorch 分类工作流程。
- 可视化模型学习到的决策边界,并解释其对数据点的分类能力。
🔹 第4课:基于 CNN 的计算机视觉
概述: 本课程标志着从处理结构化数据转向处理高维图像数据的关键转折,这需要专门的深度学习架构。我们将首先解析图像作为多维 PyTorch 张量的表示方式,重点聚焦于标准形状符号(N, C, H, W:批量大小、通道数、高度、宽度)。理论核心介绍卷积神经网络(CNN),解释卷积层(nn.Conv2d)如何高效提取局部空间特征,以及池化层(nn.MaxPool2d)如何在保留重要信息的同时降低维度。通过代码优先的方法,我们将从零开始构建并训练一个完整的、小型的 CNN 架构——一个 TinyVGG 的复制品,提供一个功能型计算机视觉模型的实践范例。最后,我们将对比此 CNN 结构与之前使用的线性网络之间的根本差异,以强化对为何 CNN 在图像模式识别中表现优异的理解。
学习成果:
- 解释并使用 (N, C, H, W) 张量格式在 PyTorch 中表示图像数据。
- 在 PyTorch 模型中实现卷积层(nn.Conv2d)和池化层(nn.MaxPool2d)。
- 构建并训练一个完整的、小型的 CNN 架构(一个 TinyVGG 复制品)用于分类任务。
- 阐明线性层与 CNN 在特征提取和权重共享能力上的根本差异。
🔹 第5课:自定义数据集
概述: 本关键课程弥合了结构化玩具示例(如 MNIST)与复杂、非结构化真实世界图像数据之间的差距,为实际的“FoodVision”计算机视觉项目奠定基础。我们将首先学习如何正确组织数据目录以供 PyTorch 使用,利用高效的 torchvision.datasets.ImageFolder 类自动从文件路径加载数据并推断标签。至关重要的是,我们将掌握自定义 torch.utils.data.Dataset 类的概念,该类赋予完全控制数据加载逻辑、预处理和标签处理的能力,适用于任意数据格式。随后,我们将引入 DataLoader 来管理高效的数据批处理、打乱和多线程加载。最后,本课程涵盖重要的数据增强技术及 PyTorch Transforms,这些对于扩大有限数据集的有效规模以及提升模型泛化能力和鲁棒性至关重要。
学习成果:
- 将真实世界的图像数据组织成 PyTorch 工具所期望的目录格式。
- 使用
torchvision.datasets.ImageFolder从磁盘高效加载自定义图像数据集。 - 实现自定义
torch.utils.data.Dataset类以处理独特或复杂的数据加载需求。 - 应用一系列
torchvision.transforms进行预处理(调整大小、转换为张量)和数据增强(旋转、翻转)。 - 将
Dataset与DataLoader集成,以处理批处理、打乱和优化的并行数据加载。
🔹 第6课:模块化开发(软件工程)
概述: 本课程对于将实验性 Jupyter Notebook 代码转变为可持续、生产就绪的软件工程实践至关重要。我们将涵盖重构单体笔记本代码为结构化、可重用的 Python 脚本的必要步骤。核心概念涉及建立标准化的 PyTorch 项目结构,将关注点分离到专用模块中。需要构建的关键模块包括:data_setup.py(负责数据加载、变换和 DataLoader)、model_builder.py(包含继承自 nn.Module 的模型定义)以及 engine.py(管理训练和测试循环)。最后,学生将学习如何通过命令行直接使用标准 Python 执行方式启动并运行完整的训练工作流——包括定义超参数和设备选择——这对于部署和大规模实验至关重要。
学习成果:
- 解释实验性笔记本代码与有组织的模块化 Python 脚本架构之间的区别。
- 实现一个专为可扩展性和协作设计的标准 PyTorch 项目目录结构。
- 将现有的模型训练逻辑重构为独立、可重用的模块(如
data_setup.py、model_builder.py、engine.py)。 - 设置主执行脚本,通过命令行运行完整的训练流程。
- 描述模块化代码在测试、版本控制和生产部署就绪方面的实际优势。
🔹 第7课:迁移学习
概述: 迁移学习是一种强大技术,允许我们利用在大规模数据集(如 ImageNet)上训练的模型所获得的知识,并将其高效应用于较小的、特定领域的问题。本课程介绍其核心理论,强调为何预训练权重(特别是来自 ResNet 或 EfficientNet 等模型,通过 torchvision.models 加载)对于在减少数据量和计算时间的前提下取得顶尖成果至关重要。实践部分聚焦于 特征提取:学生将学习如何加载模型,使用 PyTorch 的 requires_grad=False 冻结其卷积基底层的参数,然后战略性地替换并仅训练针对新目标领域(如正在进行的“FoodVision”项目)定制的最终分类头。我们还将对比这种方法与更耗计算资源的 微调 整个网络的方法。
学习成果:
- 解释迁移学习的理论优势及其常见应用场景。
- 使用 PyTorch 的
torchvision.models工具加载并检查常见的预训练模型架构。 - 通过成功冻结基底卷积层的参数,实现特征提取。
- 修改预训练模型的分类器头部以处理新的自定义分类任务。
- 区分特征提取(冻结)与微调(解冻)策略。
🔹 第8课:实验追踪(里程碑项目1)
概述: 随着我们从训练单一模型转向运行复杂的比较(例如,将原始 CNN 与迁移学习模型进行对比),手动日志记录已不再足够。本课程确立系统化实验追踪这一关键实践。我们将介绍并实现 PyTorch 原生解决方案 torch.utils.tensorboard.SummaryWriter,用于记录和管理性能数据。学生将学习如何在训练循环中注入代码,记录关键标量指标,如逐轮训练和测试损失、准确率以及学习率。主要目标是掌握启动并使用 TensorBoard 界面,以可视化方式并排比较多个运行的结果,从而客观分析超参数变化、架构决策和优化策略的影响,确保可重现性并加速模型改进。
学习成果:
- 解释系统化实验追踪对于确保深度学习可重现性和效率的必要性。
- 实现
torch.utils.tensorboard.SummaryWriter类,在 PyTorch 训练循环中记录标量指标(损失、准确率)。 - 启动并导航 TensorBoard 界面,可视化指标曲线并比较不同实验运行的性能。
- 应用追踪技术,系统性地比较不同超参数设置(如批量大小、学习率)和模型架构的影响。
🔹 第9课:论文复现(里程碑项目2)
概述: 本课程是课程的巅峰,挑战学生将深度学习研究成果转化为功能性代码,通过复现一篇科学论文中的现代架构。我们将首先揭开典型机器学习论文的结构,特别聚焦于如何从“方法论”部分提取架构细节和数学公式。核心技术任务涉及将复杂的数学方程——如注意力机制或新型层类型的公式——直接映射为 PyTorch 模块,使用自定义的 nn.Module 类。以现代案例(如视觉变换器,ViT)为例进行实施。强调系统性调试策略对于复杂、多组件模型的重要性,解决诸如形状兼容性、权重初始化和验证梯度流动等挑战,确保学生能够成功从零开始实现前沿模型。
学习成果:
- 拆解并分析机器学习研究论文中呈现的架构描述和数学符号。
- 将复杂的算法步骤和公式(如自注意力机制)直接转化为符合习惯的 PyTorch 代码,使用自定义
nn.Module类。 - 从零开始实现并集成现代复杂深度学习架构(如视觉变换器)的所有必要组件。
- 应用高级调试策略,解决复现前沿模型时遇到的形状错误、设备不匹配和逻辑缺陷。
🔹 第10课:模型部署与 PyTorch 2.0
概述: 本最后一课专注于将训练好的 PyTorch 模型从研究环境转移到公开可访问的交互式网页应用。我们将首先学习为部署准备模型的关键步骤,重点在于高效加载和生产环境中的推理。核心实践环节包括使用快速原型工具(如 Gradio 或 Streamlit)构建一个功能性的网页演示,让终端用户输入数据并即时获取预测结果。我们将讨论在平台上托管这些应用的实用策略,例如使用 Hugging Face Spaces。最后,我们将花时间探索框架的未来方向,特别关注 PyTorch 2.0 引入的性能提升和编译功能,展示如 'torch.compile' 这类创新如何显著加快训练和部署速度。
学习成果:
- 为高效生产环境加载和推理做好训练好的 PyTorch 模型的准备。
- 使用 Gradio 或 Streamlit 开发一个功能性的交互式网页演示界面。
- 在公共平台(如 Hugging Face Spaces)上托管所开发的机器学习应用。
- 解释 PyTorch 2.0 中
'torch.compile'功能的核心概念与工作机制。 - 将部署知识与之前的模块化代码实践相结合,创建一个最终的端到端项目。