GooLeNet 炼丹日记 (cifar-100)

进行cifar-100的分类任务,打算采取GooLeNet(v1)模型进行识别。目标是准确度达到60%以上。

GoogLeNet采用了模块化的结构(Inception结构),在Inception中采用不同核的卷积层来保证在不同的尺度上提取特征。

其中采用了1*1的卷积层来进行降维,减少计算复杂度。同时由于在不同的卷积核上提取特征,产生的特征包含多个密集联系的子特征集(如下图),使得非关键特征被弱化,从而减少冗余,加快计算。

goolenet具体结构如下:

goolenet最后采用了average pooling(平均池化)来代替全连接层,具体方法就是对每一个feature上的所有点做平均,有n个feature就输出n个平均值作为最后的softmax的输入,这样可以有效地防止过拟合。

可以看到在网络的中间有两个辅助分类器,因为在中间产生的特征也有很强的分类型,在训练的时候使用三个分类器结合判断损失函数的方式可以有效地提升精确度。

下面是训练参数和细节

第一次炼丹:

学习率为0.0002

batch为128

采用Adam优化器

训练30次

跑了一天,准确度为48%

后期波动较大

打算采用学习率衰减

每过8次训练学习率减半

改进后投入炼丹炉,等待结果。

第二次炼丹

准确度为50.6%,提升了2%

第三次炼丹

今天看gpu利用率的时候,发现我的gpu利用率为0%,然后我就明白为什么的的模型只跑了30个epoch就要跑一整天了。。

于是在dataloder中加上num_workers=8,pin_memory=True,gpu的利用率直接就达到了99%,训练一个epoch只要两分钟。。。(我觉得我可以直接跑200个epoch了)

发现结果loss如下:

 依旧是过拟合的问题,考虑数据增强,暂时先对于图片数据进行随机水平反转,并采用训练集随机读入的方式。

第四次炼丹

效果显著(应该是随机读入的方式使网络避免产生惯性),最高准确度达到了55.4%,提升了5%。

loss如下:

 可以看见在最末尾还是loss有上涨的趋势,说明过拟合问题没有完全解决。

在最后准确度还有上涨的趋势,所以打算增加训练轮数为40轮。

然后我发现之前我在定义adam优化器的时候把它放在训练循环里,导致它无法使用自适应学习率。所以把它移到最开始的超参数定义的地方。

第五次炼丹

最高准确度为58%,提升了3%

后期又出现了过拟合的趋向。

打算再加大训练轮数。

第六次炼丹

这次我直接训练100轮,终于在其中一轮中出现了一个准确率为60.05735759493671的模型。

初步目标算是完成了,但是过拟合造成的高损失也到了一个很离谱的状态:

部分结果可视化如下:

以后有空了在看看怎么优化吧。

第七次炼丹

这次使用了图像反转和随机亮度来扩增数据集并且在第六次炼丹的权重基础上再进行100轮次训练。

其中最高准确率达到了63.1%,增加了3.1%

可见数据集扩增是有效的。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值