我开始学习卷积网络,并从我理解的开创性作品之一开始:LeNet-5。然而,我有限的实验似乎并没有显示出比单个隐藏层全连接网络有任何优势。我想了解发生了什么。
作为参考,LeNet-5 论文在这里:http: //yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf
全连接网络
MNIST 数据集有 60k 个训练样本,每个样本为 28x28 像素,测试(验证)集中有 10k 个样本。我的全连接网络具有以下拓扑:
第 0 层(输入):28*28 = 784 个输入 第 1 层(隐藏):100 个单元(测试了 ReLU 和 sigmoid 激活) 第 2 层(输出):10 个单元(softmax)
使用了交叉熵损失,并使用我自己编写的自定义代码进行训练,批量大小为 64 和 10,000 次迭代的随机梯度下降。
LeNet-5
我在这里使用了 LeNet-5 示例。它与原始网络的不同之处在于它使用 ReLU 激活,最大池化而不是平均池化,并且比第 3 层中的原始实现有更多的连接(也就是说,第 3 层是密集层,不是这种情况-5,但我无法使用 Keras 等现代框架找到 100% 忠实的实现)。
尽管如此,我希望它表现出论文中引用的一些特征,即这两个指标:
- 显着降低错误(论文中引用的错误率不到 1%,而全连接案例的错误率约为 4-5%)
- 图像中的平移偏移容差高达字符高度的 50%。
我的结果完全不符合这个。见下表。LeNet-5 采用 32x32 输入图像(通过填充 28x28 图像形成),我应用了各种旋转(度数)和平移(像素)。在 5px 的垂直移动时,LeNet-5 的失败非常严重,这与论文声称它仍然可以识别字符相反。
问题
- 我错过了什么?Keras 的实现(不是我写的)有缺陷吗?
- 鉴于这些结果,LeNet-5 的优势是什么?
- 我可以进行哪些进一步的实验来说服自己相信它的优势?
谢谢 :)
