MNIST数据集使用详解

article/2025/9/22 19:55:19

数据集下载网址:http://yann.lecun.com/exdb/mnist/
下载后无需解压,将其放在一个文件夹下即可:
在这里插入图片描述
数据说明:
数据集常被分为2~3个部分
训练集(train set):用来学习的一组例子,用来适应分类器的参数[即权重]
验证集(validation set):一组用于调整分类器参数(即体系结构,而不是权重)的示例,例如选择神经网络中隐藏单元的数量
测试集(test set):一组仅用于评估完全指定分类器的性能[泛化]的示例

读取方式:

import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data
mnist_data_folder="/MNIST_data"	#指定数据集所在的位置(见上图存放格式)
mnist=input_data.read_data_sets(mnist_data_folder,one_hot=True)	#读取mnist数据集,指定标签格式one_hot=True#获取数据集的个数
train_nums=mnist.train.num_examples
validation_nums=mnist.validation.num_examples
test_nums=mnist.test.num_examples
print("MNIST训练数据集个数 %d"%train_nums)
print("MNIST验证数据集个数 %d"%validation_nums)
print("MNIST测试数据集个数 %d"%test_nums)#获取数据值
train_data=mnist.train.images   #所有训练数据
val_data=mnist.validation.images    #(5000,784)
test_data=mnist.test.images
print("训练集数据大小:",train_data.shape)
print("一幅图像大小:",train_data[1].shape)
print("一幅图像的列表表示:\n",train_data[1])#获取标签值
train_labels=mnist.train.labels     #(55000,10)
val_labels=mnist.validation.labels  #(5000,10)
test_labels=mnist.test.labels   #(10000,10)
print("训练集标签数组大小L: ",train_labels.shape)
print("一幅图像的标签大小: ",train_labels[1].shape)
print("一幅图像的标签值:",train_labels[1])#批量获取数据和标签  使用 next_batch(batch_size) 
#注意使用改方式时数据是随机读取的,但在同一批次中,数据和标签位置是对应的
batch_size=100  #每次批量训练100幅图像
batch_xs,batch_ys=mnist.train.next_batch(batch_size)
testbatch_xs,testbatch_ys=mnist.test.next_batch(batch_size)
print("使用mnist.train.next_batch(batch_size)批量读取样本")
print("批量随机读取100个样本,数据集大小= ",batch_xs.shape)
print("批量随机读取100个样本,标签集大小= ",batch_ys.shape)
print("批量随机读取100个测试样本,数据集大小= ",testbatch_xs.shape)
print("批量随机读取100个测试样本,标签集大小= ",testbatch_ys.shape)#显示图像
plt.figure()
for i in range(10):im=train_data[i].reshape(28,28)	#训练数据集的第i张图,将其转化为28x28格式#im=batch_xs[i].reshape(28,28)	#该批次的第i张图plt.imshow(im)plt.pause(0.1)	#暂停时间
plt.show()

运行结果:

