LeNet-5是论文Gradient-Based Learning Applied to Document Recognition(IEEE-1998)提出的一种用于手写体字符识别的卷积神经网络模型。
- 源代码
'''利用tensorflow实现的卷积神经网络来进行MNIST手写数字图像的分类。'''
import numpy as np
import tensorflow as tf
#下载mnist数据集,并从mnist_data目录中读取数据
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('mnist_data',one_hot=True)
#(1)“mnist_data” 是和当前文件相同目录下的一个文件夹。从https://yann.lecun.com/exdb/mnist/ 下载4个文件,放到目录MNIST_data下。
#(2)MNIST数据集每个样本都是一张28*28像素的灰度手写数字图片。
#(3)one_hot值被设为true。在分类问题的数据集标注时,如何不采用独热编码的方式, 类别通常就是一个符号,比如9。
#但如果采用独热编码的方式,则每类表示为一个列表list,共计有10个数值,但只有一个为1,其余均为0。如,“9”的独热编码可为[00000 00001].
#定义输入数据x和输出y的形状。函数tf.placeholder的目的是定义输入,可以理解为采用占位符进行占位。
#None位置的参数被用于表示样本的个数,因为样本数此时无法确定,故设为None。每个输入样本的特征数目为28*28。
input_x = tf.placeholder(tf.float32,[None,28*28])/255 #因为每个像素的取值范围是 0~255
output_y = tf.placeholder(tf.int32,[None,10]) #10表示10个类别
#输入层的输入数据input_x被reshape成四维数据,其中第一维的数据代表了图片数量
input_x_images = tf.reshape(input_x,[-1,28,28,1])
test_x = mnist.test.images[:3000] #读取测试集图片的特征,读取3000个图片
test_y = mnist.test.labels[:3