minist 简介

在机器学习入门的领域里,我们会用MNIST数据集来实验各种模型。MNIST里包含各种手写数字图片。也包含每张图片对应的标签,告诉我们这个数字几。(MNIST数据集来自美国国家标准与技术研究所,NationalInstituteofStandardsandTechnology(NIST)。训练集(trainingset)由来自250个不同人手写的数字构成,…

大家好,又见面了,我是你们的朋友全栈君。

       在机器学习入门的领域里,我们会用MNIST数据集来实验各种模型。MNIST里包含各种手写数字图片。也包含每张图片对应的标签,告诉我们这个数字几。(MNIST 数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST)。 训练集 (training set) 由来自 250 个不同人手写的数字构成, 其中 50% 是高中学生, 50% 来自人口普查局 (the Census Bureau) 的工作人员。 测试集(test set) 也是同样比例的手写数字数据。

MNIST数据集合的官网是 http://yann.lecun.com/exdb/mnist/

  • Training set images: train-images-idx3-ubyte.gz (9.9 MB, 解压后 47 MB, 包含 60,000 个样本)
  • Training set labels: train-labels-idx1-ubyte.gz (29 KB, 解压后 60 KB, 包含 60,000 个标签)
  • Test set images: t10k-images-idx3-ubyte.gz (1.6 MB, 解压后 7.8 MB, 包含 10,000 个样本)
  • Test set labels: t10k-labels-idx1-ubyte.gz (5KB, 解压后 10 KB, 包含 10,000 个标签)

每张图片都经过了大小归一化和居中处理.该数据集的图片是一个黑白的单通道图片,其中图片如下: 

minist 简介

说明

       MNIST数据集中的图片是28X28Pixel,故每一幅图就是1行784(28X28)列的数据,括号中的每一个值代表一个像素。
如果是黑白的图片,图片中的黑色地方数值为0:有图案的地方,数值为0~255之间的数字,代表其颜色的深度。
如果是彩色的图片,一个像素会由3个值来表示RGB(红、黄、蓝)。
刚开始打印的信息是解压数据集的意思。如果是第一次运行,还会显示下载数据的相关信息。接着打印出来的是训练集的图片信息,是一个55000行、784列的矩阵。
训练样本:共60000个,其中55000个用于训练,另外5000个用于验证 
测试样本:共10000个

MNIST数据集的组成

       在MNIST训练数据集中,mnist.train.images是一个形状为[55000,784]的张量。
其中,第1个维度数字用来索引图片,第2个维度数字用来索引每张图片中的像素点。此张量里的每一个元素,都表示某张图片里的某个像素的强度值,值介入0~255之间。

MNIST里包含3个数据集:

  • 用于模型训练(mnist.train.images)
  • 用于评估训练过程中的准确度(测试数据集)(mnist.test.images)
  • 用于评估最终模型的准确度(验证数据集)mnist.validation.images)

       训练过程中,模型并没有遇到过验证数据集中的数据,所以利用验证数据集可以评估出模型的准确度。这个准确度越高,代码模型的泛化能力越强。
        另外,这3个数据集还有分别对应的3个文件(标签文件),用来标注每个图片上的数字是几。
把图片和标签放在一起,称为“样本”。通过样本就可以实现一个有监督信号的深度学习。相对应的,MNIST数据集的标签是介于0~9之间的数字,用来描述给定图片里表示的数字。
标签数据是“one-hot vectors”:一个one-hot向量,除了某一位的数字是1外,其余各维数字都是0.例如标签0将表示为([1,0,0,0,0,0,0,0,0,0])。如果是one hot格式,也就是上面的代码中的one_hot参数为True,那么每一个用例中的label不再是一个数,而是一个长度为10的数组,该数组中有9个0,只有一个1(注意是一个用例)。比如如果是手写字3, 那么对于one hot格式,就变成[0, 0, 0, 1, 0, 0, 0, 0, 0, 0]。one hot编码格式在多分类模型中使用到。其他的格式不变。

代码 

 

import numpy as np
import os

# 训练集
with open('./minist_data/train-images.idx3-ubyte') as f:
    loaded = np.fromfile(file = f, dtype = np.uint8)
    train_data = loaded[16:].reshape((60000, 784))
print(train_data.shape) # (60000, 784)


with open('./minist_data/train-labels.idx1-ubyte') as f:
    loaded = np.fromfile(file = f, dtype = np.uint8)
    train_labels = loaded[8:]
print(train_labels.shape) # (60000,)


# 测试集
with open('./minist_data/t10k-images.idx3-ubyte') as f:
    loaded = np.fromfile(file=f, dtype=np.uint8)
    test_data = loaded[16:].reshape((10000, 784))
print(test_data.shape) # (10000, 784)

with open('./minist_data/t10k-labels.idx1-ubyte') as f:
    loaded = np.fromfile(file=f, dtype=np.uint8)
    test_labels = loaded[8:].reshape((10000))
print(test_labels.shape) # (10000,)

 可以看到,训练集有六万条样本,784个特征。测试集一万条样本。

TensorFlow的封装让使用MNIST数据集变得更加方便。MNIST数据集是NIST数据集的一个子集,它包含了60000张图片作为训练数据,10000张图片作为测试数据。在MNIST数据集中的每一张图片都代表了0~9中的一个数字。图片的大小都为28*28,且数字都会出现在图片的正中间。 

具体读取代码如下:

import tensorflow as tf
import matplotlib.pyplot as plt

''' 读取MNIST数据方法一'''
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data',one_hot=True)
'''1)获得数据集的个数'''
train_nums = mnist.train.num_examples
validation_nums = mnist.validation.num_examples
test_nums = mnist.test.num_examples
print('MNIST数据集的个数')
print(' >>>train_nums=%d' % train_nums,'\n',
      '>>>validation_nums=%d'% validation_nums,'\n',
      '>>>test_nums=%d' % test_nums,'\n')

