TensorFlow处理MNIST数据集

MNIST是一个非常有名的手写体数字识别数据集,MNIST数据集是NIST数据集的一个子集,它包含了60000张图片作为训练数据,10000张图片作为测试数据,在MNIST数据集中的每一张图片都代表了0~9中的一个数字,图片的大小都为28 × 28,且数字都会出现在图片的正中间

在Yann LeCun教授的网站中:http://yann.lecun.com/exdb/mnist, 对MNIST数据集做出了详细的介绍,MNIST数据集提供了4个下载文件,笔者将这4个下载文件的链接在以下表格中进行了陈列,朋友们可以选择直接点击下载,也可以选择到Yann LeCun教授的网站去下载,注意,这4个文件下载后无需解压

网址 内容
http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz 训练数据图片
http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz 训练数据答案
http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz 测试数据图片
http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz 测试数据答案

虽然MNIST数据集只提供了训练和测试数据,但是为了验证模型训练的效果,一般会从训练数据中划分出一部分数据作为验证(validation)数据

为了方便使用,TensorFlow提供了一个类来处理MNIST数据,这个类会自动下载并转化MNIST数据的格式,并将数据从原始的数据包中解析成训练和测试神经网络时使用的格式,通过下列代码来了解一下这个类:

from tensorflow.examples.tutorials.mnist import input_data

#载入MNIST数据集,如果指定路径datasets/MNIST_ data/下没有已经下载好的数据,那么TensorFlow会自动从数据集所在网址下载数据
mnist = input_data.read_data_sets("datasets/MNIST_data/", one_hot=True)

print("Training data size: ", mnist.train.num_examples)
print("Validating data size: ", mnist.validation.num_examples)
print("Testing data size: ", mnist.test.num_examples)

print("Example training data: ", mnist.train.images[0]) 
print("Example training data label: ", mnist.train.labels[0])

通过input_data.read_data_sets函数生成的类会自动将MNIST数据集划分为train、validation和test三个数据集,其中train这个集合内有55000张图片,validation 集合内有5000张图片,这两个集合组成了MNIST本身提供的训练数据集,test集合内有10000张图片,这些图片都来自于MNIST提供的测试数据集。

实际上,经过处理后的每一张图片是一个长度为784的一维数组,这个数组中的元素对应了图片像素矩阵中的每一个数字(28 × 28 = 784), 因为神经网络的输入是一个特征向量,所以在此把一张二维图像的像素矩阵放到一个一维数组中可以方便TensorFlow将图片的像素矩阵提供给神经网络的输入层,像素矩阵中元素的取值范围为[0,1],它代表了颜色的深浅,其中0表示白色背景(background),1表示黑色前景(foreground)。

为了方便使用随机梯度下降,input_data.read_data_sets函数生成的类还提供了mnist.train.next_batch函数,它可以从所有的训练数据中读取一小部分作为一个训练batch,以下代码显示了如何使用这个功能:

batch_size = 100

#从train的集合中选取batch_size个训练数据
xs, ys = mnist.train.next_batch(batch_size)

'''输出结果为:
X shape: (100, 784)
Y shape: (100, 10)'''
print("X shape:", xs.shape)                     
print("Y shape:", ys.shape)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章