开发者社区> 一个处女座的程序猿> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集简介、下载、使用方法(包括数据增强)之详细攻略(二)

简介: Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集简介、下载、使用方法(包括数据增强)之详细攻略
+关注继续查看

1、mnist 对象中各个属性的含义和大小


image.png


文件名                                       大小                    特点


train-images-idx3-ubyte.gz      ≈9.45 MB           训练图像数据

train-labels-idx 1-ubyte.gz      ≈0.03MB             训练图像的标

ti Ok-images-idx3-ubyte.gz    ≈ t.57MB             测试图像数据

t l Ok-labels-idxl-ubyte.gz      ≈4.4KB                测试图像的标


       原始的MNIST 数据集中包含60000 张训练图片和10000 张测试图片。

       而在TensorFlow 中,又将原先的60000 张训练图片重新划分成了新的55000张训练图片和5000张验证图片。所以在mnist 对象中,数据一共分为三部分: mnist.train 是训练图片数据, mnist. validation 是验证图片数据,mnist.test是测试图片数据,这正好对应了机器学习中的训练集、验证集和测试集。一般来说,会在训练集上训练模型,通过模型在验证集上的表现调整参数,最后通过测试集确定模型的性能。



2、数据集的应用—训练和预测


        这些图像可以用于学习和推理。MNIST数据集的一般使用方法是,先用训练图像进行学习,再用学习到的模型度量能在多大程度上对测试图像进行正确的分类。

       在原始的MNIST 数据集中(官网http://yann.lecun.com/exdb/mnist/),可以找到多达68 种模型在该数据集上的准确率数据,包括相应的论文出处。这些模型包括线性分类器、K 近邻方法、普通的神经网络、卷积神经网络等。



MNIST数据集下载


1、基于python语言根据爬虫技术自动下载MNIST数据集


Dataset之MNIST:自定义函数mnist.load_mnist根据网址下载mnist数据集(四个ubyte.gz格式数据集文件)


Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集的下载(基于python语言根据爬虫技术自动下载MNIST数据集)


2、TensorFlow的封装下使用MNIST数据集


       TensorFlow的封装让使用MNIST数据集变得更加方便。


       MNIST数据集提供了4个下载文件,在tensorflow中可将这四个文件直接下载放于一个目录中并加载,如下代码所示,如果指定目录中没有数据,那么tensorflow会自动去网络上进行下载。通过input_data.read_data_sets函数生成的类会自动将MNIST数据集划分为train, validation和test三个数据集。

     其中train这个集合内含有55000张图片,validation集合内含有5000张图片,这两个集合组成了MNIST本身提供的训练数据集。test集合内有10000张图片,这些图片都来自与MNIST提供的测试数据集。


1、MNIST数据集下载及输出基本信息


import tensorflow as tf

from tensorflow.examples.tutorials.mnist import input_data #这是TensorFlow 为了教学Mnist而提前设计好的程序

# number 1 to 10 data

mnist = input_data.read_data_sets('MNIST_data', one_hot=True) #TensorFlow 会检测数据是否存在。当数据不存在时,系统会自动,在当前代码py文件位置,自动创建MNIST_data文件夹,并将数据下载到该件夹内。当执行完语句后,读者可以自行前往MNIST_data/文件夹下查看上述4 个文件是否已经被正确地下载

#若因网络问题无法正常下载,可以前往MNIST官网http://yann.lecun.com/exdb/mnist/使用下载工具下载上述4 个文件, 并将它们复制到MNIST_data/文件夹中。

#查看训练数据的大小

print(mnist.train.images.shape)  #(55000, 784)

print(mnist.train.labels.shape)  #(55000, 10)

#查看验证数据的大小

print(mnist.validation.images.shape)  #(5000, 784)

print(mnist.validation.labels.shape)  #(5000, 10)

#查看测试数据的大小

print(mnist.test.images.shape)  #(10000, 784)

print(mnist.test.labels.shape)  #(10000, 10)

print(mnist.train.images[0,:])  #打印出第0张训练图片对应的向量表示

2、利用TF查看MNIST数据集中训练集的前20张图片


#利用TF查看MNIST数据集中训练集的前20张图片

from tensorflow.examples.tutorials.mnist import input_data

import scipy.misc

import os

# 读取MNIST数据集。如果不存在会事先下载。

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# 我们把原始图片保存在MNIST_data/raw/文件夹下

# 如果没有这个文件夹会自动创建

save_dir = 'MNIST_data/raw/'

if os.path.exists(save_dir) is False:

   os.makedirs(save_dir)

# 保存前20张图片

for i in range(20):

   # 请注意,mnist.train.images[i, :]就表示第i张图片(序号从0开始)

   image_array = mnist.train.images[i, :]

   # TensorFlow中的MNIST图片是一个784维的向量,我们重新把它还原为28x28维的图像。

   image_array = image_array.reshape(28, 28)

   # 保存文件的格式为 mnist_train_0.jpg, mnist_train_1.jpg, ... ,mnist_train_19.jpg

   filename = save_dir + 'mnist_train_%d.jpg' % i

   # 将image_array保存为图片

   # 先用scipy.misc.toimage转换为图像,再调用save直接保存。

   scipy.misc.toimage(image_array, cmin=0.0, cmax=1.0).save(filename)

print('Please check: %s ' % save_dir)

image.png


3、查看mnist_train数据集


打印出前20张图片的One-hot编码+前20张图片所对应的标签


#mnist_train数据集:打印出前20张图片的One-hot编码+前20张图片所对应的标签

from tensorflow.examples.tutorials.mnist import input_data

import numpy as np

# 读取mnist数据集。如果不存在会事先下载。

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# 看前20张训练图片的label

for i in range(20):

   # 得到one-hot表示,形如(0, 1, 0, 0, 0, 0, 0, 0, 0, 0)

   one_hot_label = mnist.train.labels[i, :]

   # 通过np.argmax我们可以直接获得原始的label

   # 因为只有1位为1,其他都是0

   label = np.argmax(one_hot_label)

   print('mnist_train中,第  %d 张图片One-hot编码'% i,mnist.train.labels[i,:])

   print('mnist_train中,第  %d 张图片对应的 label: %d' % (i, label))


image.png



数据集增强代码演示


Dataset之MNIST:MNIST(手写数字图片识别)数据集简介、下载、使用方法(包括数据集增强)之详细攻略


1、思路

image.png



2、代码实现


数据集增强(将已有MNIST数据集通过移动像素上下左右的方法来扩大数据集为初始数据集的5倍)


from __future__ import print_function

import cPickle

import gzip

import os.path

import random

import numpy as np

print("Expanding the MNIST training set")

if os.path.exists("../data/mnist_expanded.pkl.gz"):

   print("The expanded training set already exists.  Exiting.")

else:

   f = gzip.open("../data/mnist.pkl.gz", 'rb')

   training_data, validation_data, test_data = cPickle.load(f)

   f.close()

   expanded_training_pairs = []

   j = 0

   for x, y in zip(training_data[0], training_data[1]):

       expanded_training_pairs.append((x, y))

       image = np.reshape(x, (-1, 28))

       j += 1

       if j % 1000 == 0: print("Expanding image number", j)

       for d, axis, index_position, index in [

               (1,  0, "first", 0),

               (-1, 0, "first", 27),

               (1,  1, "last",  0),

               (-1, 1, "last",  27)]:

           new_img = np.roll(image, d, axis)

           if index_position == "first":

               new_img[index, :] = np.zeros(28)

           else:

               new_img[:, index] = np.zeros(28)

           expanded_training_pairs.append((np.reshape(new_img, 784), y))

   random.shuffle(expanded_training_pairs)

   expanded_training_data = [list(d) for d in zip(*expanded_training_pairs)]

   print("Saving expanded data. This may take a few minutes.")

   f = gzip.open("../data/mnist_expanded.pkl.gz", "w")  

   cPickle.dump((expanded_training_data, validation_data, test_data), f)

   f.close()


image.png



相关文章

Dataset:利用Python将已有mnist数据集通过移动像素上下左右的方法来扩大数据集为初始数据集的5倍


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Android 安装包优化】Android 中使用 SVG 图片 ( SVG 矢量图简介 | Android 中生成 Vector 矢量图资源 )(一)
【Android 安装包优化】Android 中使用 SVG 图片 ( SVG 矢量图简介 | Android 中生成 Vector 矢量图资源 )(一)
183 0
TF之DNN:利用DNN【784→500→10】对MNIST手写数字图片识别数据集(TF自带函数下载)预测(98%)+案例理解DNN过程
TF之DNN:利用DNN【784→500→10】对MNIST手写数字图片识别数据集(TF自带函数下载)预测(98%)+案例理解DNN过程
72 0
TF:基于CNN(2+1)实现MNIST手写数字图片识别准确率提高到99%
TF:基于CNN(2+1)实现MNIST手写数字图片识别准确率提高到99%
55 0
DL之NN/CNN:NN算法进阶优化(本地数据集50000张训练集图片),六种不同优化算法实现手写数字图片识别逐步提高99.6%准确率
DL之NN/CNN:NN算法进阶优化(本地数据集50000张训练集图片),六种不同优化算法实现手写数字图片识别逐步提高99.6%准确率
82 0
tomcat访问webapp下面工程的文件含有软连接
工程deploy后编译后的包中 需要包含一些静态图片的文件夹 图片文件有很大 所有用软连接
1114 0
在asp.net web api 2 (ioc autofac) 使用 Serilog 记录日志
Serilog是.net里面非常不错的记录日志的库,另外一个我认为比较好的Log库是NLog。 在我个人的asp.net web api 2 基础框架(Github地址)里,我原来使用的是NLog,但是由于好奇心,我决定使用Serilog代替Nlog。
1684 0
【视频】自然框架之分页控件的使用方法(二) 下载、DLL说明和web.config的设置
    上次说的是QuickPager分页控件的PostBack的使用方式,也提供了源码下载。但是有些人下载之后发现有一大堆的文件夹,还有一大堆的DLL,到底要用哪个呀?不会都要用吧。     当然不需要全都引用了,只需要引用三个DLL就可以了。
914 0
+关注
一个处女座的程序猿
国内互联网圈知名博主、人工智能领域优秀创作者,全球最大中文IT社区博客专家、CSDN开发者联盟生态成员、中国开源社区专家、华为云社区专家、51CTO社区专家、Python社区专家等,曾受邀采访和评审十多次。仅在国内的CSDN平台,博客文章浏览量超过2500万,拥有超过57万的粉丝。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载