'''2)获得数据值'''
train_data = mnist.train.images   #所有训练数据
val_data = mnist.validation.images  #(5000,784)
test_data = mnist.test.images       #(10000,784)
print('>>>训练集数据大小:',train_data.shape,'\n',
      '>>>一副图像的大小:',train_data[0].shape)
'''3)获取标签值label=[0,0,...,0,1],是一个1*10的向量'''
train_labels = mnist.train.labels     #(55000,10)
val_labels = mnist.validation.labels  #(5000,10)
test_labels = mnist.test.labels       #(10000,10)

print('>>>训练集标签数组大小:',train_labels.shape,'\n',
      '>>>一副图像的标签大小:',train_labels[1].shape,'\n',
      '>>>一副图像的标签值:',train_labels[0])

'''4)批量获取数据和标签【使用next_batch(batch_size)】'''
batch_size = 100    #每次批量训练100幅图像
batch_xs,batch_ys = mnist.train.next_batch(batch_size)
print('使用mnist.train.next_batch(batch_size)批量读取样本\n')
print('>>>批量读取100个样本:数据集大小=',batch_xs.shape,'\n',
      '>>>批量读取100个样本:标签集大小=',batch_ys.shape)
#xs是图像数据(100,784);ys是标签(100,10)

'''5)显示图像'''
plt.figure()
for i in range(100):
    im = train_data[i].reshape(28,28)
    im = batch_xs[i].reshape(28,28)
    plt.imshow(im,'gray')
    plt.pause(0.0000001)
plt.show()

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
MNIST数据集的个数
 >>>train_nums=55000 
 >>>validation_nums=5000 
 >>>test_nums=10000 
>>>训练集数据大小: (55000, 784) 
 >>>一副图像的大小: (784,)
>>>训练集标签数组大小: (55000, 10) 
 >>>一副图像的标签大小: (10,) 
 >>>一副图像的标签值: [ 0.  0.  0.  0.  0.  0.  0.  1.  0.  0.]
使用mnist.train.next_batch(batch_size)批量读取样本
>>>批量读取100个样本:数据集大小= (100, 784) 
 >>>批量读取100个样本:标签集大小= (100, 10)

参考:

http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html 

https://blog.csdn.net/panrenlong/article/details/81736754

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125439.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 快速查找Python安装路径方法「建议收藏」

    快速查找Python安装路径方法「建议收藏」我相信一定有很多的人跟我一样,经常忘记Python安装的路径,每当用到的时候,最笨的办法就是在全局电脑里,直接查找Python,这样是肯定能查到的,但是如果你的电脑文件超级多,这将是一个工厂量很大的事情,你要等好久的。便捷的方法时:打开我们的cmd命令输入Python输入importsys输入print(sys.path)列表中的第五个将是你的安装路径…

  • 支付逻辑漏洞

    支付逻辑漏洞警告请勿使用本文提到的内容违反法律。本文不提供任何担保一、漏洞分类(一)支付过程中可直接修改数据包中的支付金额这种漏洞应该是支付漏洞中最常见的,主要针对支付宝等需要第三方支付的案例。开发人员往往会为了方便,直接在支付的关键步骤数据包中直接传递需要支付的金额。而这种金额后端没有做校验,传递过程中也没有做签名,导致可以随意篡改金额提交。只需要在支付过程中用抓包工具抓包发现有金额的参数修改成任意即可。(二)没有对购买数量进行限制这种漏洞应该是支…

  • ASP.NET编程入门与应用_aspnet网站开发实例

    ASP.NET编程入门与应用_aspnet网站开发实例<htmlxmlns=”http://www.w3.org/1999/xhtml”><head><title>KindEditor</title><linkrel=”stylesheet”href=”./js/kindeditor/themes/default/default.css”/>…

    2022年10月12日
  • 【Android】Android游戏编程之从零开始[通俗易懂]

    【Android】Android游戏编程之从零开始[通俗易懂]《Android游戏编程之从零开始》主要系统地讲解了Android游戏开发,从最基础部分开始,让零基础的Android初学者也能快速学习和掌握Android游戏开发。《Android游戏编程之从零开始》一共8章,内容包括Android平台介绍与环境搭建、Hello,Android!项目剖析、游戏开发中常用的系统组件、游戏开发基础、游戏开发实战、游戏开发提高篇、Box2d物理引擎、物…

  • python表白代码简单「建议收藏」

    python表白代码简单「建议收藏」谢谢大家的支持,您的一键三连是罡罡同学前进的最大动力!一键三连一键三连一键三连一键三连一键三连一键三连python表白代码简单1.首先你要现有python,以及环境配置(自己去网上找资源)2.下载pycharm(相当于Dev、Eclipse编译器)3.复制粘贴即可下面放上源代码:importturtle#str=input(‘请输入表白语:’)str=”糖浆不分离”str1=”2020/12/22~2021/2/16″turtle.speed(

  • 重磅!2021年国内Java培训机构排名十强出炉啦!

    重磅!2021年国内Java培训机构排名十强出炉啦!在IT行业当中,Java是最受欢迎的编程语言之一,作为最早出现的编程语言至今都没有倒下,可以说是YYDS!近年来学习Java的小伙伴也是越来越多,通过参加培训的方式来学习Java技术是最快最有效的方法。如今Java培训机构多如牛毛,到底该怎么选呢?下面小编就给大家发布2021年Java培训机构排名十强的名单来供大家参考:1、动力节点(http://www.bjpowernode.com/)动力节点是Java培训界“口口相传的Java黄埔军校”,成立至今12年,专注Java培训事业,为学员提供更.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号