MNIST数据集简介与使用

探索MNIST手写数字数据集:基础介绍与TensorFlow应用
本文详细介绍了MNIST数据集的来源、构成,以及如何使用TensorFlow进行数据加载。涵盖了训练集、测试集的特征、标签表示以及数据预处理过程。
该文章已生成可运行项目,

MNIST数据集简介

  MNIST数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST)。训练集(training set)由来自250个不同人手写的数字构成,其中50%是高中学生,50%来自人口普查局(the Census Bureau)的工作人员。测试集(test set)也是同样比例的手写数字数据,但保证了测试集和训练集的作者集不相交。

  MNIST数据集一共有7万张图片,其中6万张是训练集,1万张是测试集。每张图片是 28 × 28 28\times 28 28×28 0 − 9 0-9 09的手写数字图片组成。每个图片是黑底白字的形式,黑底用0表示,白字用0-1之间的浮点数表示,越接近1,颜色越白。

  将 28 × 28 28\times 28 28×28维的图片矩阵拉直,转化为 1 × 784 1\times 784 1×784维的向量不影响理解:

[ 0 , 0 , 0 , 0.345 , 0.728 , 0.310 , 0.402 , 0 , 0 , 0 , ⋯   , 0 , 0 , 0 ] [0,0,0,0.345,0.728,0.310,0.402,0,0,0,\cdots,0,0,0] [0,0,0,0.345,0.728,0.310,0.402,0,0,0,,0,0,0]

  图片的标签以一维数组的one-hot编码形式给出:

[ 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 ] [0,0,0,0,0,1,0,0,0,0] [0,0,0,0,0,1,0,0,0,0]每个元素表示图片对应的数字出现的概率,显然,该向量标签表示的是数字 5 5 5

  MNIST数据集下载地址是http://yann.lecun.com/exdb/mnist/,它包含了 4 4 4个部分:

  • 训练数据集:train-images-idx3-ubyte.gz (9.45 MB,包含60,000个样本)。
  • 训练数据集标签:train-labels-idx1-ubyte.gz(28.2 KB,包含60,000个标签)。
  • 测试数据集:t10k-images-idx3-ubyte.gz(1.57 MB ,包含10,000个样本)。
  • 测试数据集标签:t10k-labels-idx1-ubyte.gz(4.43 KB,包含10,000个样本的标签)。

使用TensorFlow导入数据集

  在这里,使用Jupyter NoteBook来运行有关MNIST数据集的程序实现。

代码实现

  1. 使用TensorFlow读取数据集。
    注意事项: 亲自实验的时候,使用上述代码,原本应该是需要下载,但下载不动。提前下载好,直接放到正确地址下也是可以的。
import tensorflow.examples.tutorials.mnist.input_data as input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=False)
'''
Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
'''
  1. 打印MNIST数据集中的一些信息。
print("MNIST数据集的类型是: %s'" % (type(mnist)))
print("训练集的数量是:%d" % mnist.train.num_examples)
print("验证集的数量是:%d" % mnist.validation.num_examples)
print("测试集的数量是:%d" % mnist.test.num_examples)
'''
MNIST数据集的类型是: <class 'tensorflow.contrib.learn.python.learn.datasets.base.Datasets'>'
训练集的数量是:55000
验证集的数量是:5000
测试集的数量是:10000
'''
  1. 将所有数据集,加载为数组形式,方便之后的使用。
train_img = mnist.train.images
train_label = mnist.train.labels
test_img = mnist.test.images
test_label = mnist.test.labels

print("Type of training is %s" % (type(train_img )))
print("Type of trainlabel is %s" % (type(train_label )))
print("Type of testing is %s" % (type(test_img )))
print("Type of testing is %s" % (type(test_label )))
'''
Type of training is <class 'numpy.ndarray'>
Type of trainlabel is <class 'numpy.ndarray'>
Type of testing is <class 'numpy.ndarray'>
Type of testing is <class 'numpy.ndarray'>
'''
  1. 获取前10MNSIT数据集的图片形式,如下图所示:
