> ## Content Index
> Fetch the complete content index at: https://yinguobing.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# Udacity: 图像分类项目
- URL: https://yinguobing.com/blog/udacity-image-classification/
- Published: 2017-11-13T09:07:06.000Z
- Updated: 2017-11-13T09:29:53.000Z
- Description: Udacity深度学习纳米学位作业项目2：图像分类。一些心得写在这里方便以后参考。
- Author: 尹国冰
- Tags: 深度学习

花了一天时间完成了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](https://yinguobing.com/blog/content/images/2017/11/udacity_review2.jpg)