一.什么是MNIST?
简单的说,mnist就是一个手写数字的数据集。
你可以用如下的代码下载mnist
from tensorflow.examples.tutorials.mnist import input_data
# 载入数据集,如果根目录有就调用,没有就下载
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
不过这种方式受限于网络,有时下载时会出现访问失败的情况,所以 MNIST数据集我度盘分享了下,有需要的朋友可以来这下 载:链接: https://pan.baidu.com/s/1-IQaA3qgwCv4tv7QyQ4F7A 密码: xvfv
文件夹中共有4个文件,分别是训练图片数据、训练图片的标签、测试的图片数据、测试图片的标签。
训练图片共60000张(这部分又可以分为55000训练图片和5000张验证图片),供开发者训练模型,测试图片共10000张,供开发者测试你训练出来的模型的性能。
二.用代码来帮助我们了解MNIST
我们先来看下各个部分的形状,代码如下:
from tensorflow.examples.tutorials.mnist import input_data
# 载入数据集,如果根目录有就调用,没有就下载
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
print('训练数据集')
print(mnist.train.images.shape)
print(mnist.train.labels.shape)
print('验证数据集')
print(mnist.validation.images.shape)
print(mnist.validation.labels.shape)
print('测试数据集')
print(mnist.test.images.shape)
print(mnist.test.labels.shape)
输出结果如下:
训练数据集
(55000, 784)
(55000, 10)
验证数据集
(5000, 784)
(5000, 10)
测试数据集
(10000, 784)
(10000, 10)
接下来,我们解释下输出的结果,我们看见,6个结果的前一个数字就是我上面说的数字,我们重点说下784,784开根号就是28,没错,一张图片是由28*28的像素点组成的,为方便理解,我将一张图片的向量打印出来
print(mnist.train.images[0,:].reshape(28*28))
额。。比较遗憾他没有按照28*28的样子打印,所以我从网上找了张样张
大概就是这样子,黑色是1白色是0,介于黑白之间的灰色就是0.几。
我尝试下载一种图片下来,代码如下:
from tensorflow.examples.tutorials.mnist import input_data
import scipy.misc
# 载入数据集,如果根目录有就调用,没有就下载
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
image=mnist.train.images[0,:].reshape(28,28)
filename='mnist0.jpg'
scipy.misc.toimage(image,cmin=0.0,cmax=1.0).save(filename)
恩,这是一个7
接下来解释下10,图片数据是0-9嘛,所以至少需要10种标记,而mnist数据集用的是10维的向量,这种10维的向量是原先类别号的独热表示。
独热码,在英文文献中称做 one-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。(摘自百度百科,不懂得可以去自己了解下)
百科上还有个例子:例如,有6个状态的独热码状态编码为:000001,000010,000100,001000,010000,100000。
我们用代码看一下mnist的独热:
print(mnist.train.labels[0,:])
[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
可以看见下标为7的位置数字是1,而其他位置都是0,正好符合上面我下载的第一个图片显示是7
我又打印了前10个独热,希望对大家的理解有帮助
[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
注:本文为作者原创,转载请注明出处!