Udacity: 图像分类项目

Udacity深度学习纳米学位作业项目2:图像分类。一些心得写在这里方便以后参考。

Udacity: 图像分类项目

花了一天时间完成了Udacity深度学习纳米学位的项目2:图像分类。

项目描述

官方的项目描述如下:

在这一项目中,你需要对 CIFAR-10 数据集 进行图像分类。该数据集包含飞机,狗,猫等类型的图片。你需要先对数据集进行预处理,然后用卷积神经网络对所有样本进行训练。你要先将图像归一化(normalize),对标签进行独热编码(one-hot encode the labels),然后建立卷积层、最大池化层和全连接层。最后,你将看到该模型对样本图像作出的预测结果。

由于之前做过关于卷积神经网络的研究,这个项目并没有花掉我太多的时间。我觉得需要注意的地方包括:

网络层数

之前本着更深就是更好的原则,我采用了3层卷积池化 + 3层全连接的网络结构。这种网络结构理论上有更好的潜力可以挖掘,但是缺点就是训练起来更加困难,尤其是项目2中还没有引入正则化等方法,仅仅凭借dropout防止过拟合看起来比较困难。我尝试了很多次,都没有办法在单个数据集的前提下实现50%以上的准确率。后来降低了网络层数才解决了这个问题。

节点数

一个有趣的地方是每一层节点数的选择。我按照自己的理解,在卷基层采用了节点数递减的策略,认为底层的特征数应当多,越靠后抽象的特征数越少。不过从reviewer的反馈看,卷基层节点数递增是更好的策略。

Dropout层

我将dropout层放置在了两个全连接层中间,认为这里的连接数最多,应该dropout会起明显的作用。

超参数

Batch size

从训练结果来看,对于更复杂的网络结构,batch_size更大有着更快的收敛速度,准确率震荡的现象也不会频繁的出现。我试过最大的batch_dize为256,但是比起128来说提升并不明显。

Learning rate

项目2中optimizer是指定的,且处于不允许修改的代码块内,因此learning rate不可调。

其它

我使用的TensorFlow版本为1.4。与Udacity建议的不太一样。同样我也没有使用annaconda。版本r1.4的API与之前的可能有所不同,需要自己查询适配。

udacity_review2