作者:lovely尤研君2007 | 来源:互联网 | 2023-09-15 06:59
一.MNIST数据集当我们开始学习编程的时候,第一件事往往是学习打印HelloWorld。就好比编程入门有HelloWorld,机器学习入门有MNIST。MNIST是一个入
一.MNIST数据集
当我们开始学习编程的时候,第一件事往往是学习打印"Hello World"。就好比编程入门有Hello World,机器学习入门有MNIST。
MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片:
它也包含每一张图片对应的标签,告诉我们这个是数字几。比如,上面这四张图片的标签分别是5,0,4,1。
为了便于下载MNIST数据集,执行下面的python代码【需要提前安装好tensorflow】可以将该数据集下载到本地:
from tensorflow.examples.tutorials.mnist import input_data# mn.SOURCE_URL = "http://yann.lecun.com/exdb/mnist/"
my_mnist = input_data.read_data_sets("C:/Users/Administrator/MNIST_data_bak/", one_hot=True)
下载下来的数据集被分为两部分:60000行的训练数据集【mnist.train】和10000行的测试数据集【mnist.test】。这样的切分很重要,在机器学习模型设计时必须有一个单独的测试数据集不是用于训练模型,而是用于评估模型的性能,从而更加容易地把设计的模型推广到其它数据集上【泛化能力】。
每一个MNIST数据单元由两部分组成:一张包含手写数字的图片和一个对应的标签。我们把这些图片设为xs,把这些标签设为ys。训练数据集和测试数据集都包含xs和ys,比如训练数据集的图片是mnist.train.images,训练数据集的标签是mnist.train.labels。
每张图片包含2828个像素点。我们可以用一个数字数组来表示这张图片:
我们把这个数组展开成一个向量,长度是2828=784。如何展开这个数组【数字间的顺序】并不重要,只需保证各个图片的展开方式相同。从这个角度来看,MNIST数据集的图片就是在784维向量空间里面里面的点,并且拥有比较复杂的结构【此类数据的可视化是计算密集型】。
展开图片的数字数组会丢失图片的二维结构信息。这显然是不理想的,最优秀的计算机视觉方法会挖掘并利用这些结构信息。但在此处我们忽略这些结构,所介绍的简单数学模型,softmax回归【softmax regression】不会利用这些结构信息。
因此,在MNIST训练数据集中,mnist.train.images是一个形状为[60000, 784]的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片中的像素点。在此张量里的每一个元素,都表示某张图片里的某个像素的强度值,介于0~1之间。