MNIST数字识别

参考:
http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html
http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_download.html

MNIST数据集

MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片。

MNIST数据集的官网是Yann LeCun’s website

MNIST下载地址和内容:

网址内容
train-images-idx3-ubyte.gz: training set images (9912422 bytes)训练数据图片
train-labels-idx1-ubyte.gz: training set labels (28881 bytes)训练数据答案
t10k-images-idx3-ubyte.gz: test set images (1648877 bytes)测试数据图片
t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes)测试数据答案

下载下来的数据集被分成两部分:60000行的训练数据集(mnist.train)和10000行的测试数据集(mnist.test)。这样的切分很重要,在机器学习模型设计时必须有一个单独的测试数据集不用于训练而是用来评估这个模型的性能,从而更加容易把设计的模型推广到其他数据集上(泛化)。

正如前面提到的一样,每一个MNIST数据单元有两部分组成:一张包含手写数字的图片和一个对应的标签。我们把这些图片设为“xs”,把这些标签设为“ys”。训练数据集和测试数据集都包含xs和ys,比如训练数据集的图片是 mnist.train.images ,训练数据集的标签是 mnist.train.labels。

每一张图片包含28X28=784个像素点。我们可以用一个数字数组来表示这张图片:

这里写图片描述

虽然这个数据集只提供了训练和测试数据,但是为了验证模型训练的效果,一般会从训练数据中划分出一部分数据作为验证(validation)数据。TensorFlow提供了一个类来处理MNIST数据。它会自动下载并转化MNIST数据的格式,将数据从原始的数据包中解析成训练和测试神经网络时使用的格式。


from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("../../datasets/MNIST_data/", one_hot=True)

以上代码会先检查目录中是否存在数据集,如果存在就不再下载直接使用,如果不存在则会从网络下载。

print("Training data size: ", mnist.train.num_examples)
print("Validating data size: ", mnist.validation.num_examples)
print("Testing data size: ", mnist.test.num_examples)

输出:

Training data size:  55000
Validating data size:  5000
Testing data size:  10000

从上面代码可以看出,通过read_data_sets函数生成的类会自动将MNIST数据集划分为train、validation和test三个数据集。其中train这个集合内有55000张图片,validation集合内有5000张图片,这两个组成了训练集。test集合内有10000张图片,这些图片来自MNIST提供的测试数据集。


print("train images shape: ", mnist.train.images.shape)
print("train labels shape: ", mnist.train.labels.shape)

print("validation images shape: ", mnist.validation.images.shape)
print("validation labels shape: ", mnist.validation.labels.shape)

print("test images shape: ", mnist.test.images.shape)
print("test labels shape: ", mnist.test.labels.shape)

输出:

train images shape:  (55000, 784)
train labels shape:  (55000, 10)
validation images shape:  (5000, 784)
validation labels shape:  (5000, 10)
test images shape:  (10000, 784)
test labels shape:  (10000, 10)

上面代码可以看出,在MNIST训练数据集中,mnist.train.images 是一个形状为 [55000, 784] 的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片中的像素点。在此张量里的每一个元素,都表示某张图片里的某个像素的强度值,值介于0和1之间,它表示了颜色的深浅。其中0表示白色背景(background),1表示黑色前景(foreground)。


为了方便使用随机梯度下降,可以从所有训练数据中读取一小部分作为一个训练的batch。如下代码所示:

batch_size = 100
xs, ys = mnist.train.next_batch(batch_size)    # 从train的集合中选取batch_size个训练数据。
print("X shape:", xs.shape)                    
print("Y shape:", ys.shape)

输出:

X shape: (100, 784)
Y shape: (100, 10)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值