专栏首页拇指笔记【动手学深度学习笔记】之图像分类数据集(Fashion-MNIST)

【动手学深度学习笔记】之图像分类数据集(Fashion-MNIST)

1.图像分类数据集(Fashion-MNIST)

这一章节需要用到torchvision包,为此,我重装了

这个数据集是我们在后面学习中将会用到的图形分类数据集。它的图像内容相较于手写数字识别数据集MINIST更为复杂一些,更加便于我们直观的观察算法之间的差异。

这一节主要使用torchvision包,主要用来构建计算机视觉模型。

torchvision包的主要构成

功能

torchvision.datasets

一些加载数据的函数及常用数据集接口

torchvision.madels

包含常用的模型结构(含预训练模型)

torchvision.transforms

常用的图片变换(裁剪、旋转)

torchvision.utils

其他方法

1.1获取数据集

首先导入需要的包

import torch 
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import time
import sys
sys.path.append("..")	
#调用库时,sys.path会自动搜索路径,为了导入d2l这个库,所以需要添加".."
#import d2lzh_pytorch as d2l	这个库找不到不用了
from IPython import display
#在这一节d2l库仅仅在绘图时被使用,因此使用这个库做替代

**通过调用torchvision中的torchvision.datasets来下载这个数据集。**第一次调用从网上自动获取数据。

通过设置参数train来制定获取训练数据集或测试数据集(测试集:用来评估模型表现,并不用来训练模型)。

通过设置参数transfrom = transforms.ToTensor()将所有数据转换成Tensor,如果不进行转换则返回PIL图片。

transforms.ToTensor()函数将尺寸为(H*W*C)且数据位于[0,255]之间的PIL图片或者数据类型为np.uint8的NumPy数组转换为尺寸为(C*H*W)且数据类型为torch.float32且位于[0,0,1.0]的Tensor C代表通道数,灰度图像的通道数为1 PIL图片是python处理图片的标准 注意:transforms.ToTensor()函数默认将输入类型设置为uint8

#获取训练集
mnist_train = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST',train=True,download = True,transform = transforms.ToTensor())
#获取测试集
mnist_test = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST',train=True,download = True,transform = transforms.ToTensor())

其中mnist_train和mnist_test可以用len()来获取该数据集的大小,还可以用下标来获取具体的一个样本。

训练集和测试集都有10个类别,训练集中每个类别的图像数为6000,测试集中每个类别的图像数为1000,即:训练集中有60000个样本,测试集中有10000个样本。

len(mnist_train)	#输出训练集的样本数
mnist_train[0]		#通过下标访问任意一个样本,返回值为两个torch,一个特征tensor和一个标签tensor

Fashion-MNIST数据集中共有十个类别,分别为:t-shirt(T恤)、trouser(裤子)、pullover(套衫)、dress(连衣裙)、coat(外套)、sandal(凉鞋)、shirt(衬衫)、sneaker(运动鞋)、bag(包)和ankle boot(短靴) 。

需要将这些文本标签和数值标签相互转换,可以通过以下函数进行。

def get_fashion_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]
	#labels是一个列表
	#数值标签转文本标签

下面是一个可以在一行里画出多张图像和对应标签的函数

def show_fashion_mnist(images, labels):
    d2l.use_svg_display()
   	#绘制矢量图
    _, figs = plt.subplots(1, len(images), figsize=(12, 12))
    #创建子图,一行len(images)列,图片大小12*12
    for f, img, lbl in zip(figs, images, labels):
        #zip函数将他们压缩成由多个元组组成的列表
        f.imshow(img.view((28, 28)).numpy())
        #将img转形为28*28大小的张量,然后转换成numpy数组
        f.set_title(lbl)
        #设置每个子图的标题为标签
        f.axes.get_xaxis().set_visible(False)
        f.axes.get_yaxis().set_visible(False)
        #关闭x轴y轴
    plt.show()

上述函数的使用

X,y = [],[]
#初始化两个列表
for i in range(10):
	X.append(mnist_train[i][0])
	#循环向X列表添加图像
	y.append(mnist_train[i][1])
	#循环向y列表添加标签
show_fashion_mnist(X,get_fashion_mnist_labels(y))
#显示图像和列表

1.2在模型中读取小批量

有了线性回归中读取小批量的经验,我们知道读取小批量可以使用torch中内置的dataloader函数来实现。

