基于 tensorflow 的手写数字的识别(简单版本)
本系列将分为 8 篇 。本次为第 5 篇 ,结合上一篇的应用实例 ,将前边学到一些基础知识用到手写数字的识别分类上 。
1.关于 MNIST 数据集
首先 ,我们得了解 MNIST 数据集 。这是一个手写数字数据集 ,在深度学习入门学习中极具代表性 。可以从官网下载该数据集 ,但事实上 TensorFlow 中提供了一个类来处理 MNIST 数据 ,这个类会自动下载并转化格式 ,将数据从原始的数据包中解析成训练和测试神经网络时使用的格式 ,具体相关函数在接下来代码中介绍 。
MNIST 数据集被分为训练数据集(60000张手写数字图片)和测试数据集(10000张手写数字图片)。
每一张图片包含 2828 个像素 ,图片里的某个像素的强度值介于0-1之间。例如 ,数字 1 对应一个 2828 像素图片 ,其像素强度如下 :
我们把这一个数组展开成一个向量 ,长度是 28*28=784 。因此在MNIST训练数据集中 mnist.train.images 是一个形状为 [60000, 784] 的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片中的像素点。
2.one-hot 向量和 Softmax 函数
MNIST 数据集标签为 0-9 十个数字 ,我们用 one-hot 向量来表示 。以MNIST 数据集为例 ,one-hot 向量指的是除了某一位数字为 1 ,其他维度都为 0 ,比如数字 1 对应 [0,1,0,0,0,0,0,0,0,0] 。
那么我们就可以得到数据集中对应的标签(labels)是若干个 one-hot 向量组成的矩阵 。以训练集为例 ,是一个 [60000,10] 的数字矩阵 。