本文结构:
- CNN
- 建立模型
- code
昨天只是用了简单的 softmax 做数字识别,准确率为 92%,这个太低了,今天用 CNN 来提高一下准确率。
关于 CNN,可以看这篇:
简单看一个典型的 Deep CNN 由若干组 Convolution-ReLU-Pooling 层组成。
这三层可以提取出有用的 pattern,但它们并不知道这些 pattern 是什么。
所以接着是 Fully Connected 层,它可以对数据进行分类。
在 CNN 中有几个重要的概念:
- stride
- padding
- pooling
stride,就是每跨多少步抽取信息。每一块抽取一部分信息,长宽就缩减,但是厚度增加。抽取的各个小块儿,再把它们合并起来,就变成一个压缩后的立方体。
padding,抽取的方式有两种,一种是抽取后的长和宽缩减,另一种是抽取后的长和宽和原来的一样。
pooling,就是当跨步比较大的时候,它会漏掉一些重要的信息,为了解决这样的问题,就加上一层叫pooling,事先把这些必要的信息存储起来,然后再变成压缩后的层:
即 Pooling 层是用来降维的。
经过 convolution 和 ReLU 的作用后,会有越来越复杂的形式,所以Pooling 层负责提取出最重要的 pattern,进而提高时间空间的效率。
patch,就是小方块的长宽的像素,in size 是image的厚度为1,out size是输出的厚度为32:
模型
主要就是建立 2 组 convolution-pooling 层,全连接层,加 dropout 减小过拟合,得到预测值 y_conv:
- 每一层建立 weight 和