文章目录

  • 数据集简介
  • 操作
    • 下载数据集
    • 数据格式
    • 可视化显示
    • 读取小批量
  • 完整代码
  • 备注

数据集简介

不同于MNIST手写数据集,Fashion-MNIST数据集包含了10个类别的图像,分别是:t-shirt(T恤),trouser(牛仔裤),pullover(套衫),dress(裙子),coat(外套),sandal(凉鞋),shirt(衬衫),sneaker(运动鞋),bag(包),ankle boot(短靴)。

操作

下载数据集

这里通过mxnet中gluon的data包来下载这个数据集,第一次调用时将自动从网上下载获取数据。默认的保存位置为:C:\Users\Username\.mxnet\datasets\fashion-mnist\目录(Linux系统估计也在主目录下的类似目录中),共包含四个文件,分别为:

  • 训练数据图片train-images-idx3-ubyte
  • 训练数据标签train-labels-idx1-ubyte
  • 测试数据图片t10k-images-idx3-ubyte
  • 测试数据标签t10k-labels-idx1-ubyte

因为是国外的网站,没有代理的话下载速度很慢,所以可以通过手动下载并并将其移动至上述目录:

  1. 点击程序运行时控制台消息给出的链接进行下载;
  2. 点击下载我上传至CSDN的副本(CSDN资源至少需要1积分,没办法啦各位筒子)。

train指定获取训练数据集还是测试数据集。

from mxnet.gluon import data as gdata# 通过gluon的data包下载数据集
mnist_train = gdata.vision.FashionMNIST(train=True)
mnist_test = gdata.vision.FashionMNIST(train=False)

查阅mxnet的官方文档,可以看到vision中预定义了以下几种数据集:

数据格式

训练数据集每个类别含有6000个样本,测试数据集每个类别含有1000个样本,一共有10个类别,故而训练数据集共60000个样本,测试数据集共10000个样本。

图像是一个28*28的像素数组,每个像素的值为0~255之间的8位无符号整数(uint8),使用三维NDArray存储,最后一维表示通道个数。由于为灰度图像,故通道数为1。

# 10个类别,训练集和测试集每个类别分别6000样本和1000样本
print(len(mnist_train), len(mnist_test))
# 数据集形状
feature, lable = mnist_train[0]
print(feature.shape, feature.dtype)
print(lable, lable.dtype)

运行结果如下:

可视化显示

首先定义一个函数,根据数值标签获取字符串标签:

# 将数据集的数值标签转换为文本标签, 参数是一个list
def get_fasion_mnist_labels(labels):text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']return [text_labels[int(i)] for i in labels]

定义函数,在一行中绘制数据代表的可视化结果:

import gluonbook as gb
import pylab# 同一行画出图片和标签
def show_fashion_mnist(images, labels):gb.use_svg_display()# _表示忽略不使用的变量_, figs = gb.plt.subplots(1, len(images), figsize=(12, 12))for f, img, lbl in zip(figs, images, labels):f.imshow(img.reshape((28, 28)).asnumpy())f.set_title(lbl)f.axes.get_xaxis().set_visible(False)f.axes.get_xaxis().set_visible(False)pylab.show()    # PyCharm 2018中绘图# 画图示例
X, y = mnist_train[0:9]
show_fashion_mnist(X, get_fasion_mnist_labels(y))

结果如下:

读取小批量

使用gluon中的DataLoader来读取数据,它可以允许使用多进程来加速数据的读取(windows暂时不支持)。下面通过num_workers设置读取数据的进程数。

ToTensor类将图像数据从uint8转换为32位浮点数格式,并且除以255使得所有的像素值分布于[0,1]。ToTensor类还将图像通道从最后一维移到最前面一维上来,这将方便在卷积神经网络中进行计算。通过数据集的transform_first函数,我们将ToTensor的变换应用在每个数据样本(图像和标签)的第一个元素,即图像之上。

