前言
提示:
1、本案例采用Keras,全连接神经网络相关知识实现,请读者自行了解,本文不再详细叙述;
2、本案例使用开源数据集Mnist(手写数字识别数据集),如果无法下载数据集,可尝试使用以下办法:
- 从百度网盘下载数据集文件mnist.npz,保存在本地(假设保存在D:\mydatasets\文件夹下)
百度网盘下载地址:
https://pan.baidu.com/share/init?surl=27CSAC9Ng6wFYdUI0WXIww
提取码:2gsh
以下是本篇文章正文内容,下面案例仅供参考
一、MNIST数据集是什么?
MNIST 数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST)。训练集 (training set) 由来自 250 个不同人手写的数字构成,其中 50% 是高中学生,50% 来自人口普查局 (the Census Bureau) 的工作人员。测试集(test set) 也是同样比例的手写数字数据。
数据集包含60,000个用于训练的示例和10,000个用于测试的示例。MNIST 数据集包含了四个部分:
- Training set images: train-images-idx3-ubyte.gz (包含 60,000 个样本)
- Training set labels: train-labels-idx1-ubyte.gz (包含 60,000 个标签)
- Test set images: t10k-images-idx3-ubyte.gz (包含 10,000 个样本)
- Test set labels: t10k-labels-idx1-ubyte.gz (包含 10,000 个标签)
训练数据集包含 60,000 个样本,测试数据集包含 10,000 样本。在 MNIST 数据集中的每张图片由 28 x 28 个像素点构成,每个像素点用一个灰度值表示。存储在28 x 28 的二维数组中,将这些像素展开为一个每行 784 个值的一维的行向量,每行就是代表了一张图片。
二、构建神经网络训练模型
1.导入库
导入Keras库:layers,models,datasets,utils
Dense方法,Sequential方法,utils.np_utils方法
代码如下(示例):
from keras.layers import Dense
from keras.models import Sequential
from keras.datasets import mnist
from keras.utils import np_utils
2.载入数据
使用以下代码加载Mnist手写数字识别数据集数据(注意红色部分改变为你刚才存储的文件路径)"D:\mydatasets\mnist.npz"
代码如下(示例):
mnist = tf.keras.datasets.mnist
# "D:\mydatasets\mnist.npz" 是Mnist手写数字识别数据集文件所在路径
(x_train,y_train),(x_test,y_test) = mnist.load_data("D:\mydatasets\mnist.npz")
由于数据集包含60,000个用于训练的示例和10,000个用于测试的示例,即训练集中存在60000个样本,测试集中存在10000个样本,其中每一个样本均为28 x 28像素的图片。
由此得知,
- x_train.shape: (60000, 28, 28)
x_test.shape:(10000, 28, 28)
y_train.shape:(60000,) # 训练集标签
y_test.shape:(10000,) # 测试集标签
3.数据处理
样本像素展开
- 以训练集为例,对每一个样本进行像素展开(降维),得到 784 个值的一维的行向量,每行就是代表了一张图片,此时将得到一个行代表每一个图片样本,列代表样本个数的(60000, 784)的二维数组。
数据归一化处理
- 在 MNIST 数据集中的每张图片由 28 x 28 个像素点构成,每个像素点用一个灰度值表示。因此对每个像素进行归一化处理,有助于后续可以加快梯度下降的求解速度,即提升模型的收敛速度,从而优化模型训练速度,减少错误率(error),并提高模型识别精度(accuracy)。
标签转换独热编码
-
对标签数据转换为分类的 one-hot (独热)编码。
原理:One-Hot编码,又称为一位有效编码,主要是采用位状态寄存器来对个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。独热编码是利用0和1表示一些参数,使用N位状态寄存器来对N个状态进行编码。
简单来说:
数字字体识别0~9中,独热编码分别为
0:1000