MNIST数据库

编辑
本词条由“0059” 建档。
MNIST数据库是一个大型手写数字模式数据库,MNIST是改良国家标准与技术研究院的英文缩写,英文全称为 Modified National Institute of Standards and Technology。该数据库是美国国家标准与技术研究所提出的标准,旨在使用主要基于神经网络的机器学习来校准和基准化图像识别方法。该数据由预先准备的示例图像组成,系统在此基础上进行训练和测试。MNIS...

MNIST数据库简介

编辑

MNIST数据库是一个大型手写数字模式数据库,MNIST是改良国家标准与技术研究院的英文缩写,英文全称为 Modified National Institute of Standards and Technology。该数据库是美国国家标准与技术研究所提出的标准,旨在使用主要基于神经网络的机器学习来校准和基准化图像识别方法。该数据由预先准备的示例图像组成,系统在此基础上进行训练和测试。MNIST数据库是通过重新设计原始 NIST 20x20 像素黑白样本集而创建的。 NIST 数据库的创建者反过来使用了美国人口普查局的一组样本,其中添加了美国大学生编写的测试样本。 NIST 集中的样本经过归一化、平滑处理并转换为 28x28 像素灰度图像。

MNIST数据库

MNIST数据库包含 60,000 张用于训练的图像和 10,000 张用于测试的图像。一半的训练和测试样本取自 NIST 训练集,另一半取自 NIST 测试集。

结果质量和方法的发展

编辑

一些论文报告了基于多个神经网络集合的系统的高性能;MNIST数据库的数字识别质量与人类水平相当,而对于其他识别任务,特别是路标,甚至是人类水平的两倍。

创建者的原始网页指出,在不进行预处理的情况下,使用简单线性分类器的误差为12%。

2004年,使用三层罗森布拉特感知器的LIRA系统的误差率为0.42%。

对使用随机变形的MNIST训练进行了研究。引入了仿射或弹性变换作为失真。有时,这类系统会取得不错的成绩,特别是有出版物称其误差率为0.39%。

2011年,利用神经网络实现了0.27%的误差率。2013年,有出版物称利用神经网络正则化实现了0.21%的误差率。

后来,单卷积神经网络的应用将质量提高到了0.31%的误差水平。单卷积神经网络的最佳结果是经过74个历元训练后获得的系统,误差率为0.27%。然而,五个卷积神经网络的集合误差率为0.21%。2018年,研究人员使用随机多模型深度学习,报告的错误率为0.18%,比之前的最佳结果有所提高:一种新的集合、深度学习分类方法。

系统比较

编辑

下表收集了不同图像分类系统中机器学习结果的示例:

类型结构缺失预处理错误
线性分类器单级感知器12
线性分类器成对线性分类器对齐7.6
K近邻法具有非线性变形的K-NN方法可移动边缘0.52
梯度提升基于哈氏性状的残差处理哈尔符号0.87
非线性分类器40PCA + 二次分类器3.3
参考向量法虚拟支持向量系统,deg-9 poly,2像素抖动对齐0.56
神经网络2级网络 784-800-101.6
神经网络2级网络 784-800-10弹性变形0.7
深度神经网络6级网络 784-2500-2000-2000-1500-1000-500-10弹性变形0.35
融合神经网络6级网络 784-40-80-500-1000-2000-10扩展训练数据0.31
卷积神经网络6级网络 784-50-100-500-1000-10-10-10扩展训练数据0.27
融合神经网络35个卷积神经网络的集合,1-20-P-40-P-150-10弹性变形归一化0.23
融合神经网络5个卷积神经网络的集合,6级 784-50-100-500-1000-10-10-10扩展训练数据0.21
随机多模型深度学习30个随机深度学习模型0.18

MNIST数据训练样本

编辑

该样本使用 Python 创建神经网络,需要用到的主要库有:TensorFlow、numpy、matplotlib.pyplot ,每一个代码块 = Google Colab 中的一个代码块。

连接数据库

from __future__ import absolute_import, division, print_function, unicode_literals # TensorFlow и tf.keras import tensorflow as tf from tensorflow import keras # Вспомогательные библиотеки import numpy as np import matplotlib.pyplot as plt print(tf.__version__)

MNIST数据

<spanclass="n">d_mnist = keras.datasets.mnist (train_images, train_labels), (test_images, test_labels) = d_mnist.load_data()

