LeNet学习笔记(课后题加思考

练习题目

  1. 将平均汇聚层替换为最大汇聚层,会发生什么?
  2. 尝试构建一个基于LeNet的更复杂的网络,以提高其准确性。
    1. 调整卷积窗口大小。
    2. 调整输出通道的数量。
    3. 调整激活函数(如ReLU)。
    4. 调整卷积层的数量。
    5. 调整全连接层的数量。
    6. 调整学习率和其他训练细节(例如,初始化和轮数)。
  3. 在MNIST数据集上尝试以上改进的网络。
  4. 显示不同输入(例如毛衣和外套)时,LeNet第一层和第二层的激活值。

练习解答

总结(手写)

池化(最大及平均)

  • 用于降低特征图的尺寸,减少计算量,同时保留重要的特征信息。于是就分出了max和ave两种。
  • max pool适合特征提取(以为取最大值,会保留特征,对输入的显著特征更加敏感,适合图像检测和目标分类)
  • ave pool使特征过度的更加平滑(适合语义分割)

详细解答

LeNet的改进:
  • 之前的一篇vgg论文笔记中有提到,多层3x3的卷积层比单层的5x5卷积核更加有效,但是需要更深的网络。
  • 增加通道数 模型能更好的学习到特征,增大计算量
  • RELU:由其图像可知避免了梯度消失问题。(在反向传播过程中,ReLU 的导数在输入大于 0 时为 1,在输入小于或等于 0 时为 0。这种恒定的梯度使得梯度在反向传播过程中不会像 Sigmoid 和 Tanh 那样迅速衰减,从而缓解了梯度消失问题。)
1. 将平均汇聚层替换为最大汇聚层,会发生什么?

将平均汇聚层(Average Pooling)替换为最大汇聚层(Max Pooling)通常会导致以下变化:

  • 特征选择性增强:最大汇聚层会选择每个区域中的最大值,这有助于保留更显著的特征,而平均汇聚层则平滑了这些特征。因此,最大汇聚层通常会使得模型对输入中的显著特征更加敏感。
  • 模型性能变化:在某些情况下,最大汇聚层可能会提高模型的性能,因为它能够更好地保留重要的特征。然而,这也取决于具体的任务和数据集。在某些情况下,平均汇聚层可能更适合,因为它能够提供更平滑的特征表示。
  • 计算复杂度:最大汇聚层和平均汇聚层的计算复杂度相似,因此替换不会显著影响计算效率。
2. 尝试构建一个基于LeNet的更复杂的网络,以提高其准确性。

为了提高LeNet的准确性,可以尝试以下改进:

  1. 调整卷积窗口大小

    • 较小的卷积窗口(如3x3)可以捕捉更细粒度的特征,但可能需要更多的卷积层来覆盖相同的感受野。
    • 较大的卷积窗口(如5x5或7x7)可以捕捉更大范围的特征,但可能会丢失一些细节。
  2. 调整输出通道的数量

    • 增加卷积层的输出通道数可以增加模型的容量,使其能够学习到更复杂的特征。
    • 减少通道数可以减少模型的复杂度,但可能会限制其表达能力。
  3. 调整激活函数(如ReLU)

    • 使用ReLU(Rectified Linear Unit)作为激活函数可以加速训练过程,因为它避免了梯度消失问题。
    • 也可以尝试其他激活函数,如Leaky ReLU、ELU等,以查看它们对模型性能的影响。
  4. 调整卷积层的数量

    • 增加卷积层的数量可以增加模型的深度,使其能够学习到更抽象的特征。
    • 减少卷积层的数量可以简化模型,但可能会限制其表达能力。
  5. 调整全连接层的数量

    • 增加全连接层的数量可以增加模型的非线性能力,使其能够更好地拟合数据。
    • 减少全连接层的数量可以简化模型,但可能会限制其表达能力。
  6. 调整学习率和其他训练细节(例如,初始化和轮数)

    • 调整学习率可以影响模型的收敛速度和最终性能。
    • 使用不同的权重初始化方法(如Xavier初始化、He初始化)可以影响模型的训练稳定性。
    • 调整训练轮数可以确保模型充分训练,但也要避免过拟合。
3. 在MNIST数据集上尝试以上改进的网络。

在MNIST数据集上尝试以上改进的网络时,可以按照以下步骤进行:

  1. 数据预处理

    • 将MNIST数据集标准化(例如,将像素值缩放到[0, 1]范围)。
    • 对数据进行适当的增强(如随机旋转、平移等)以提高模型的泛化能力。
  2. 构建改进的网络

    • 根据上述改进策略,构建一个更复杂的网络。例如,可以增加卷积层的数量和输出通道数,使用ReLU激活函数,并增加全连接层的数量。
  3. 训练和评估

    • 使用交叉熵损失函数和Adam优化器进行训练。
    • 调整学习率和训练轮数,以确保模型在训练集和验证集上都能达到最佳性能。
    • 使用验证集监控模型的性能,并在训练过程中进行适当的调整。
  4. 比较结果

    • 比较改进后的网络与原始LeNet在MNIST数据集上的准确率。
    • 分析改进对模型性能的影响,并确定哪些改进最为有效。
4. 显示不同输入(例如毛衣和外套)时,LeNet第一层和第二层的激活值。

为了显示不同输入时LeNet第一层和第二层的激活值,可以按照以下步骤进行:

  1. 加载预训练的LeNet模型

    • 使用训练好的LeNet模型,并加载其权重。
  2. 准备输入图像

    • 选择几张不同类别的图像(例如毛衣和外套),并将其预处理为模型输入的格式。
  3. 获取激活值

    • 通过前向传播计算输入图像在LeNet第一层和第二层的激活值。
    • 可以使用PyTorch等框架中的hook机制来获取中间层的输出。
  4. 可视化激活值

    • 将第一层和第二层的激活值进行可视化,例如通过热图或特征图的形式展示。
    • 比较不同输入图像在同一层的激活值,观察它们之间的差异。

通过这种方式,可以直观地了解LeNet在处理不同输入时,其卷积层的激活模式是如何变化的。这有助于理解模型的内部工作机制,并为模型的改进提供指导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值