手写字体识别入门

1.MNIST数据集简介

当学习任意一门计算机语言进行编程时,首先接触的第一个程序就是打印“Hello World”。大家接触每一种编程语言都会有Hello World作为第一个编程任务,在人工智能机器学习领域也不例外。学习人工智能的初学者,通过使用MNIST(Mixed National Institute of Standards and Technology database)手写数字识别任务的练习,来对人工智能TensorFlow进行最初步的应用。
手写数字的MNIST数据集
手写数字的MNIST数据集来自于美国国家标准与技术研究所(NIST),它是一个庞大的手写数字数据库,也是网上著名的公开数据集之一。
包含了60,000个训练示例图片以及10,000个测试图片,数据集的图片分别代表了阿拉伯数字0~阿拉伯数字9中的任意一个数字,图片只包含灰度值信息,规格尺寸为28×28,所以每一张图片就是拥有784(28×28)列的数据,数字位于整张图片的最中央位置,它是NIST提供的更大集合的一个子集。
训练集(training set)由来自250个不同人手写的数字构成,其中50%是高中学生,50%来自人口普查局(the Census Bureau)的工作人员。测试集(test set)也是同样比例的手写数字数据。

数据集有两个功能:

(1)提供了大量的数据作为训练集和测试集,为一些兴趣爱好者和学习者提供了丰富的资源信息。

(2)形成一个业界领域具有一定对比程度的项目,不同的研究者使用了相同的数据集,从而可以更加方便地将结果进行对比,从而验证出哪种设计的程序识别率更高。

数据集里面的数字长这个样子。

2.MNIST数据集组成 

每一张图片包含28像素×28个像素点,可以用一个数字数组来表示这张图片,如图所示。将这个数字数组展开成一个向量,长度是28×28 = 784。数字间的顺序不重要,只要保持各个图片采用相同的方式展开。

MNIST数据集的图片就是在784维向量空间里面的点,并且拥有比较复杂的结构。在MNIST训练数据集中,mnist.train.images是一个形状为[60000, 784]的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片中的像素点。在此张量里的每一个元素,都表示某张图片里的某个像素的强度值,值介于0和1之间,如图所示:

MNIST数据集的标签mnist.train.labels是介于0到9的数字,用来描述给定的训练图片里所表示的数字。标签数据用“one-hot vectors”的形式来表示,所谓的"one-hot"是指一位有效编码,即,我们使用n维度的向量来表示n个类别,这其中,每一个类别都会占据相对独立的一个位置,因此,一个one-hot向量即为除了某一特定位置的数字是1以外,其余各维度数字都是0。数字n将表示成一个只有在第n维度(从0开始)数字为1的10维向量。

例如,数字4的one hot编码就是[0,0,0,0,1,0,0,0,0,0],即从0开始数第5位数字的位置为1,其他位置都是0的编码格式。

因此,mnist.train.labels是一个[60000, 10]的10维度数字矩阵。

 3.数据集下载及展示

数据集可以直接去官网下载,官网地址:MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burgesicon-default.png?t=M276http://yann.lecun.com/exdb/mnist/

下载完成以后,放在要写的Python的同级目录的MNIST_data(这里是为了后面代码中写的路径读取)下面

 接下来可以用以下代码简单看下数据集里面的内容。

# -*- coding: utf-8 -*-


import tensorflow as tf
#导入MNIST数据集,加载相应的数据模块
from tensorflow_core.examples.tutorials.mnist import input_data
#从MNIST_data数据集中读取MNIST数据并使用one hot编码,如果数据不存在,则会自动加载
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
#输出训练集的内容
print('输入数据:',mnist.train.images)
print('输入数据的shape:',mnist.train.images.shape)
print('输入标签的内容',mnist.train.labels)
print('输入标签的shape',mnist.train.labels.shape)

#绘制第100张图片的内容
import  pylab
im = mnist.train.images[100]
#通过reshape函数重新将[784]的张量转化为[28,28]
im = im.reshape(-1,28)
pylab.imshow(im)
pylab.show()

#展示测试集及验证集相关数据信息
print('测试集输入图片的数据',mnist.test.images)
print('测试集输入图片的的shape',mnist.test.images.shape)
print('测试集输入标签的内容',mnist.test.labels)
print('测试集输入标签的shape',mnist.test.labels.shape)
#展示训练集第53张图片张良表示的相关信息
print(mnist.train.images[53,:])
print(mnist.train.labels[53,:])

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值