欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MNIST导入图片数据集

程序员文章站 2024-03-14 21:21:59
...
一 MNIST简介
MNIST是一个入门级的计算机视觉数据集。当我们开始学习编程时,第一件事往往是学习打印Hello World。在机器学习入门的领域里,我们会用MNIST数据集来实验各种模型。
MNIST里包含各种手写数字图片。
也包含每张图片对应的标签,告诉我们这个数字几。
MNIST数据集合的官网是
MNIST导入图片数据集

二 MNIST编程一般步骤
1 导入MNIST数据集
2 分析MNIST样本特点定义变量
3 构建模型
4 训练模型并输出中间状态参数
5 测试模型
6 保存模型
7 读取模型

三 下载并安装MNIST数据集
1 实例
利用TensorFlow代码下载MNIST
TensorFlow提供了一个库,可以直接用来自动下载与安装MNIST
2 代码
'''
下面两行代码会自动下载数据集并将文件解压到当前代码所在同级目录下的MNIST_data文件夹下。
代码中的one_hot=True,表示将样本标签转化为one_hot编码。
举例来解释one_hot编码:假如一共有10类:0的one_hot为1000000000,1的ont_hot为0100000000,2的one_hot为0010000000,依次类推。只要有一个位为1,1所在的位置就代表着第几类。
'''
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
print ('输入数据:',mnist.train.images)
print ('输入数据打印shape:',mnist.train.images.shape)
import pylab
im = mnist.train.images[1]
im = im.reshape(-1,28)
pylab.imshow(im)
pylab.show()
print ('输入数据打印shape:',mnist.test.images.shape)
print ('输入数据打印shape:',mnist.validation.images.shape)
3 运行结果
MNIST导入图片数据集
4 说明
MNIST数据集中的图片是28X28 Pixel,所以,每一幅图就是1行784(28X28)列的数据,括号中的每一个值代表一个像素。
如果是黑白的图片,图片中的黑色地方数值为0:有图案的地方,数值为0~255之间的数字,代表其颜色的深度。
如果是彩色的图片,一个像素会由3个值来表示RGB(红、黄、蓝)。
刚开始打印的信息是解压数据集的意思。如果是第一次运行,还会显示下载数据的相关信息。
接着打印出来的是训练集的图片信息,是一个55000行、784列的矩阵。即训练集里有55000张图片。
测试数据集里有10000条样本图片,验证数据集里有5000张图片。

四 MNIST数据集的组成
在MNIST训练数据集中,mnist.train.images是一个形状为[55000,784]的张量。其中,第1个维度数字用来索引图片,第2个维度数字用来索引每张图片中的像素点。此张量里的每一个元素,都表示某张图片里的某个像素的强度值,值介入0~255之间。
MNIST里包含3个数据集:第一个是训练数据集,另外两个是测试数据集(mnist.test.images)和验证数据集(mnist.validation.images)
在实际的机器学习模型设计时,样本一般分3部分
  • 一部分用于训练
  • 一部分用于评估训练过程中的准确度(测试数据集)
  • 一部分用于评估最终模型的准确度(验证数据集)
训练过程中,模型并没有遇到过验证数据集中的数据,所以利用验证数据集可以评估出模型的准确度。这个准确度越高,代码模型的泛化能力越强。
另外,这3个数据集还有分别对应的3个文件(标签文件),用来标注每个图片上的数字是几。把图片和标签放在一起,称为“样本”。通过样本就可以实现一个有监督信号的深度学习。
相对应的,MNIST数据集的标签是介于0~9之间的数字,用来描述给定图片里表示的数字。标签数据是“one-hot vectors":一个one-hot向量,除了某一位的数字是1外,其余各维数字都是0.例如标签0将表示为([1,0,0,0,0,0,0,0,0,0])。因此mnist.train.labels是一个[55000,10]的数字矩阵。




相关标签: MNIST