动手学深度学习pytorch
参考地址:https://zh.d2l.ai/
文章目录
- 动手学深度学习pytorch
- 1-第01章-引言
- 1. 机器学习/深度学习基础
- 1.1 什么是机器学习?
- 1.2 深度学习与机器学习的关系?
- 2. 数据(Data)
- 2.1 什么是样本、特征、标签?
- 2.2 如何理解“Garbage in, garbage out”?
- 3. 模型(Model)
- 3.1 什么是模型?
- 3.2 深度学习模型与传统模型的区别?
- 4. 目标函数(Objective Function)
- 4.1 什么是目标函数/损失函数?
- 4.2 回归与分类常用损失?
- 5. 优化算法(Optimization Algorithm)
- 5.1 什么是梯度下降?
- 5.2 如何在 PyTorch 中使用 SGD?
- 6. 监督学习(Supervised Learning)
- 6.1 什么是监督学习?
- 6.2 监督学习的三大步骤?
- 7. 回归(Regression)
- 7.1 什么是回归问题?
- 7.2 如何定义一个简单的线性回归模型?
- 8. 分类(Classification)
- 8.1 什么是分类问题?
- 8.2 如何输出类别概率?
- 9. 过拟合与欠拟合
- 9.1 什么是过拟合?
- 9.2 如何缓解过拟合?
- 10. 无监督学习(Unsupervised Learning)
- 10.1 什么是无监督学习?
- 10.2 聚类示例?
- 11. 强化学习(Reinforcement Learning)
- 11.1 什么是强化学习?
- 11.2 强化学习四元组?
- 12. 端到端训练(End-to-End Training)
- 12.1 什么是端到端训练?
- 12.2 与传统流水线对比?
- 13. 表示学习(Representation Learning)
- 13.1 什么是表示学习?
- 13.2 示例:CNN 学到的层级特征
- 14. 数据增强(Data Augmentation)
- 14.1 什么是数据增强?
- 14.2 在 PyTorch 中做图像增强?
- 15. 生成对抗网络(GAN)
- 15.1 什么是 GAN?
- 15.2 基本训练循环?
- 16. 注意力机制(Attention)
- 16.1 什么是注意力机制?
- 16.2 缩放点积注意力?
- 17. 迁移学习(Transfer Learning)
- 17.1 什么是迁移学习?
- 17.2 在 PyTorch 中加载预训练模型?
- 18. GPU 加速
- 18.1 为什么要用 GPU?
- 18.2 把张量移到 GPU?
- 19. 自动微分(Autograd)
- 19.1 什么是自动微分?
- 19.2 计算并访问梯度?
- 20. 深度学习框架
- 20.1 常见框架有哪些?
- 20.2 为什么选择 PyTorch?
1-第01章-引言
1. 机器学习/深度学习基础
1.1 什么是机器学习?
机器学习是一类让计算机系统通过数据或经验自动提升特定任务性能的技术集合,通常不需要人工显式编写规则。
1.2 深度学习与机器学习的关系?
# 伪代码:关系示意
MachineLearning
└── DeepLearning # 使用多层神经网络进行表示学习
2. 数据(Data)
2.1 什么是样本、特征、标签?
- 样本(sample/example):数据集中的一条记录
- 特征(features/covariates):描述样本的属性向量
- 标签(label/target):需要预测的真实结果
2.2 如何理解“Garbage in, garbage out”?
# 示意:低质量数据导致低质量模型
data_quality == 'garbage' ⇒ model_performance == 'garbage'
3. 模型(Model)
3.1 什么是模型?
模型是由大量可学习参数(parameters)构成的函数族,通过调整参数将输入映射到期望输出。
3.2 深度学习模型与传统模型的区别?
# 传统流程
手工特征提取 → 浅层模型(如 SVM、决策树)# 深度学习流程
原始数据 → 多层神经网络(自动特征提取 + 预测)
4. 目标函数(Objective Function)
4.1 什么是目标函数/损失函数?
目标函数(又称损失函数或成本函数)量化模型预测与真实标签之间的差距,训练过程即最小化该函数。
4.2 回归与分类常用损失?
# 回归
loss = (y_pred - y_true) ** 2 # MSE# 二分类
loss = BCEWithLogitsLoss(y_pred, y_true)
5. 优化算法(Optimization Algorithm)
5.1 什么是梯度下降?
梯度下降是一种迭代优化算法,沿负梯度方向更新参数以最小化损失函数。
5.2 如何在 PyTorch 中使用 SGD?
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
6. 监督学习(Supervised Learning)
6.1 什么是监督学习?
监督学习使用带标签的数据集训练模型,使其能对新的输入样本预测正确的输出标签。
6.2 监督学习的三大步骤?
# 1. 构建带标签的训练集
train_ds = TensorDataset(X_train, y_train)# 2. 选择并训练模型
model = MyModel()
train(model, train_ds)# 3. 在测试集上预测
y_pred = model(X_test)
7. 回归(Regression)
7.1 什么是回归问题?
回归问题的输出是连续数值,目标是让预测值尽可能接近真实值。
7.2 如何定义一个简单的线性回归模型?
class LinearRegression(nn.Module):def __init__(self, in_features):super().__init__()self.linear = nn.Linear(in_features, 1)def forward(self, x):return self.linear(x)
8. 分类(Classification)
8.1 什么是分类问题?
分类问题的输出是离散类别,模型需为每个类别输出概率或硬标签。
8.2 如何输出类别概率?
probs = torch.softmax(logits, dim=1) # 每行之和为1
9. 过拟合与欠拟合
9.1 什么是过拟合?
模型在训练集上表现极好,但在未见过的测试集上表现显著下降。
9.2 如何缓解过拟合?
# 常用技巧
model = nn.Sequential(nn.Dropout(0.5), # 随机失活nn.Linear(512, 10)
)
10. 无监督学习(Unsupervised Learning)
10.1 什么是无监督学习?
无监督学习仅使用无标签数据,目标是发现数据内部结构或分布规律。
10.2 聚类示例?
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3).fit(X)
labels = kmeans.labels_
11. 强化学习(Reinforcement Learning)
11.1 什么是强化学习?
智能体通过与环境交互(观察-动作-奖励循环)学习策略,以最大化长期累积奖励。
11.2 强化学习四元组?
(state, action, reward, next_state)
12. 端到端训练(End-to-End Training)
12.1 什么是端到端训练?
从原始输入到最终输出的整个过程由一个统一模型完成,所有模块联合优化。
12.2 与传统流水线对比?
# 传统
raw_image → 手工特征提取 → 分类器 → 结果# 端到端
raw_image ─────── CNN ───────→ 结果
13. 表示学习(Representation Learning)
13.1 什么是表示学习?
模型自动学习数据的多层抽象表示,使后续任务更简单有效。
13.2 示例:CNN 学到的层级特征
Layer-1: 边缘/纹理
Layer-3: 形状/部件
Layer-5: 物体概念
14. 数据增强(Data Augmentation)
14.1 什么是数据增强?
通过对训练样本进行随机变换(旋转、裁剪、加噪声等)生成更多有效样本,提高模型泛化能力。
14.2 在 PyTorch 中做图像增强?
transform = T.Compose([T.RandomHorizontalFlip(),T.RandomRotation(10),T.ToTensor()
])
15. 生成对抗网络(GAN)
15.1 什么是 GAN?
由生成器(Generator)和判别器(Discriminator)组成,通过对抗训练使生成器学会产生逼真数据。
15.2 基本训练循环?
# 1. 训练判别器
loss_D = criterion(D(real), 1) + criterion(D(fake.detach()), 0)# 2. 训练生成器
loss_G = criterion(D(fake), 1)
16. 注意力机制(Attention)
16.1 什么是注意力机制?
允许模型在处理序列时动态聚焦于最相关的部分,提高长程依赖建模能力。
16.2 缩放点积注意力?
scores = Q @ K.transpose(-2, -1) / sqrt(d_k)
attn = softmax(scores) @ V
17. 迁移学习(Transfer Learning)
17.1 什么是迁移学习?
利用在大规模数据集上预训练的模型权重,只需微调即可适配新任务,显著减少训练数据与计算量。
17.2 在 PyTorch 中加载预训练模型?
model = torchvision.models.resnet50(pretrained=True)
for p in model.parameters():p.requires_grad = False
model.fc = nn.Linear(model.fc.in_features, num_classes)
18. GPU 加速
18.1 为什么要用 GPU?
GPU 具有大量并行计算核心,能够显著加速深度学习中的矩阵运算。
18.2 把张量移到 GPU?
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
x = x.to(device)
model = model.to(device)
19. 自动微分(Autograd)
19.1 什么是自动微分?
PyTorch 通过 autograd
机制自动计算张量的梯度,无需手动推导反向传播公式。
19.2 计算并访问梯度?
loss.backward() # 反向传播
print(layer.weight.grad) # 查看梯度
20. 深度学习框架
20.1 常见框架有哪些?
PyTorch、TensorFlow/Keras、JAX、MXNet、MindSpore 等。
20.2 为什么选择 PyTorch?
动态图、Pythonic 语法、调试友好、社区活跃。