答案

以下是针对3.7节softmax回归简洁实现中两个练习的详细解答:


练习1:调整超参数的影响

  1. 批量大小(Batch Size)

    • 增大批量大小(如512):
      • 训练速度加快(每个epoch耗时减少)
      • 梯度估计更稳定,但可能降低模型泛化能力
      • 内存消耗增加(需注意显存限制)[0]
    • 减小批量大小(如64):
      • 梯度噪声增加,可能帮助逃离局部极小值
      • 需要更多迭代次数才能收敛
      • 适合在线学习场景
  2. 学习率(Learning Rate)

    • 增大学习率(如0.5):
      • 收敛速度加快,但可能跳过最优解
      • 可能出现损失值震荡(如图1左)[0]
    • 减小学习率(如0.01):
      • 收敛更稳定,但需要更多训练时间
      • 可能陷入局部最优(如图1右)
  3. 迭代周期(Epochs)

    • 增加epoch数(如20):
      • 模型可能过拟合训练数据
      • 需配合早停法(early stopping)使用
    • 减少epoch数(如5):
      • 可能欠拟合
      • 需监控验证集精度变化

练习2:过拟合现象与解决方案

现象解释
当迭代周期超过10次后,测试精度开始下降(如图2),这是因为:

  1. 模型过度记忆训练集特征(如记住特定噪声模式)
  2. 简单网络结构(仅单层全连接)缺乏正则化能力[0]
  3. 训练集与测试集分布差异被放大

解决方案

  1. 正则化技术

    • 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))
      
  2. 数据增强

    transform = transforms.Compose([
        transforms.RandomHorizontalFlip(),  # 随机水平翻转
        transforms.RandomRotation(10),     # 随机旋转
        transforms.ToTensor()])
    
  3. 早停法(Early Stopping)

    • 监控验证集损失,当连续3个epoch未改善时停止训练
  4. 模型结构调整

    • 增加隐藏层:
      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))
      

可视化建议

  1. 使用TensorBoard绘制训练/验证损失曲线
  2. 绘制混淆矩阵分析错误分类模式
  3. 可视化权重矩阵观察特征学习情况

通过系统调整超参数和引入正则化措施,可以使模型在Fashion-MNIST数据集上达到85%以上的测试准确率。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