沐神-动手学习深度学习,课后习题 3.7. softmax回归的简洁实现
·
答案
以下是针对3.7节softmax回归简洁实现中两个练习的详细解答:
练习1:调整超参数的影响
-
批量大小(Batch Size)
- 增大批量大小(如512):
- 训练速度加快(每个epoch耗时减少)
- 梯度估计更稳定,但可能降低模型泛化能力
- 内存消耗增加(需注意显存限制)[0]
- 减小批量大小(如64):
- 梯度噪声增加,可能帮助逃离局部极小值
- 需要更多迭代次数才能收敛
- 适合在线学习场景
- 增大批量大小(如512):
-
学习率(Learning Rate)
- 增大学习率(如0.5):
- 收敛速度加快,但可能跳过最优解
- 可能出现损失值震荡(如图1左)[0]
- 减小学习率(如0.01):
- 收敛更稳定,但需要更多训练时间
- 可能陷入局部最优(如图1右)
- 增大学习率(如0.5):
-
迭代周期(Epochs)
- 增加epoch数(如20):
- 模型可能过拟合训练数据
- 需配合早停法(early stopping)使用
- 减少epoch数(如5):
- 可能欠拟合
- 需监控验证集精度变化
- 增加epoch数(如20):
练习2:过拟合现象与解决方案
现象解释:
当迭代周期超过10次后,测试精度开始下降(如图2),这是因为:
- 模型过度记忆训练集特征(如记住特定噪声模式)
- 简单网络结构(仅单层全连接)缺乏正则化能力[0]
- 训练集与测试集分布差异被放大
解决方案:
-
正则化技术
- L2正则化(权重衰减):
trainer = torch.optim.SGD(net.parameters(), lr=0.1, weight_decay=0.01) - Dropout层:
net = nn.Sequential( nn.Flatten(), nn.Linear(784, 256), nn.ReLU(), nn.Dropout(0.5), # 添加dropout层 nn.Linear(256, 10))
- L2正则化(权重衰减):
-
数据增强
transform = transforms.Compose([ transforms.RandomHorizontalFlip(), # 随机水平翻转 transforms.RandomRotation(10), # 随机旋转 transforms.ToTensor()]) -
早停法(Early Stopping)
- 监控验证集损失,当连续3个epoch未改善时停止训练
-
模型结构调整
- 增加隐藏层:
nn.Sequential( nn.Flatten(), nn.Linear(784, 256), nn.ReLU(), nn.Linear(256, 10)) - 使用批标准化:
nn.Sequential( nn.Flatten(), nn.Linear(784, 256), nn.BatchNorm1d(256), nn.ReLU(), nn.Linear(256, 10))
- 增加隐藏层:
可视化建议:
- 使用TensorBoard绘制训练/验证损失曲线
- 绘制混淆矩阵分析错误分类模式
- 可视化权重矩阵观察特征学习情况
通过系统调整超参数和引入正则化措施,可以使模型在Fashion-MNIST数据集上达到85%以上的测试准确率。
更多推荐

所有评论(0)