ML(一)——有关MNIST的那些事

本文深入解析MNIST手写数字数据集,包含60000张训练图片和10000张测试图片,每张图片由28x28像素组成。文章通过代码演示数据集的结构,包括图像的形状和标签的独热编码形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.什么是MNIST?

     简单的说,mnist就是一个手写数字的数据集。

     你可以用如下的代码下载mnist

from tensorflow.examples.tutorials.mnist import input_data
# 载入数据集,如果根目录有就调用,没有就下载
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

       不过这种方式受限于网络,有时下载时会出现访问失败的情况,所以 MNIST数据集我度盘分享了下,有需要的朋友可以来这下 载:链接: https://pan.baidu.com/s/1-IQaA3qgwCv4tv7QyQ4F7A 密码: xvfv

       文件夹中共有4个文件,分别是训练图片数据、训练图片的标签、测试的图片数据、测试图片的标签。

       训练图片共60000张(这部分又可以分为55000训练图片和5000张验证图片),供开发者训练模型,测试图片共10000张,供开发者测试你训练出来的模型的性能。

      

二.用代码来帮助我们了解MNIST

我们先来看下各个部分的形状,代码如下:

from tensorflow.examples.tutorials.mnist import input_data

# 载入数据集,如果根目录有就调用,没有就下载
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

print('训练数据集')
print(mnist.train.images.shape)
print(mnist.train.labels.shape)
print('验证数据集')
print(mnist.validation.images.shape)
print(mnist.validation.labels.shape)
print('测试数据集')
print(mnist.test.images.shape)
print(mnist.test.labels.shape)

输出结果如下:

训练数据集
(55000, 784)
(55000, 10)
验证数据集
(5000, 784)
(5000, 10)
测试数据集
(10000, 784)
(10000, 10)

接下来,我们解释下输出的结果,我们看见,6个结果的前一个数字就是我上面说的数字,我们重点说下784,784开根号就是28,没错,一张图片是由28*28的像素点组成的,为方便理解,我将一张图片的向量打印出来

print(mnist.train.images[0,:].reshape(28*28))

额。。比较遗憾他没有按照28*28的样子打印,所以我从网上找了张样张

大概就是这样子,黑色是1白色是0,介于黑白之间的灰色就是0.几。

我尝试下载一种图片下来,代码如下:

from tensorflow.examples.tutorials.mnist import input_data
import scipy.misc

# 载入数据集,如果根目录有就调用,没有就下载
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

image=mnist.train.images[0,:].reshape(28,28)
filename='mnist0.jpg'
scipy.misc.toimage(image,cmin=0.0,cmax=1.0).save(filename)

恩,这是一个7

接下来解释下10,图片数据是0-9嘛,所以至少需要10种标记,而mnist数据集用的是10维的向量,这种10维的向量是原先类别号的独热表示。

独热码,在英文文献中称做 one-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。(摘自百度百科,不懂得可以去自己了解下)

百科上还有个例子:例如,有6个状态的独热码状态编码为:000001,000010,000100,001000,010000,100000。

我们用代码看一下mnist的独热:

print(mnist.train.labels[0,:])
[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]

可以看见下标为7的位置数字是1,而其他位置都是0,正好符合上面我下载的第一个图片显示是7

我又打印了前10个独热,希望对大家的理解有帮助

[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]

注:本文为作者原创,转载请注明出处!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值