1.mnist手写数字数据集
下载地址:http://yann.lecun.com/exdb/mnist/
2. LeNet5网络模型
第一层:卷积层
这一层的输入就是原始的图像像素32*32*1。第一个卷积层过滤器尺寸为5*5,深度为6,偏置亦为6,不使用全0填充,长和宽的步长为1。所以这一层的输出:28*28*6,卷积层共有5*5*1*6+6=156个参数。
第二层:池化层
这一层的输入为第一层的输出,是一个28*28*6的节点矩阵。本层采用的过滤器大小为2*2,长和宽的步长均为2,所以本层的输出矩阵大小为14*14*6。
第三层:卷积层
本层的输入矩阵大小为14*14*6,使用的过滤器大小为5*5,深度为16,偏置为16。本层不使用全0填充,长和宽的步长为1。本层的输出矩阵大小为10*10*16。本层有5*5*6*16+16=2416个参数。
第四层:池化层
本层的输入矩阵大小10*10*16。本层采用的过滤器大小为2*2,长和宽的步长均为2,所以本层的输出矩阵大小为5*5*16。
第五层:全连接层
本层的输入矩阵大小为5*5*16,在LeNet-5论文中将这一层称为卷积层,但是因为过滤器的大小就是5*5,所以和全连接层没有区别。如果将5*5*16矩阵中的节点拉成一个向量,那么这一层和全连接层就一样了。本层的输出节点个数为120,总共有5*5*16*120+120=48120个参数。
第六层:全连接层
本层的输入节点个数为120个,输出节点个数为84个,偏置亦为84,总共参数为120*84+84=10164个。
第七层:全连接层
本层的输入节点个数为84个,输出节点个数为10个,偏置亦为10,总共参数为84*10+10=850。
3.使用TensorFlow实现LeNet5神经网络
3.1 初学TensorFlow的个人理解:
一个完整的TensorFlow实现的网络模型需要包换三个文件:
- Inference.py,这个文件定义了网络的前向传播过程以及神经网络中的参数初始化。
- train.py,这个文件定义了神经网络的训练过程。文件中包含了损失函数的定义、学习率的定义、滑动平均操作以及训练过程、以及将训练得到的model的存储。
- eval.py,这个文件定义了测试过程。用训练得到的model重现网络。
3.2 mnist_inference.py中的常用函数:
函数一
name:名称
shape:数据的维度
tf.constant_initializer(0.0):初始化全为0的常量
tf.truncated_normal_initializer(stddev=0.1)):初始化产生一个正态分布的初始值,标准差为0.1。
函数二