最近在看卷积神经网络(CNN),主要用来处理图像。

为什么需要CNN?

普通的全连接神经网络处理图像有两个问题:

  1. 参数太多:一张 28x28 的图片就有 784 个输入,如果是彩色图片更多
  2. 没有利用空间信息:图片相邻的像素之间是有关系的,全连接层忽略了这一点

CNN的核心组件

卷积层

用一个小窗口(卷积核)在图片上滑动,提取特征。比如 3x3 的卷积核,每次看 9 个像素。

池化层

降低数据量,常用的最大池化就是在小窗口里取最大值。

全连接层

最后把提取的特征展平,做分类。

实践

跟着教程做了个手写数字识别(MNIST),准确率能到 98% 左右,还挺有成就感的。

代码大概是这样:

不过这个模型很简单,复杂的图像识别还得加深层数。