卷积神经网络的常见网络结构
常见的架构图如下:
LeNet-5模型结构图如下图:
LeNet-5模型总共有7层。
第一层:卷积层
第一层卷积层的输入为原始的图像,原始图像的尺寸为32×32×1。卷积层的过滤器尺寸为5×5,深度为6,不使用全0补充,步长为1。由于没有使用全0补充,所以这一层的输出的尺寸为32-5+1=28,深度为6。这一个卷积层总共有5×5×1×6+6=156个参数,其中6为偏置项参数个数,卷积层的参数个数只和过滤器的尺寸,深度以及当前层节点矩阵的深度有关。因为下一层节点矩阵有28×28×6=4704个节点,每个节点和5×5=25个当前层节点相连,所以本层卷积层总共有4704×(25+1)=122304个连接。
第二层:池化层
这一层的输入为第一层的输出,是一个28×28×6的节点矩阵。本层采用的过滤器大小为2×2,步长为2,所以本层的输出矩阵大小为14×14×6。
第三层:卷积层
本层的输入矩阵大小为14×14×6,采用的过滤器大小为5×5,深度为16,不使用全0补充,步长为1。这一层的输出的尺寸为14-5+1=10,深度为16,即输出矩阵大小为10×10×16。本层参数有5×5×6×16+16=2416个,连接有10×10×16×(5×5+1)=41600个。
第四层:池化层
本层的输入矩阵大小为10×10×16,采用的过滤器大小为2×2,步长为2,本层的输出矩阵大小为5×5×16。
第五层:全连接层
本层的输入矩阵大小为5×5×16,在LeNet-5模型的论文中将这一层称为卷积层,但是因为过滤器的大小就是5×5,所以和全连接层没有区别,这里直接看成全连接层。本层输入为5×5×16矩阵,将其拉直为一个长度为5×5×16的向量,即将一个三维矩阵拉直到一维空间以向量的形式表示,这样才可以进入全连接层进行训练。本层的输出节点个数为120,所以总共有5×5×16×120+120=48120个参数。
第六层:全连接层
本层的输入节点个数为120个,输出节点个数为84个,总共有120×84+84=10164个参数。
第七层:全连接层
本层的输入节点个数为84个,输出节点个数为10个,总共有84×10+10=850个参数。
接下来以TensorFlow代码展示一个基于LeNet-5模型的mnist数字识别代码。
mnist数据集和完整代码下载链接为:https://download.youkuaiyun.com/download/casgj16/10698394 。
(1)mnist_inference.py 构建CNN网络
import tensorflow as tf
INPUT_NODE=784
OUTPUT_NODE=10
NUM_CHANNELS=1
IMAGE_SIZE=28
CONV1_DEEP=6
CONV1_SIZE=5
CONV2_DEEP=16
CONV2_SIZE