dataloader还支持多线程读取数据,通过设置它的num_workers参数。

batch_size = 256
#小批量数目
train_iter = torch.utils.data.DataLoader(mnist_train,batch_size=batch_size,shuffle = True,num_workers = 0)
#num_workers=0,不开启多线程读取。
test_iter = torch.utils.data.DataLoader(mnist_test,batch_size = batch_size,shuffle=False,num_workers=0)

1.3获取并显示样本程序

import torch
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import time
import sys
sys.path.append("..")
#由于没有d2l库,所以需要进行一些修改
#修改一:
from IPython import display

mnist_train = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST',train=True,download=True,transform=transforms.ToTensor())
#获取训练集
mnist_test = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST',train=False,download=True,transform=transforms.ToTensor())
#获取测试集

def get_Fashion_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]
    #labels是一个列表,所以有了for循环获取这个列表对应的文本列表

def show_fashion_mnist(images,labels):
    display.set_matplotlib_formats('svg')
    #绘制矢量图
    _,figs = plt.subplots(1,len(images),figsize=(12,12))
    #设置添加子图的数量、大小
    for f,img,lbl in zip(figs,images,labels):
        f.imshow(img.view(28,28).numpy())
        f.set_title(lbl)
        f.axes.get_xaxis().set_visible(False)
        f.axes.get_yaxis().set_visible(False)
    plt.show()

#显示部分
X,y =[],[]
#初始化两个列表
for i in range(10):
#先从训练集中抽取出十个
    X.append(mnist_train[i][0])
    #添加图像
    y.append(mnist_train[i][1])
    #添加标签
    
show_fashion_mnist(X,get_Fashion_MNIST_labels(y))

本文分享自微信公众号 - 拇指笔记(shuzhi990),作者:拇指笔记

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【动手学深度学习笔记】之softmax回归

    对于离散值预测问题,我们可以使用诸如softmax回归这样的分类模型。softmax回归模型有多个输出单元。本章以softmax回归模型为例,介绍神经网络中的分...

    树枝990
  • 【动手学深度学习笔记】之过拟合与欠拟合实例

    每个小批量设置为10,使用TensorDataset转换为张量,使用DataLoader生成迭代器。

    树枝990
  • Ubuntu18.04安装Anaconda3和VSCode指南

    趁着周末,把家里的旧电脑装成ubuntu系统了,今天安装一下Anaconda3和VSCode,记录一下。

    树枝990
  • 2018 CCF《套餐个性化匹配模型》(亚军)分享

    PandasCute/2018-CCF-BDCI-China-Unicom-Research-Institute-top2​github.com

    Coggle数据科学
  • 利用Tensorflow构建自己的物体识别模型(一)

    利用Tensorflow训练搭建自己的物体训练模型,万里长征第一步,先安装tensorflow。

    月小水长
  • 【RSA】求两个2^512左右的大素数

    原文地址:http://zhidao.baidu.com/link?url=6zpCQK2hLwq0jw-E1yNJ9Eug8Qv7thix4l9y9f0r3G...

    后端技术漫谈
  • 腾讯云视频云(点播&直播)产品双月刊(2020年9月&10月)

    ? ? 近期,我们都有哪些 重大发布 ~ 又带给大家了哪些 惊喜 ~欢迎阅读! ? ? ? 功能1:媒资管理新版上线 适用对象:点播所有用户 主要优势: 1·...

    腾讯云视频
  • 云主机一般可以用来做什么

    最近,经常有市场一线同事问:“我们向客户销售了云主机后,客户究竟可以用来做什么”? 一般的回答是网站,除了以后,好像脑袋里一片空白,核心是因为我们对客户...

    希望的田野
  • 3分钟了解主机安全问题

    《碟中谍4》中,位于迪拜塔137层的数据中心,网络防火墙是军用级别口令和硬件网关,破解防护困难。于是阿汤哥只身从130楼爬到137楼,进入数据中心,绕过防护设备...

    腾讯云基础安全
  • 【简单的点云】1.1 C#制作一个读取点云的软件1

    ASC点云以第一行第一列为开始点(0位),从左往右写入,写到第一行最后一列时,换行,从第二行第一列开始继续写入,以此往复,直到最后一行最后一列点。

    EdenChen

扫码关注云+社区

领取腾讯云代金券