李沐深度学习 · 第27-28集 双集代码卡

第27-28集:Softmax 从零实现 + 简洁实现分类四件套 · 收官

27 · 18:44
从零实现(硬核)
28 · 04:10
简洁实现(API)
≈ 84%
测试集准确率
下一站
29集 QA 31:00

🛠️ 第27集:从零实现(18:44)每个函数都手写

# softmax:先减最大值防爆,再归一化 def softmax(X): X_exp = torch.exp(X - X.max(axis=1, keepdim=True).values) return X_exp / X_exp.sum(axis=1, keepdim=True) # 交叉熵:gather 取真实类概率,取负 log def cross_entropy(y_hat, y): return -torch.log(y_hat[range(len(y_hat)), y]) # 准确率:argmax 与标签比对 def accuracy(y_hat, y): return (y_hat.argmax(axis=1) == y).float().mean().item()
📐 模型展平
28×28 图片 reshape 成 784 维向量,W 是 784×10 矩阵
🧮 手写评估器
Accumulator 类累加"正确数/样本数",算训练/测试精度
🔁 训练循环
前向→损失→backward→SGD→清零,10个epoch ≈ 84% 准确率

⚡ 第28集:简洁实现(04:10)框架一行顶手写十行

net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10)) loss = nn.CrossEntropyLoss() # softmax+交叉熵 合体 ⚠️ trainer = torch.optim.SGD(net.parameters(), lr=0.1)
组件27集手写28集 API
模型X@W+b 手动矩阵乘nn.Linear(784,10)
激活归一手写 softmax藏在 CrossEntropyLoss 里 ⭐
损失gather + lognn.CrossEntropyLoss()
代码量▊▊▊▊▊ 约100行▏ 约10行
Generated with Tabbit.