在处理分类任务时我们不仅需要模型告诉我们“它是哪一类”还需要模型给出“它是每一类的概率有多大”。这就是 Softmax 回归大显身手的地方。1. Softmax 回归虽然叫回归其实是分类Softmax 回归通过将输出层映射到 $(0, 1)$ 区间内且保证所有类别的概率之和等于1。核心公式对于输出向量Softmax 的计算方式为这意味着每个类别的得分都被转化成了概率得分越高概率越大。2. 交叉熵损失函数 (Cross-Entropy Loss)在分类问题中我们不再使用均方误差MSE而是使用交叉熵。它专门用来衡量两个概率分布预测分布与真实分布之间的差异。逻辑如果预测正确类的概率趋近于 1损失就趋近于 0如果预测概率趋近于 0损失就会变得无穷大。3. 代码实战简洁实现 Fashion-MNIST 分类文件展示了如何利用 PyTorch 的nn.Sequential快速搭建一个单层神经网络并处理 28x28 像素的图像分类。Pythonimport torch from torch import nn from d2l import torch as d2l # 1. 搭建网络 # nn.Flatten() 将 28*28 的矩阵展平为 784 维向量 net nn.Sequential(nn.Flatten(), nn.Linear(784, 10)) # 2. 初始化参数 def init_weights(m): if type(m) nn.Linear: nn.init.normal_(m.weight, std0.01) # 以正态分布初始化权重 net.apply(init_weights) # 3. 定义损失函数与优化器 # 注意PyTorch 的 CrossEntropyLoss 内部集成了 Softmax 计算 # 因此网络最后一层不需要再手动加 Softmax 层直接输出 logits 即可。 loss nn.CrossEntropyLoss() trainer torch.optim.SGD(net.parameters(), lr0.1) # 4. 训练模型 (使用 d2l 封装好的训练函数) num_epochs 10 d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)4. 关键细节解析为什么使用nn.Flatten()输入的 Fashion-MNIST 图片是的矩阵但全连接层Linear只接收一维向量。Flatten能够把二维矩阵“拉直”而不破坏数据。数值稳定性问题在手动实现 Softmax 时指数运算容易导致数值溢出太大或太小。PyTorch 的nn.CrossEntropyLoss在底层通过数学变形Log-Sum-Exp 技巧解决了这个问题因此直接使用官方损失函数更加稳健。5. 总结多分类任务的“标准姿势”输入处理展平图像 (Flatten)。输出设计输出节点数等于类别总数。损失选择必选CrossEntropyLoss。评价标准使用准确率Accuracy而非 Loss 值作为最终衡量模型好坏的指标。 学习小结Softmax 回归是理解更复杂的深度学习模型如多层感知机 MLP、卷积神经网络 CNN的必经之路。掌握了它你就掌握了计算机“识物”的最基础逻辑。
204_从回归到分类:Softmax 回归、损失函数与多分类实战
在处理分类任务时我们不仅需要模型告诉我们“它是哪一类”还需要模型给出“它是每一类的概率有多大”。这就是 Softmax 回归大显身手的地方。1. Softmax 回归虽然叫回归其实是分类Softmax 回归通过将输出层映射到 $(0, 1)$ 区间内且保证所有类别的概率之和等于1。核心公式对于输出向量Softmax 的计算方式为这意味着每个类别的得分都被转化成了概率得分越高概率越大。2. 交叉熵损失函数 (Cross-Entropy Loss)在分类问题中我们不再使用均方误差MSE而是使用交叉熵。它专门用来衡量两个概率分布预测分布与真实分布之间的差异。逻辑如果预测正确类的概率趋近于 1损失就趋近于 0如果预测概率趋近于 0损失就会变得无穷大。3. 代码实战简洁实现 Fashion-MNIST 分类文件展示了如何利用 PyTorch 的nn.Sequential快速搭建一个单层神经网络并处理 28x28 像素的图像分类。Pythonimport torch from torch import nn from d2l import torch as d2l # 1. 搭建网络 # nn.Flatten() 将 28*28 的矩阵展平为 784 维向量 net nn.Sequential(nn.Flatten(), nn.Linear(784, 10)) # 2. 初始化参数 def init_weights(m): if type(m) nn.Linear: nn.init.normal_(m.weight, std0.01) # 以正态分布初始化权重 net.apply(init_weights) # 3. 定义损失函数与优化器 # 注意PyTorch 的 CrossEntropyLoss 内部集成了 Softmax 计算 # 因此网络最后一层不需要再手动加 Softmax 层直接输出 logits 即可。 loss nn.CrossEntropyLoss() trainer torch.optim.SGD(net.parameters(), lr0.1) # 4. 训练模型 (使用 d2l 封装好的训练函数) num_epochs 10 d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)4. 关键细节解析为什么使用nn.Flatten()输入的 Fashion-MNIST 图片是的矩阵但全连接层Linear只接收一维向量。Flatten能够把二维矩阵“拉直”而不破坏数据。数值稳定性问题在手动实现 Softmax 时指数运算容易导致数值溢出太大或太小。PyTorch 的nn.CrossEntropyLoss在底层通过数学变形Log-Sum-Exp 技巧解决了这个问题因此直接使用官方损失函数更加稳健。5. 总结多分类任务的“标准姿势”输入处理展平图像 (Flatten)。输出设计输出节点数等于类别总数。损失选择必选CrossEntropyLoss。评价标准使用准确率Accuracy而非 Loss 值作为最终衡量模型好坏的指标。 学习小结Softmax 回归是理解更复杂的深度学习模型如多层感知机 MLP、卷积神经网络 CNN的必经之路。掌握了它你就掌握了计算机“识物”的最基础逻辑。