import sys
import time# 读取小批量数据
batch_size = 256
transformer = gdata.vision.transforms.ToTensor()
if sys.platform.startswith('win'):# 0表示不使用额外的进程读取数据num_workers = 0
else:num_workers = 4
train_iter = gdata.DataLoader(mnist_train.transform_first(transformer), batch_size, shuffle=True, num_workers=num_workers)
test_iter = gdata.DataLoader(mnist_test.transform_first(transformer), batch_size, shuffle=False, num_workers=num_workers)start = time.time()
for X, y in train_iter:continue
print('%.2f sec' % (time.time() - start))

我电脑上的数据读取时间:

改变batch_size的值,看看数据的读取性能会有何影响?

完整代码

# coding=utf-8
# author: BebDong
# 2018/12/18from mxnet.gluon import data as gdata
import gluonbook as gb
import pylab
import sys
import time# 将数据集的数值标签转换为文本标签
def get_fasion_mnist_labels(labels):text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']return [text_labels[int(i)] for i in labels]# 同一行画出图片和标签
def show_fashion_mnist(images, labels):gb.use_svg_display()# _表示忽略不使用的变量_, figs = gb.plt.subplots(1, len(images), figsize=(12, 12))for f, img, lbl in zip(figs, images, labels):f.imshow(img.reshape((28, 28)).asnumpy())f.set_title(lbl)f.axes.get_xaxis().set_visible(False)f.axes.get_xaxis().set_visible(False)pylab.show()# 通过gluon的data包下载数据集
mnist_train = gdata.vision.FashionMNIST(train=True)
mnist_test = gdata.vision.FashionMNIST(train=False)# 10个类别,训练集和测试集每个类别分别6000样本和1000样本
print(len(mnist_train), len(mnist_test))
# 数据集形状
feature, lable = mnist_train[0]
print(feature.shape, feature.dtype)
print(lable, lable.dtype)
print(get_fasion_mnist_labels([lable]))# 画图示例
X, y = mnist_train[0:9]
# show_fashion_mnist(X, get_fasion_mnist_labels(y))# 读取小批量数据
batch_size = 256
transformer = gdata.vision.transforms.ToTensor()
if sys.platform.startswith('win'):# 0表示不使用额外的进程读取数据num_workers = 0
else:num_workers = 4
train_iter = gdata.DataLoader(mnist_train.transform_first(transformer), batch_size, shuffle=True, num_workers=num_workers)
test_iter = gdata.DataLoader(mnist_test.transform_first(transformer), batch_size, shuffle=False, num_workers=num_workers)start = time.time()
for X, y in train_iter:continue
print('%.2f sec' % (time.time() - start))

备注

本文为《动手学深度学习》的学习笔记,原书链接:http://zh.diveintodeeplearning.org/chapter_deep-learning-basics/fashion-mnist.html

代码中的gluonbook包是这本书籍封装的工具包,它把书中描述的将来会复用的所有方法进行了封装。如果您并未按照书中给出的配置文件搭建环境,那可以点击这里单独下载gluonbook包,并将其移动至恰当的位置。

