cifar100实验

实验一:初步探究 BN 作用

基本配置

  • A:使用 VGG16 + BN + GAP
  • B:使用 VGG16 + GAP
  • 数据集 cifar100
  • Adam,30 epoch

实验结果

  • A:train acc:90%+,test acc:50%,发生严重的过拟合
  • B:train acc:1%,发生严重的欠拟合

结果分析

BN 在防止梯度弥散这方面起了重要的作用,让深层的神经网络在面对很小的数据的时候也能够拟合。

实验二:探究 GAP 作用

基本配置

  • A:使用 VGG16 + 256 fc * 2 + BN
  • B:使用 VGG16 + 256 fc * 2
  • 数据集 cifar100
  • Adam,30 epoch

实验结果

A,B train acc 均为 1%,发生严重的欠拟合

分析

怀疑是因为:

  • 数据维度过小,后面的卷积层很难提取特征(1 1, 2 2 这样的大小)
  • 全连接层神经元太少(只有 256 * 2)
  • GAP 把过于分散的特征“结合”了起来,因此实验一在 BN 的帮助下还是可以拟合的

实验三:实验二欠拟合探究之一

基本配置

  • A:使用 VGG16 + 4096 fc * 2 + BN
  • B:使用 VGG16 + 256 fc 2 + 图像缩放到 80 80
  • 数据集 cifar100
  • Adam,30 epoch

实验结果

  • A:train acc:69%,test acc:43%,略有过拟合
  • B:train acc:1%,欠拟合严重

结果分析

增加了 fc 神经元个数之后就开始拟合了,效果好了一些,因此上一个推测二是对的;增加了图像的大大小之后还是不能拟合,因而单纯缩放是无法解决问题的(症结还是在网络骨架的结构上)。

实验四:实验二欠拟合探究之二

基本配置

  • A:使用 VGG16 + BN + 4096 fc * 2(去掉 vgg block 5)
  • B:使用 VGG16 + 4096 fc 2 + 图像缩放到 80 80
  • 数据集 cifar100
  • Adam,30 epoch

实验结果

  • A:train acc:75%,test acc:48%,有过拟合
  • B:train acc:1%,欠拟合严重

结果分析

进一步表明图像缩不是症结所在果,图像本身太小了,持续的池化让 shape 过小,再使用卷积反而起反作用,因而效果差了。

实验五:深入研究 BN 作用

基本配置

  • A:使用 VGG16 + GAP + BN(去掉 vgg block 5)
  • B:使用 VGG16 + GAP(去掉 vgg block 5)
  • C:使用 VGG16 + GAP + BN(去掉 vgg block 4、5)
  • D:使用 VGG16 + GAP(去掉 vgg block 4、5)
  • 数据集 cifar100
  • Adam,30 epoch

实验结果

  • A:train acc:98%,test acc:53%,发生严重过拟合
  • B:train acc:<1%,欠拟合严重
  • C:train acc:98%,test acc:59%,发生严重过拟合
  • D:train acc:87%,test acc:34%,过拟合严重且结果也一般

结果分析

BN 确实厉害,可以有效防止过拟合,梯度弥散。

  • 同样是过拟合没加 BN 过拟合程度比加了要严重不少。
  • 同样是多了一个 block,没有 BN 就直接梯度消失没办法拟合,有了 BN 尽管会过拟合但是可以非常顺利训练下来。

而且加了 BN 之后训练的训读会快一些(A:47s->B:65s,C:24s->D:39s)

实验六:过拟合探究

基本配置

  • A:使用 VGG16(去掉 vgg block 4、5) + GAP + BN + l2_normalization(所有卷积层都加 l2)+ 60 epoch
  • B:使用 VGG16(去掉 vgg block 4、5) + GAP + BN + l2_normalization(l2 只加到最后一个卷积上)+ 30 epoch
  • C:使用 VGG16(去掉 vgg block 4、5) + GAP + BN + l2_normalization(l2 只加到最后三个卷积上)+ 30 epoch
  • 数据集 cifar100
  • Adam

实验结果

  • A:train acc:51.8%,test acc:38%,虽然过拟合没那么严重,但是效果比较差
  • B:train acc:93%,test acc:46%,惩罚作用太弱,过拟合严重
  • C:
    • 30 epoch:train acc:71%,test acc:43%,惩罚作用较强,过拟合依旧严重
    • 60 epoch:train acc:84%,test acc:39%,惩罚作用较强,过拟合依旧严重

结果分析

l2_normalization 如果在全局应用会使惩罚作用太强,性能严重降低;只在最后一层加惩罚效果又太弱;在最后三层加则不仅性能差而且过拟合依旧严重。

这几次实验都是训练到最后,没有加入验证集,从而没有在过拟合之前停止下来查看效果。

不过实验证明了加 l2 正则并不是一个非常有效的方法。或者是 l2 正则不应该这样用。

实验七:图片预处理

基本配置

  • 使用 VGG16 + GAP + BN + 预处理(去掉 vgg block 4、5)
  • 数据集 cifar100
  • Adam,40 epoch

实验结果

train acc:98%,test acc:65%,过拟合略有缓解

结果分析

给图片做预处理果然有用,缓解过拟合效果不错。不过需要注意,训练图片和测试图片格式必须一样!!!(比如如果要除以 255 就都要除),不然就是百分之百测试效果很差了 233。

实验总结

  • 对于小的输入不要使用太复杂的神经网络,不然梯度消失反而会起到反作用
  • 设计网络时将最后一层卷积输出控制在 4 4 512 比较好
  • 使用 BN 可以有效加快训练速度,缓解梯度弥散
  • 使用 GAP 代替全连接层,减小训练量,降低过拟合
  • 使用图片预处理减轻过拟合
  • l2 normalization 慎用