深度学习课程介绍

这段代码遵循了深度学习的标准流水线:数据处理 -> 模型构建 -> 训练循环 -> 测试评估


1. 数据预处理模块 (Data Pipeline)

Python

transform = transforms.Compose([
    transforms.ToTensor(), 
    transforms.Normalize((0.1307,), (0.3081,))
])
  • ToTensor(): 这是最关键的一步。它将 PIL 图片或 Numpy 数组(0-255)转换为 FloatTensor,并将像素值缩放到 [0.0, 1.0] 之间。同时,它会自动将形状从 (H, W, C) 转换为 PyTorch 要求的 (C, H, W)
  • Normalize: 使用 MNIST 数据集的全局均值(0.1307)和标准差(0.3081)进行标准化。这能让模型收敛更快,避免梯度爆炸或消失。
  • DataLoader: 它是数据的“传送带”。batch_size=64 意味着每次给模型喂 64 张图,shuffle=True 保证模型不会因为记住了图片的出现顺序而产生过拟合。

2. 卷积神经网络模块 (The Architecture)

这一部分定义了大脑的“结构”。

Python

class TinyCNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.net = nn.Sequential(
            nn.Conv2d(1, 16, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
            # ... 更多层 ...
            nn.Flatten(),
            nn.Linear(32 * 7 * 7, 128), nn.ReLU(),
            nn.Linear(128, 10)
        )
  • Conv2d (卷积层):这是提取特征的核心。它像一个滤镜在图片上滑动,寻找边缘、弧线等形状。
  • ReLU (激活函数):引入非线性变换。没有它,无论多少层神经网络都只是一个复杂的线性方程,无法处理复杂的图像。
  • MaxPool2d (池化层):通过取 $2 \times 2$ 窗口内的最大值,将图片尺寸减半(28->14->7)。这能减少计算量并提取最重要的特征。
  • Flatten: 将二维的特征图(Feature Map)摊平一维向量,以便输入给最后的全连接层(Linear)。
  • Linear(128, 10): 最后一层输出 10 个神经元,对应数字 0-9 的概率得分。

3. 训练核心逻辑 (The Training Loop)

这是模型“学习”的过程。

Python

model.train() # 切换到训练模式
for data, target in train_loader:
    optimizer.zero_grad()            # 1. 清空旧梯度
    output = model(data)             # 2. 前向传播:得到预测值
    loss = criterion(output, target) # 3. 计算误差:预测值与真实标签的差距
    loss.backward()                  # 4. 反向传播:计算每个参数对误差的“贡献”
    optimizer.step()                 # 5. 更新参数:沿着误差减小的方向挪一小步
  • CrossEntropyLoss: 交叉熵损失函数。对于分类问题(0-9 分类),这是标准配置。
  • Adam 优化器: 一种自适应学习率的优化算法,通常比传统的 SGD(随机梯度下降)跑得更稳、更快。

4. 测试与评估模块 (Evaluation)

这是考试阶段,验证模型在没见过的数据上的表现。

Python

model.eval() # 切换到预测模式
with torch.no_grad(): # 关键:预测时不需要计算梯度,节省内存和速度
    for data, target in test_loader:
        output = model(data)
        # argmax(1) 找到 10 个输出中得分最高的那一个作为预测数字
        correct += (output.argmax(1) == target).sum().item()
  • argmax(1): 模型输出的是 10 个数(例如数字 3 的得分最高),我们取索引值作为预测结果。
  • no_grad(): 告诉 PyTorch 此时不需要记录计算图,这能让测试过程运行得非常丝滑。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