MNIST训练数据集个数 55000
MNIST验证数据集个数 5000
MNIST测试数据集个数 10000
训练集数据大小: (55000, 784)
一幅图像大小: (784,)
一幅图像的列表表示:[0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.12156864 0.5176471  0.99607850.9921569  0.9960785  0.8352942  0.32156864 0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.082352940.5568628  0.91372555 0.98823535 0.9921569  0.98823535 0.99215690.98823535 0.8745099  0.07843138 0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.48235297 0.9960785  0.9921569  0.99607850.9921569  0.87843144 0.7960785  0.7960785  0.8745099  1.0.8352942  0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.7960785  0.9921569  0.98823535 0.9921569  0.8313726  0.078431380.         0.         0.2392157  0.9921569  0.98823535 0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.16078432 0.95294124 0.878431440.7960785  0.7176471  0.16078432 0.59607846 0.11764707 0.0.         1.         0.9921569  0.40000004 0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.15686275 0.07843138 0.         0.0.40000004 0.9921569  0.19607845 0.         0.32156864 0.99215690.98823535 0.07843138 0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.32156864 0.839215760.12156864 0.4431373  0.91372555 0.9960785  0.91372555 0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.243137270.40000004 0.32156864 0.16078432 0.9921569  0.909804   0.99215690.98823535 0.91372555 0.19607845 0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.59607846 0.9921569  0.99607850.9921569  0.9960785  0.9921569  0.9960785  0.91372555 0.482352970.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.59607846 0.98823535 0.9921569  0.98823535 0.99215690.98823535 0.75294125 0.19607845 0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.243137270.7176471  0.7960785  0.95294124 0.9960785  0.9921569  0.243137270.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.15686275 0.6745098  0.98823535 0.7960785  0.07843138 0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.08235294 0.         0.         0.0.         0.         0.         0.         0.         0.0.7176471  0.9960785  0.43921572 0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.243137270.7960785  0.6392157  0.         0.         0.         0.0.         0.         0.         0.         0.2392157  0.99215690.5921569  0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.08235294 0.83921576 0.75294125 0.0.         0.         0.         0.         0.         0.0.         0.04313726 0.8352942  0.9960785  0.5921569  0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.40000004 0.9921569  0.5921569  0.         0.         0.0.         0.         0.         0.         0.16078432 0.83529420.98823535 0.9921569  0.43529415 0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.16078432 1.0.8352942  0.36078432 0.20000002 0.         0.         0.121568640.36078432 0.6784314  0.9921569  0.9960785  0.9921569  0.55686280.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.6745098  0.98823535 0.99215690.98823535 0.7960785  0.7960785  0.91372555 0.98823535 0.99215690.98823535 0.9921569  0.50980395 0.07843138 0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.08235294 0.7960785  1.         0.9921569  0.99607850.9921569  0.9960785  0.9921569  0.9568628  0.7960785  0.321568640.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.07843138 0.5921569  0.5921569  0.9921569  0.67058825 0.59215690.5921569  0.15686275 0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.         0.        ]训练集标签数组大小L:  (55000, 10)
一幅图像的标签大小:  (10,)
一幅图像的标签值: [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
使用mnist.train.next_batch(batch_size)批量读取样本
批量随机读取100个样本,数据集大小=  (100, 784)
批量随机读取100个样本,标签集大小=  (100, 10)
批量随机读取100个测试样本,数据集大小=  (100, 784)
批量随机读取100个测试样本,标签集大小=  (100, 10)

plots显示:
在这里插入图片描述

在学会怎样读取后,我们可以用一个简单的神经网络来测试一下:

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist_data_folder="/MNIST_data"
mnist=input_data.read_data_sets(mnist_data_folder,one_hot=True)#创建两个占位符,x为输入网络的图像,y_为输入网络的图像类别
x = tf.placeholder("float", shape=[None, 784])
y_ = tf.placeholder("float", shape=[None, 10])#权重初始化函数
def weight_variable(shape):#输出服从截尾正态分布的随机值initial = tf.truncated_normal(shape, stddev=0.1)return tf.Variable(initial)#偏置初始化函数
def bias_variable(shape):initial = tf.constant(0.1, shape=shape)return tf.Variable(initial)#创建卷积op
#x 是一个4维张量,shape为[batch,height,width,channels]
#卷积核移动步长为1。填充类型为SAME,可以不丢弃任何像素点
def conv2d(x, W):return tf.nn.conv2d(x, W, strides=[1,1,1,1], padding="SAME")#创建池化op
#采用最大池化,也就是取窗口中的最大值作为结果
#x 是一个4维张量,shape为[batch,height,width,channels]
#ksize表示pool窗口大小为2x2,也就是高2,宽2
#strides,表示在height和width维度上的步长都为2
def max_pool_2x2(x):return tf.nn.max_pool(x, ksize=[1,2,2,1],strides=[1,2,2,1], padding="SAME")#第1层,卷积层
#初始化W为[5,5,1,32]的张量,表示卷积核大小为5*5,第一层网络的输入和输出神经元个数分别为1和32
W_conv1 = weight_variable([5,5,1,32])
#初始化b为[32],即输出大小
b_conv1 = bias_variable([32])#把输入x(二维张量,shape为[batch, 784])变成4d的x_image,x_image的shape应该是[batch,28,28,1]
#-1表示自动推测这个维度的size
x_image = tf.reshape(x, [-1,28,28,1])#把x_image和权重进行卷积,加上偏置项,然后应用ReLU激活函数,最后进行max_pooling
#h_pool1的输出即为第一层网络输出,shape为[batch,14,14,1]
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)#第2层,卷积层
#卷积核大小依然是5*5,这层的输入和输出神经元个数为32和64
W_conv2 = weight_variable([5,5,32,64])
b_conv2 = weight_variable([64])#h_pool2即为第二层网络输出,shape为[batch,7,7,1]
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)#第3层, 全连接层
#这层是拥有1024个神经元的全连接层
#W的第1维size为7*7*64,7*7是h_pool2输出的size,64是第2层输出神经元个数
W_fc1 = weight_variable([7*7*64, 1024])
b_fc1 = bias_variable([1024])#计算前需要把第2层的输出reshape成[batch, 7*7*64]的张量
h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)#Dropout层
#为了减少过拟合,在输出层前加入dropout
keep_prob = tf.placeholder("float")
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)#输出层
#最后,添加一个softmax层
#可以理解为另一个全连接层,只不过输出时使用softmax将网络输出值转换成了概率
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)#预测值和真实值之间的交叉墒
cross_entropy = -tf.reduce_sum(y_ * tf.log(y_conv))#train op, 使用ADAM优化器来做梯度下降。学习率为0.0001
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)#评估模型,tf.argmax能给出某个tensor对象在某一维上数据最大值的索引。
#因为标签是由0,1组成了one-hot vector,返回的索引就是数值为1的位置
correct_predict = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))#计算正确预测项的比例,因为tf.equal返回的是布尔值,
#使用tf.cast把布尔值转换成浮点数,然后用tf.reduce_mean求平均值
accuracy = tf.reduce_mean(tf.cast(correct_predict, "float"))train_data=mnist.train.images
train_labels=mnist.train.labels
test_data=mnist.test.images
test_labels=mnist.test.labelsbatch_size=100  #每次批量训练100幅图像
batch_xs,batch_ys=mnist.train.next_batch(batch_size)    #随机抓取训练数据中的100个批处理数据点
test_xs,test_ys=mnist.test.next_batch(batch_size)with tf.Session() as sess:sess.run(tf.global_variables_initializer()) #初始化变量for i in range(2000):  #开始训练模型,循环2000次,每次传入一张图像sess.run(train_step,feed_dict={x:[train_data[i]], y_:[train_labels[i]], keep_prob:0.5})if(i%100==0):   #每100次,传入一个批次的测试数据,计算其正确率print(sess.run(accuracy, feed_dict={x: test_xs, y_: test_ys, keep_prob: 1.0}))"""
也可以批量导入训练,注意使用mnist.train.next_batch(batch_size),得到的批次数据每次都会自动随机抽取这个批次大小的数据
with tf.Session() as sess:sess.run(tf.global_variables_initializer()) #初始化变量for i in range(200):  #开始训练模型,循环200次,每次传入一个批次的图像sess.run(train_step,feed_dict={x:batch_xs, y_:batch_ys, keep_prob:0.5})if(i%20==0):   #每20次,传入一个批次的测试数据,计算其正确率print(sess.run(accuracy, feed_dict={x: test_xs, y_: test_ys, keep_prob: 1.0}))
"""

运行结果:

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
0.12
0.4
0.54
0.54
0.61
0.7
0.73
0.84
0.77
0.8
0.8
0.86
0.88
0.85
0.88
0.88
0.85
0.92
0.89
0.84

参考:
train set、 validation set 、test set三者的概念
MNIST手写数字数据集读取方法


http://chatgpt.dhexx.cn/article/c3JLrmaI.shtml

相关文章

详解 Pytorch 实现 MNIST

MNIST虽然很简单,但是值得我们学习的东西还是有很多的。 项目虽然简单,但是个人建议还是将各个模块分开创建,特别是对于新人而言,模块化的创建会让读者更加清晰、易懂。 CNN模块:卷积神经网络的组成;trai…

十分钟搞懂Pytorch如何读取MNIST数据集

前言 本文用于记录使用pytorch读取minist数据集的过程,以及一些思考和疑惑吧… 正文 在阅读教程书籍《深度学习入门之Pytorch》时,文中是如此加载MNIST手写数字训练集的: train_dataset datasets.MNIST(root./MNIST,trainTrue,transform…

torchvision中datasets.MNIST介绍

用法介绍 torchvision中datasets中所有封装的数据集都是torch.utils.data.Dataset的子类,它们都实现了__getitem__和__len__方法。因此,它们都可以用torch.utils.data.DataLoader进行数据加载。以datasets.MNIST类为例,具体参数和用法如下所示…

万物皆用MNIST---MNIST数据集及创建自己的手写数字数据集

刚刚接触到人工智能的我们,必定会遇到一个非常非常非常熟悉的朋友------MNIST 这是一套流行的手写数字图片,常常被用来测试我们的思想和算法。这个数据集称为手写数字的MNIST数据库,从研究员Yann LeCun 的网站,可以得到这个…

Pytorch 之 MNIST 数据集实现

目录 1. 数据集介绍2. 代码2. 读代码(个人喜欢的顺序)2.1. 导入模块部分:2.2. Main 函数: 1. 数据集介绍 一般而言,MNIST 数据集测试就是机器学习和深度学习当中的"Hello World"工程。几乎是所…

MNIST数据集手写数字识别(CNN)

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

MNIST数据集详解及可视化处理(pytorch)

MNIST数据集详解及可视化处理(pytorch) MNIST 数据集已经是一个被”嚼烂”了的数据集, 作为机器学习在视觉领域的“hello world”,很多教程都会对它”下手”, 几乎成为一个 “典范”。 不过有些人可能对它还不是很了解, 下面来介绍一下。 MN…

Mnist数据集介绍

Mnist数据集已经是一个被"嚼烂"了的数据集了,很多关于神经网络的教程都会对它下手。因此在开始深度学习之前,先对这个数据集介绍一下。 Mnist数据集图片格式介绍 Mnist数据集分为两部分,分别含有60000张训练图片和10000张测试图片…

使用MNIST数据集

首先,必须向各位强调的是:该数据集名字叫MNIST,而非MINIST~ 我之前就一直弄错了! 哈哈~ 网上有很多使用MNIST数据集的教程,要么太麻烦,要么需要翻墙下载,很慢。 在这里分…

Fashion MNIST进行分类

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

MNIST数据集简介与使用

MNIST数据集简介 MNIST数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST)。训练集(training set)由来自250个不同人手写的数字构成,其中50%是高中学生,50%来自人口普查局(t…

详解 MNIST 数据集

MNIST 数据集已经是一个被”嚼烂”了的数据集, 很多教程都会对它”下手”, 几乎成为一个 “典范”. 不过有些人可能对它还不是很了解, 下面来介绍一下. MNIST 数据集可在 http://yann.lecun.com/exdb/mnist/ 获取, 它包含了四个部分: Training set images: train-images-idx3-…

Mnist数据集简介

MNIST是一个手写体数字的图片数据集,该数据集来由美国国家标准与技术研究所(National Institute of Standards and Technology (NIST))发起整理,一共统计了来自250个不同的人手写数字图片,其中50%是高中生,…

[转]MNIST机器学习入门

MNIST机器学习入门 转自:http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html?plg_nld1&plg_uin1&plg_auth1&plg_nld1&plg_usr1&plg_vkey1&plg_dev1 这个教程的目标读者是对机器学习和TensorFlow都不太了解的新手。如…

从手写数字识别入门深度学习丨MNIST数据集详解

就像无数人从敲下“Hello World”开始代码之旅一样,许多研究员从“MNIST数据集”开启了人工智能的探索之路。 MNIST数据集(Mixed National Institute of Standards and Technology database)是一个用来训练各种图像处理系统的二进制图像数据…

Pytorch入门--详解Mnist手写字识别

1 什么是Mnist? Mnist是计算机视觉领域中最为基础的一个数据集。 MNIST数据集(Mixed National Institute of Standards and Technology database)是美国国家标准与技术研究院收集整理的大型手写数字数据集,包含了60,000个样本的训练集以及10…

MNIST数据集

一、MNIST数据集介绍 MNIST数据集是NIST(National Institute of Standards and Technology,美国国家标准与技术研究所)数据集的一个子集,MNIST 数据集可在 http://yann.lecun.com/exdb/mnist/ 获取,主要包括四个文件&…

面试官: 你知道 JWT、JWE、JWS 、JWK嘛?

想起了 之前做过的 很多 登录授权 的项目 它相比原先的session、cookie来说,更快更安全,跨域也不再是问题,更关键的是更加优雅 ,所以今天总结了一篇文章来介绍他 JWT 指JSON Web Token,如果在项目中通过 jjwt 来支持 J…

java jwe/jws_一篇文章带你分清楚JWT,JWS与JWE

随着移动互联网的兴起,传统基于session/cookie的web网站认证方式转变为了基于OAuth2等开放授权协议的单点登录模式(SSO),相应的基于服务器session浏览器cookie的Auth手段也发生了转变,Json Web Token出现成为了当前的热门的Token Auth机制。 …

JWS实现WebService

WebService估计大家都有听过或者使用过。Java有几种常用的方式实现webservice,本文主要是讨论JWS实现。 什么是webservice 简单而言,webservice就是通过SOAP协议在Web上提供的服务,使用WSDL文件进行说明。其特点是走SOAP协议而不是http协议&…