1.MNIST数据集简介
数据集有两个功能:
(1)提供了大量的数据作为训练集和测试集,为一些兴趣爱好者和学习者提供了丰富的资源信息。
(2)形成一个业界领域具有一定对比程度的项目,不同的研究者使用了相同的数据集,从而可以更加方便地将结果进行对比,从而验证出哪种设计的程序识别率更高。
数据集里面的数字长这个样子。
2.MNIST数据集组成
每一张图片包含28像素×28个像素点,可以用一个数字数组来表示这张图片,如图所示。将这个数字数组展开成一个向量,长度是28×28 = 784。数字间的顺序不重要,只要保持各个图片采用相同的方式展开。
MNIST数据集的图片就是在784维向量空间里面的点,并且拥有比较复杂的结构。在MNIST训练数据集中,mnist.train.images是一个形状为[60000, 784]的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片中的像素点。在此张量里的每一个元素,都表示某张图片里的某个像素的强度值,值介于0和1之间,如图所示:
MNIST数据集的标签mnist.train.labels是介于0到9的数字,用来描述给定的训练图片里所表示的数字。标签数据用“one-hot vectors”的形式来表示,所谓的"one-hot"是指一位有效编码,即,我们使用n维度的向量来表示n个类别,这其中,每一个类别都会占据相对独立的一个位置,因此,一个one-hot向量即为除了某一特定位置的数字是1以外,其余各维度数字都是0。数字n将表示成一个只有在第n维度(从0开始)数字为1的10维向量。
例如,数字4的one hot编码就是[0,0,0,0,1,0,0,0,0,0],即从0开始数第5位数字的位置为1,其他位置都是0的编码格式。
因此,mnist.train.labels是一个[60000, 10]的10维度数字矩阵。
3.数据集下载及展示
数据集可以直接去官网下载,官网地址:MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burgeshttp://yann.lecun.com/exdb/mnist/
下载完成以后,放在要写的Python的同级目录的MNIST_data(这里是为了后面代码中写的路径读取)下面
接下来可以用以下代码简单看下数据集里面的内容。
# -*- coding: utf-8 -*-
import tensorflow as tf
#导入MNIST数据集,加载相应的数据模块
from tensorflow_core.examples.tutorials.mnist import input_data
#从MNIST_data数据集中读取MNIST数据并使用one hot编码,如果数据不存在,则会自动加载
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
#输出训练集的内容
print('输入数据:',mnist.train.images)
print('输入数据的shape:',mnist.train.images.shape)
print('输入标签的内容',mnist.train.labels)
print('输入标签的shape',mnist.train.labels.shape)
#绘制第100张图片的内容
import pylab
im = mnist.train.images[100]
#通过reshape函数重新将[784]的张量转化为[28,28]
im = im.reshape(-1,28)
pylab.imshow(im)
pylab.show()
#展示测试集及验证集相关数据信息
print('测试集输入图片的数据',mnist.test.images)
print('测试集输入图片的的shape',mnist.test.images.shape)
print('测试集输入标签的内容',mnist.test.labels)
print('测试集输入标签的shape',mnist.test.labels.shape)
#展示训练集第53张图片张良表示的相关信息
print(mnist.train.images[53,:])
print(mnist.train.labels[53,:])