2019.2.23 星期六 多云 biolearn
MNIST数据集是机器学习领域中非常经典的一个数据集,由60000个训练样本和10000个测试样本组成,每个样本都是一张28 * 28像素的灰度手写数字图片。
下载
- 官方网站 http://yann.lecun.com/exdb/mnist/
- 一共4个文件,训练集、训练集标签、测试集、测试集标签
文件名称 | 大小 | 内容 |
---|---|---|
train-images-idx3-ubyte.gz | 9,681 kb | 55000张训练集,5000张验证集 |
train-labels-idx1-ubyte.gz | 29 kb | 训练集图片对应的标签 |
t10k-images-idx3-ubyte.gz | 1,611 kb | 10000张测试集 |
t10k-labels-idx1-ubyte.gz | 5 kb | 测试集图片对应的标签 |
读入MNIST数据集
直接下载下来的数据是无法通过解压或者应用程序打开的,因为这些文件不是任何标准的图像格式而是以字节的形式进行存储的,所以必须编写程序来打开它。
使用TensorFlow进行解压
使用TensorFlow中input_data.py
脚本来读取数据及标签,使用这种方式时,可以不用事先下载好数据集,它会自动下载并存放到你指定的位置。
from tensorflow.examples.tutorials.mnist import input_data
import matplotlib.pyplot as plt
mnist = input_data.read_data_sets('MNIST_data',one_hot=True) # MNIST_data指的是存放数据的文件夹路径,one_hot=True 为采用one_hot的编码方式编码标签
#load data
train_X = mnist.train.images #训练集样本
validation_X = mnist.validation.images #验证集样本
test_X = mnist.test.images #测试集样本
#labels
train_Y = mnist.train.labels #训练集标签
validation_Y = mnist.validation.labels #验证集标签
test_Y = mnist.test.labels #测试集标签
print(train_X.shape,train_Y.shape) #输出训练集样本和标签的大小
#查看数据,例如训练集中第一个样本的内容和标签
print(train_X[0]) #是一个包含784个元素且值在[0,1]之间的向量
print(train_Y[0])
#可视化样本,下面是输出了训练集中前20个样本
fig, ax = plt.subplots(nrows=4,ncols=5,sharex='all',sharey='all')
ax = ax.flatten()
for i in range(20):
img = train_X[i].reshape(28, 28)
ax[i].imshow(img,cmap='Greys')
ax[0].set_xticks([])
ax[0].set_yticks([])
plt.tight_layout()
plt.show()
输出为
(55000, 784) (55000, 10) #训练集样本和标签的大小
第一个样本的内容输出较多,省略
[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.] #第一个样本的标签,one-hot编码,只有对应位置的值是1,其余都是0
训练集中前20个样本图形
参考材料