【深度学习】Fashion-MNIST数据集简介相关推荐

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

    就像无数人从敲下"Hello World"开始代码之旅一样,许多研究员从"MNIST数据集"开启了人工智能的探索之路. MNIST数据集(Mixed Natio ...

  2. Dataset:机器学习和深度学习中对数据集进行高级绘图(数据集可视化,箱线图等)的简介、应用之详细攻略——daidingdaiding

    Dataset:机器学习和深度学习中对数据集进行高级绘图(数据集可视化,箱线图等)的简介.应用之详细攻略--daidingdaiding 目录 箱线图 箱线图 箱线图(box plots):这些图显示 ...

  3. DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略

    DL框架之Tensorflow:深度学习框架Tensorflow的简介.安装.使用方法之详细攻略 目录 Tensorflow的简介 1.描述 2.TensorFlow的六大特征 3.了解Tensorf ...

  4. fashionmnist数据集_Keras实现Fashion MNIST数据集分类

    本篇用keras构建人工神经网路(ANN)和卷积神经网络(CNN)实现Fashion MNIST 数据集单个物品分类,并从模型预测的准确性方面对ANN和CNN进行简单比较. Fashion MNIST ...

  5. 【神经网络与深度学习】CIFAR10数据集介绍,并使用卷积神经网络训练图像分类模型——[附完整训练代码]

    [神经网络与深度学习]CIFAR-10数据集介绍,并使用卷积神经网络训练模型--[附完整代码] 一.CIFAR-10数据集介绍 1.1 CIFAR-10数据集的内容 1.2 CIFAR-10数据集的结 ...

  6. 转载【数据集】计算机视觉,深度学习,数据挖掘数据集整理

    金融 美国劳工部统计局官方发布数据 上证A股日线数据,1999.12.09 至 2016.06.08,前复权,1095支股票 深证A股日线数据,1999.12.09 至 2016.06.08,前复权, ...

  7. 深度学习常用的数据集,包括各种数据跟图像数据。

    1.   免费数据集下载(持续更新中...) 2.[导读] "大数据时代",数据为王!无论是数据挖掘还是目前大热的深度学习领域都离不开"大数据".大公司们一般会 ...

  8. 数据集大全:25个深度学习的开放数据集

    介绍 深度学习的关键是训练.无论是从图像处理到语音识别,每个问题都有其独特的细微差别和方法. 但是,你可以从哪里获得这些数据?现在你看到的很多研究论文都使用专有数据集,而这些数据集通常不会向公众发布. ...

  9. 二十五个深度学习相关公开数据集

    转 [干货]二十五个深度学习相关公开数据集 2018年04月18日 13:42:53 阅读数:758 (选自Analytics Vidhya:作者:Pranav Dar:磐石编译) 目录 介绍 图像处 ...

最新文章

  1. 开源分布式Job系统,调度与业务分离-如何创建一个计划HttpJob任务
  2. 单片机基础课程有哪些?
  3. 文件读取getline与fscanf_s
  4. python oracle数据库操作_Python连接oracle数据库的基本操作
  5. 为什么 wait/notify/notifyAll 在 Object 类定义而不是 Thread 类?
  6. 【chromium】 Chromium OS的oom机制
  7. 计算机键盘标注,你所不知道的 Windows 10 小诀窍:万能计算器、虚拟键盘、屏幕截图标注...
  8. 什么是CDP(连续数据保护)?
  9. django-多对多关系
  10. 中小学、幼儿园校园明厨亮灶视频监控平台要求
  11. Mate 50系列首发?曝鸿蒙3.0用户版5月内测
  12. Bug--Tomcat Error start child
  13. UE4之SetRelativeLocation 和SetRelativeRotation
  14. php有的图片显示不出来,图片显示不出来,但是数据库里有显示
  15. 模电——硬件选择电容的耐压值以及分类和其优缺点
  16. 《编码:隐匿在计算机软硬件背后的语言》读书笔记整理总结
  17. 关于Wincc 7.0 sp1 亚洲版的下载链接地址及授权,破解
  18. 大数据时代网络安全问题分析
  19. c# .net对接企业微信小助手 接口请求时长预警
  20. IDEA中Artifact的配置

热门文章

  1. 我的世界学园都市java_我的世界学园都市地图整合包
  2. mongodb-报错FailedToParse: Password must be URL Encoded for mongodb:// URL:
  3. C++ sort函数(升序降序排列)
  4. 网易我的世界服务器配置文件翻译,精致存储的配置文件翻译 - [RS]精致存储 (Refined Storage) - MC百科|最大的Minecraft中文MOD百科...
  5. C++中模板的特化与偏特化
  6. putc与stdin,stdout,stderr
  7. 【随笔记】NDK 编译开源库 SQLite3
  8. 我的python世界 豆瓣_python系列之(4)豆瓣图书《平凡的世界》书评及情感分析...
  9. Arthas——热替换
  10. 图灵学院Java架构师课程,基于java