import numpy as np
import matplotlib.pyplot as plt

for i in range(10):
    img = np.reshape(train_img [i, :], (28, 28))
    label = np.argmax(train_img [i, :])
    plt.matshow(img, cmap = plt.get_cmap('gray'))
    plt.show()
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  可以看到,读取的数据是从MNIST数组开头开始的,但数字便签并不是从0开始,是随机的、无序的。

   to be continued…

本文章已经生成可运行项目
资源下载链接为: https://pan.quark.cn/s/d0b0340d5318 MNIST 数据集是机器学习领域常用的基准数据集之一,用于手写数字识别任务。以下是常见的四种 MNIST 数据集格式及其获取方式: MNIST 数据集的 .npz 格式 这种格式的数据集通常以压缩文件的形式提供,包含训练集和测试集的数据及标签。可以通过访问 https://s3.amazonaws.com/img-datasets 下载。该格式方便直接加载到 Python 等编程环境中使用,适合快速进行数据处理和模型训练。 MNIST 数据集的二进制版本 二进制格式的 MNIST 数据集是原始的、未经压缩的格式,数据以二进制文件的形式存储。可以从 http://yann.lecun.com/exdb/mnist3 获取。这种格式适合需要直接处理原始数据的场景,但读取时需要编写相应的解析代码。 MNIST 数据集的 .pkl.gz 格式 .pkl.gz 格式是经过 Python 的 pickle 模块序列化并压缩后的数据集。它可以直接在 Python 环境中加载使用,适合 Python 的机器学习框架(如 TensorFlow 或 PyTorch)配合使用MNIST 数据集的图片集格式 这种格式的数据集是通过将 .npz 格式的数据集转换而来的。转换后的数据集以图片的形式存储,分为训练集和测试集两个文件夹。训练集文件夹包含 60,000 张训练图片,测试集文件夹包含 10,000 张测试图片。每张图片对应一个手写数字,这种格式便于进行可视化分析和直接处理图片数据。 如果需要下载上述数据集,请确保链接的合法性,并在网络状态良好的情况下尝试访问。如果遇到问题,建议检查链接是否正确或稍后重试。
03-08
### MNIST 数据集使用教程和示例代码 #### 加载预处理MNIST数据集 为了有效地使用MNIST数据集,在开始之前需要加载并预处理这些数据。通过`tensorflow.keras.datasets.mnist.load_data()`可以方便地获取MNIST手写数字图像及其标签[^1]。 ```python from tensorflow.keras.datasets import mnist (train_images, train_labels), (test_images, test_labels) = mnist.load_data() train_images = train_images / 255.0 test_images = test_images / 255.0 ``` 这段代码实现了MNIST数据集的下载以及将像素值缩放到\[0, 1\]区间内的操作,使得后续模型训练更加稳定高效。 #### 构建简单卷积神经网络(CNN) 基于TensorFlow框架下,可以通过如下方式快速搭建一个基础版CNN架构来识别手写字体: ```python import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout model = Sequential([ Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)), MaxPooling2D(pool_size=(2, 2)), Dropout(0.2), Flatten(), Dense(128, activation='relu'), Dropout(0.5), Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) history = model.fit(train_images[..., None], train_labels, epochs=5, validation_split=0.1) ``` 此部分展示了如何创建一个多层感知机结构,并对其进行配置以适应分类任务需求;同时设置了Adam作为优化方法、交叉熵作为损失度量标准。 #### 训练过程中的注意事项 当执行`model.fit(...)`命令时,除了提供必要的输入参数外,还可以设置其他选项如批次大小(batch size),轮次数(epochs)等超参调优项。此外,建议保留一定比例的数据用于验证集上监控泛化能力,避免过拟合现象的发生。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值