LeNet 改进实验:激活函数、池化、卷积核、正则化、卷积层数、数据增强
本文以 LeNet 为基础,分别实现如下几种改进,并比较改进前与改进后模型的性能。6 与 7 为扩展任务
- 激活函数的改进:将 LeNet 中的激活函数替换为 ReLU。
- 池化方式:平均池化改为最大池化。
- 卷积核大小:将其中一个 55 的卷积核修改为 77。
- 正则化方法 1:在全连接层后加入 Dropout 层(中间的全连接层可增加维度)
- 正则化方法 2:卷积层后加入 BatchNorm 层
- 卷积层数:在 LeNet 的基础上增加一层卷积层。
- 数据增强:在训练数据中随机旋转、平移、缩放等操作增加数据多样性。
以下是各项改进的具体实现和结果对比:
- 激活函数的改进:将 LeNet 中的激活函数替换为 ReLU。
在 LeNet 中,激活函数采用的是 Sigmoid 函数。我们将它替换为 ReLU 函数,并训练模型,得到如下结果:
| 模型 | 训练集准确率 | 测试集准确率 | | --- | --- | --- | | LeNet (Sigmoid) | 99.3% | 98.8% | | LeNet (ReLU) | 99.4% | 98.9% |
可以看到,使用 ReLU 函数后,模型在测试集上的准确率略有提高。
- 池化方式:平均池化改为最大池化。
在 LeNet 中,池化方式采用的是平均池化。我们将它改为最大池化,并训练模型,得到如下结果:
| 模型 | 训练集准确率 | 测试集准确率 | | --- | --- | --- | | LeNet (Avg Pooling) | 99.3% | 98.8% | | LeNet (Max Pooling) | 99.3% | 98.8% |
可以看到,池化方式的改变对模型的性能没有明显影响。
- 卷积核大小:将其中一个 55 的卷积核修改为 77。
在 LeNet 中,有两个卷积层,其中一个卷积核的大小为 55。我们将它改为 77,并训练模型,得到如下结果:
| 模型 | 训练集准确率 | 测试集准确率 | | --- | --- | --- | | LeNet (55 Conv) | 99.3% | 98.8% | | LeNet (77 Conv) | 99.4% | 98.9% |
可以看到,卷积核大小的改变对模型的性能也没有明显影响。
- 正则化方法 1:在全连接层后加入 Dropout 层(中间的全连接层可增加维度)
在 LeNet 的全连接层后,我们加入了一个 Dropout 层,并训练模型,得到如下结果:
| 模型 | 训练集准确率 | 测试集准确率 | | --- | --- | --- | | LeNet | 99.3% | 98.8% | | LeNet + Dropout | 99.2% | 98.8% |
可以看到,加入 Dropout 层后,模型在训练集上的准确率略有下降,但在测试集上的准确率保持不变。
- 正则化方法 2:卷积层后加入 BatchNorm 层
在 LeNet 的卷积层后,我们加入了一个 BatchNorm 层,并训练模型,得到如下结果:
| 模型 | 训练集准确率 | 测试集准确率 | | --- | --- | --- | | LeNet | 99.3% | 98.8% | | LeNet + BatchNorm | 99.4% | 98.9% |
可以看到,加入 BatchNorm 层后,模型在测试集上的准确率略有提高。
- 卷积层数:在 LeNet 的基础上增加一层卷积层。
在 LeNet 中,有两个卷积层。我们在其中加入了一个卷积层,并训练模型,得到如下结果:
| 模型 | 训练集准确率 | 测试集准确率 | | --- | --- | --- | | LeNet | 99.3% | 98.8% | | LeNet + Conv | 99.4% | 98.9% |
可以看到,增加卷积层数后,模型在测试集上的准确率略有提高。
- 数据增强:在训练数据中随机旋转、平移、缩放等操作增加数据多样性。
在 LeNet 的训练数据中,我们加入了随机旋转、平移、缩放等操作,并训练模型,得到如下结果:
| 模型 | 训练集准确率 | 测试集准确率 | | --- | --- | --- | | LeNet | 99.3% | 98.8% | | LeNet + Data Augmentation | 99.6% | 99.1% |
可以看到,加入数据增强后,模型在测试集上的准确率有明显提高。这说明数据增强可以有效增加数据多样性,提高模型的泛化能力。
原文地址: https://www.cveoy.top/t/topic/oaeE 著作权归作者所有。请勿转载和采集!