加载数据集返回四个 NumPy 数组:

train_images 和 train_labels 数组是训练集,即训练模型的数据。该模型在测试集(即 test_images 和 test_labels 数组)上进行测试。图像是 28x28 NumPy 数组,其中像素值范围从 0 到 255。标签是从 0 到 9 的整数数组。

class_names = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

数据预处理

plt.figure() plt.imshow(train_images[0]) plt.colorbar() plt.grid(False) plt.show()

MNIST数据库

在将这些值输入神经网络之前,我们将它们缩放到 0 到 1 的范围。为此,我们将这些值除以 255。重要的是训练集和测试集的预处理相同:

train_images = train_images / 255.0 test_images = test_images / 255.0

为了确保数据格式正确并且我们准备好构建和训练神经网络,我们将显示训练集中的前 25 张图像,并在它们下面显示它们的类名称。

plt.figure(figsize=(10,10)) for i in range(25): plt.subplot(5,5,i+1) plt.xticks([]) plt.yticks([]) plt.grid(False) plt.imshow(train_images[i], cmap=plt.cm.binary) plt.xlabel(class_names[train_labels[i]]) plt.show()

神经网络架构和训练

model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation='relu'), keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(train_images, train_labels, epochs=10)

该网络的第一层 `tf.keras.layers.Flatten` 将图像格式从二维数组(28 x 28 像素)转换为一维数组(28 * 28 = 784 像素)。该层从图像中提取像素行并将它们排列成一行。该层没有训练参数;它仅重新格式化数据。

分解像素后,神经网络包含两层 `tf.keras.layers.Dense`。这些是完全连接的神经层。第一个 Dense 层由 128 个节点(或神经元)组成。第二个(也是最后一个)10 节点 softmax 层返回一个由 10 个概率分数组成的数组,总和为 1。每个节点都包含一个分数,指示图像属于 10 个类别之一的概率。

MNIST数据库

准确度 - 成功预测的百分比 损失 - 错误的百分比

在训练过程中,神经网络经历了 10 个时期 - 10 个训练周期

关注第一个时代的指标,最后一个时代的指标——第十个时代

预测

predictions = model.predict(test_images) def plot_image(i, predictions_array, true_label, img): predictions_array, true_label, img = predictions_array[i], true_label[i], img[i] plt.grid(False) plt.xticks([]) plt.yticks([]) plt.imshow(img, cmap=plt.cm.binary) predicted_label = np.argmax(predictions_array) if <spanclass="n">predicted_label == true_label: color = 'green' else: color = 'red' plt.xlabel("{} {:2.0f}% ({})".format(class_names[predicted_label], 100*np.max(predictions_array), class_names[true_label]), color=color) def plot_value_array(i, predictions_array, true_label): predictions_array, true_label = predictions_array[i], true_label[i] plt.grid(False) plt.xticks([]) plt.yticks([]) thisplot = plt.bar(range(10), predictions_array, color="#777777") plt.ylim([0, 1]) predicted_label = np.argmax(predictions_array) thisplot[predicted_label].set_color('red') thisplot[true_label].set_color('green') # Отображаем первые X тестовых изображений, их предсказанную и настоящую метки. # Корректные предсказания окрашиваем в синий цвет, ошибочные в красный. num_rows = 15 num_cols = 3 num_images = num_rows*num_cols plt.figure(figsize=(2*2*num_cols, 2*num_rows)) for i in range(num_images): plt.subplot(num_rows, 2*num_cols, 2*i+1) plot_image(i, predictions, test_labels, test_images) plt.subplot(num_rows, 2*num_cols, 2*i+2) plot_value_array(i, predictions, test_labels) plt.show()

MNIST数据库

 

网络响应如下所示:xy% (z) ||| x - 网络响应,y% - 成功预测的百分比,(z) - 正确答案

参考资料

编辑

https://st.anosov.ru/

https://www.tensorflow.org/

百科词条作者:0059,如若转载,请注明出处:https://glopedia.cn/373117/

(16)
词条目录
  1. MNIST数据库简介
  2. 结果质量和方法的发展
  3. 系统比较
  4. MNIST数据训练样本
  5. 连接数据库
  6. MNIST数据
  7. 数据预处理
  8. 神经网络架构和训练
  9. 预测
  10. 参考资料

轻触这里

关闭目录

目录