一、数据集介绍
MNIST是一个非常有名的手写体数字识别数据集,在很多资料中,这个数据集都会被用作深度学习的入门样例。
数据集下载网址:http://yann.lecun.com/exdb/mnist/ 。
这里面包含7万张黑底白字手写数字图片,其中55000张为训练集,5000张为验证集,10000张为测试集。每张图片大小为 28x28 像素,图片中纯黑色的像素值为0,纯白色像素值为1。
二、数据集获取
- 通过网址获取http://yann.lecun.com/exdb/mnist/
- 通过以下代码获取,此时程序会自动把数据集下载到MNIST_data文件夹中。
1 | from tensorflow.examples.tutorials.mnist import input_data |
下载后会有以下四个文件,其中上面两个是测试集,下面两个是训练集。image表示图像,Lable是标签,也就是表示的数字。
三、数据集格式说明
3.1 数据分类
自动下载方式的数据集被分成如下图所示的三部分。这样的切分很重要,在机器学习模型设计时必须有一个单独的测试数据集不用于训练,而是用来评估这个模型的性能,从而更加容易把设计的模型推广到其他数据集上
3.2 数据展开
正如前面提到的一样,每一个MNIST数据单元有两部分组成:一张包含手写数字的图片和一个对应的标签。我们把这些图片设为”X”,把这些标签设为”Y”。训练数据集和测试数据集都包含X和Y,比如训练数据集的图片是 mnist.train.images ,训练数据集的标签是 mnist.train.labels。
- mnist.train.images里面的每一张图片并不是28*28格式储存,而是采用一维784长度的向量,获取第一张图片代码为:mnist.train.images[0] 。
- mnist.train.labels里面每一张图片的label是一维10长度的向量,只有对应数字的下表才会为1,比如当前图片是3,则label为:$[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]$
四、数据集图片显示
看不到图片的样子总是很难受,由于数据集和其他的图片不一样,不能直接查看,需要转换一下才能查看。下面使用python代码将minist转为jpg并显示。
1 | import tensorflow as tf |
通过print的输出结果可知,图片被保存成为了一个一维的784长度的数组,下面需要将其reshape成28*28的格式的数组,numpy库可以做到,但是这里直接使用tensorflow内部的reshape函数。
1 | import tensorflow as tf |
输出结果如下图所示:
下面转换成bmp格式图片进行保存1
2
3
4
5
6
7
8
9
10
11import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import matplotlib.image as mpimg # mpimg 用于读取图片
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
aaa = tf.reshape(mnist.train.images[1],[28,28])
with tf.Session() as sess:
image1 = sess.run(aaa)
mpimg.imsave("aaa.jpg",image1)
保存结果为:
五、mnist相关使用函数说明
- mnist.train.images:读取图片,是一个二维数组,每张图片占一行(784个位置)
- mnist.train.labels:读取标签,是一个二维数组,每张图片标签占一行(10个位置)
- mnist.train.next_batch(size):批处理,可以一次性返回指定数量的图片和图片标签,使用方法:
1
batch_x, batch_y = mnist.train.next_batch(batch_size=batch_size)