为什么学习 PyTorch
深度学习框架的重要性
在正式学习PyTorch之前,让我们先理解一个根本性的问题:为什么要学习深度学习框架?
想象一下,如果让你从零开始写一个程序来识别图片中的猫,你需要做什么?
首先,你需要理解猫的特征:耳朵的形状、眼睛的大小、毛发的纹理...然后你需要用数学公式来描述这些特征。当你想要优化这个系统时,你需要计算梯度来调整参数。这整个过程极其复杂且耗时。
而深度学习框架正是为了解决这个问题而诞生的。它帮我们封装好了:
- 高效的数值计算(矩阵运算、梯度计算等)
- 自动求导机制(自动计算复杂函数的梯度)
- GPU加速(利用显卡并行计算,大幅提升速度)
- 现成的神经网络组件(卷积层、循环层、注意力机制等)
有了框架,我们就可以像搭积木一样构建自己的神经网络,把精力集中在模型设计和数据处理上,而不是底层实现。
为什么选择PyTorch?
PyTorch是由Facebook(现Meta)的AI研究团队开发的深度学习框架。在2017年推出后,它迅速成为学术研究领域的首选框架。
PyTorch的核心特点:
动态计算图(Dynamic Computation Graph)
- 什么是计算图?简单来说,它是用来记录我们执行了哪些操作的"账本"
- 动态图的特点是:每次运行代码时,计算图都会重新构建
- 这让调试变得非常直观——你可以像调试普通Python代码一样调试PyTorch代码
- 想象一下:你在写一段代码,中途想print一个变量的值看看对不对,这在PyTorch中完全没问题!
Python优先的设计理念
- PyTorch的API设计非常Pythonic(符合Python的风格)
- 如果你熟悉Python,学PyTorch会感觉非常自然
- 不需要学习额外的"框架特定语言"
GPU加速
- 深度学习涉及大量的矩阵运算
- GPU(显卡)特别擅长并行处理这类运算
- 使用GPU可以让训练速度提升10倍甚至100倍
- 举例:CPU训练一个模型需要几天,GPU可能只需要几小时
自动微分(Automatic Differentiation)
- 这是深度学习框架最核心的功能
- 想象一下:你写了一个很复杂的神经网络(可能几百层)
- 如果让你手动计算梯度...这简直是不可能的任务
- 自动微分让我们只需要定义前向传播,框架会自动处理反向传播和梯度计算
张量:PyTorch的核心数据结构
PyTorch的核心数据结构是张量(Tensor)。听起来很高大上,其实它就是我们熟悉的多维数组的学术说法:
- 0维张量:一个标量(数字),比如
5 - 1维张量:一个向量,比如
[1, 2, 3, 4, 5] - 2维张量:一个矩阵,比如
[[1,2,3], [4,5,6]] - 3维张量:可以想象成一叠照片(比如RGB图像)
- 更高维:可以想象成视频(3D+时间维度)
张量类似于NumPy的ndarray,但它额外支持:
- GPU加速:可以在GPU上存储和计算
- 自动求导:可以追踪梯度
本笔记的学习路线
本笔记是整个深度学习笔记系列的基础篇,目标是:
第一章:掌握PyTorch的核心数据结构——张量(Tensor)的创建与基本操作
- 学会用
torch.tensor、torch.randn、torch.zeros等函数创建张量 - 理解标量、向量、矩阵与高维张量的关系
- 掌握
torch.arange、torch.linspace等序列创建函数
第二章:理解张量的属性
- 掌握
shape、dtype、device三大核心属性 - 学会在不同设备(CPU/GPU)之间迁移张量
第三章:掌握张量的操作与变换
- 矩阵乘法(
@、torch.matmul) - 形状变换(
reshape、view、squeeze、unsqueeze) - 张量合并(
cat、stack)与数值提取(item、numpy)
第四章:理解自动求导机制
- 这是 PyTorch 最强大的特性
- 掌握
requires_grad、backward、zero_grad、no_grad - 理解计算图与梯度下降的联系
第五章:掌握神经网络的基础模块
- 线性层(
nn.Linear)、激活函数、损失函数、优化器 - 学会用
nn.Module和nn.Sequential构建完整的神经网络
前置知识:本笔记假设你已经有Python基础,会写循环、条件语句、函数等。如果你还不太熟悉Python,建议先学习Python基础课程。另外,了解一点线性代数(知道什么是矩阵、向量)会有帮助,但不是必须的——我们会在需要时解释相关概念。