【深度学习】图像分类数据集Fashion-MNIST

news2024/10/6 6:52:37

今天在手撸深度学习代码的时候,遇到了这个数据集,但是调用的函数的参数和功能不是很明白,因此选择写篇博客总结一下。

一、介绍

Fashion-MNIST是⼀个10类服饰分类数据集。

torchvision 包:它是服务于 PyTorch 深度学习框架的,主要⽤来构建计算机视觉模型。

torchvision 主要由以下几部分构成:

  1. torchvision.datasets : ⼀些加载数据的函数及常⽤的数据集接

  2. torchvision.models : 包含常⽤的模型结构(含预训练模型),例如AlexNet、VGG、 ResNet等

  3. torchvision.transforms : 常⽤的图⽚变换,例如裁剪、旋转等

  4. torchvision.utils : 其他的⼀些有⽤的⽅法

二、加载常用的包

import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2l
import matplotlib.pyplot as plt

三、获取数据集

trans = transforms.ToTensor()
mnist_train = torchvision.datasets.FashionMNIST(root = './15.动手学深度学习代码手撸/data', train = True, transform=trans, download=True)
mnist_test = torchvision.datasets.FashionMNIST(root='./15.动手学深度学习代码手撸/data', train=False, transform=trans, download=True)

通过框架中的内置函数将Fashion-MNIST数据集下载并读取到内存中。

通过ToTensor实例将图像数据从PLL类型变换成32位浮点数格式,最简单的一个预处理 transform=transforms.ToTensor()

从torchvision中的datasets中将Fashion-MNIST数据集拿到;root是目录;train=True表示下载的是训练数据集;download=True表示确定从网上下载。

上⾯的 mnist_train 和 mnist_test 都是 torch.utils.data.Dataset 的⼦类,所以我们可以⽤ len() 来获取该数据集的大小,还可以⽤下标来获取具体的⼀个样本。

print(len(mnist_train), len(mnist_test))

输出的结果为:

60000 10000

Fashion-MNIST由10个类别的图像组成,每个类别由训练数据集(train dataset)中的6000张图像和测试数据集(test dataset)中的1000张图像组成。因此,训练集和测试集分别包含60000和10000张图像。测试数据集不会用于训练,只用于评估模型性能。

我们看一下数据类型:

print(type(mnist_train))
<class 'torchvision.datasets.mnist.FashionMNIST'>

每个输入图像的高度和宽度均为28像素。数据集由灰度图像组成,其通道数为1。为了简洁起见,将高度定为 h h h像素,将宽度定为 w w w像素,图片的形状记为 h × w h\times w h×w

print(mnist_train[0][0].shape)

输出为:

torch.Size([1, 28, 28])

四、输出训练集中的10个样本的图像内容和文本标签

Fashion-MNIST中包含的10个类别,分别为t-shirt(T恤)、trouser(裤子)、pullover(套衫)、dress(连衣裙)、coat(外套)、sandal(凉鞋)、shirt(衬衫)、sneaker(运动鞋)、bag(包)和ankle boot(短靴)。 以下函数用于在数字标签索引及其文本名称之间进行转换。

def get_fashion_mnist_labels(labels):
    test_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat','sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
    return [test_labels[int(i)] for i in labels]

我们现在可以创建一个函数来可视化这些样本。

def show_images(imgs, num_rows, num_cols, titles = None, scale = 1.5):
    figsize = (num_cols * scale, num_rows * scale)
    _, axes = d2l.plt.subplots(num_rows, num_cols, figsize = (12, 8))
    axes = axes.flatten()
    for i, (ax, img) in enumerate(zip(axes, imgs)):
        if torch.is_tensor(img):
            ax.imshow(img.numpy())
        else:
            ax.imshow(img)
        ax.axes.get_xaxis().set_visible(False)
        ax.axes.get_yaxis().set_visible(False)
        if titles:
            ax.set_title(titles[i])
    return axes

这⾥的_表示我们忽略(不使⽤)的变量。

以下是训练数据集中前几个样本的图像及其相应的标签:

X, y = next(iter(data.DataLoader(mnist_train, batch_size=18)))
show_images(X.reshape(18, 28, 28), 2, 9, titles=get_fashion_mnist_labels(y))
plt.show()

在这里插入图片描述

五、读取小批量

为了使我们在读取训练集和测试集时更容易,我们使用内置的数据迭代器,而不是从零开始创建。 回顾一下,在每次迭代中,数据加载器每次都会读取一小批量数据,大小为batch_size。 通过内置数据迭代器,我们可以随机打乱了所有样本,从而无偏见地读取小批量。

batch_size = 256
def get_dataloader_workers():
    return 4

train_iter = data.DataLoader(mnist_train, batch_size, shuffle=True, num_workers = get_dataloader_workers())
timer = d2l.Timer()
for X, y in train_iter:
    continue
print(f'{timer.stop():.2f} sec')

使用4个进程来读取数据。

我们看一下读取训练数据所需的时间:

1.92 sec

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot+maven大学校友活动风采展示管理信息系统

大学校友管理信息系统当然也不能排除在外&#xff0c;从校友活动、校友风采的统计和分析&#xff0c;在过程中会产生大量的、各种各样的数据。本文以大学校友管理信息系统为目标&#xff0c;采用B/S模式&#xff0c;以SSM为开发框架&#xff0c;Jsp为开发技术、Eclipse/idea为开…

计算机毕业设计之java+ssm爱家房屋租赁信息管理系统

项目介绍 本爱家房屋租赁信息管理系统是针对目前房屋租赁信息管理的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的房屋租赁信息管理系统存在的问题进行分析&#xff0c;结合计算机系统的结构、概念、模型、原理、方法&#xff0c;在计算机各种优势的情况下&#xf…

Linux进阶-编辑器以及Shell编程

常用两个编辑器 gedit编辑器&#xff1a;依赖图形界面。 vi/vim编辑器&#xff1a;sudo apt install vim&#xff08;安装vim编辑器&#xff09; vim与vi的区别&#xff1a; vim是vi的升级版本&#xff0c;兼容vi&#xff1b; vi按u只能撤销上次命令&#xff0c;而在vim里…

java计算机毕业设计基于安卓Android的校园单车租赁App

项目介绍 校园单车租赁APP管理是校园单车租赁管理中对用户必不可少的一个部分。在人们校园单车租赁管理的整个过程中,校园单车租赁APP管理担负着最重要的角色。为满足如今日益复杂的管理需求,各类校园单车租赁APP管理程序也在不断改进。本课题所设计的校园单车租赁APP,使用ssm框…

Nginx源码分析--内存池

1.问题引入 使用C语言编程时&#xff0c;一般使用malloc和free进行动态内存申请和释放。如果一不小心忘记了调用free进行释放&#xff0c;很容易造成内存泄露。另一方面&#xff0c;频繁地进行malloc和free操作&#xff0c;很容易造成内存碎片。与此同时&#xff0c;因为mallo…

[Spring Cloud] nacos作为服务中心

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

【C语言从0到1之指针】(详解,赶紧收藏期末考试备用)

&#x1f57a;作者&#xff1a;启明星使 &#x1f383;专栏&#xff1a;《数据库》《C语言》《数据结构》 &#x1f3c7;分享喜欢的一句话&#xff1a;去发光&#xff0c;而不是等待被照亮​ 目录 1. 指针是什么 内存 指针变量 总结&#xff1a; 外&#xff1a; 2. 指针和…

比 O(nlog(n)) 做得更好 — 5.结束语和基准

这就是 groupSort 真正优于 mergeSort 的地方。 长按关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 扫码关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 最后的想法 我们知道&#xff0c;将一个大问题分解为一系列更小…

vmware虚拟机黑屏问题

&#x1f490;文章适合于所有的相关人士进行学习&#x1f490; 1.问题描述 VMware虚拟机出现了黑屏现象&#xff0c;打开虚拟机挂起能看到显示&#xff0c;但一开就黑屏。下面就给大家说说虚拟机黑屏怎么办&#xff0c;vmware虚拟机开机黑屏的解决方法。 大多数同学在安装第…

策略验证_卖出口诀_长箭射天股价落地

写在前面&#xff1a; 1. 本文中提到的“股票策略校验工具”的具体使用操作请查看该博文&#xff1b; 2. 文中知识内容来自书籍《同花顺炒股软件从入门到精通》 3. 本系列文章是用来学习技法&#xff0c;文中所得内容都仅仅只是作为演示功能使用 目录 解说 策略代码 结果 解…

mysql运行报错:

Install/Remove of the Service Denied!解决办法&#xff1a;Install/Remove of the Service Denied解决办法 上面报错看这篇&#xff1a;MySQL本地连接报错&#xff1a;ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061) 上面报错看这篇&#xf…

【Ubuntu】实现windows和ubuntu之间的共享文件

实现windows和ubuntu之间的共享文件一、配置windows和ubuntu之间的共享文件夹&#xff08;方式1&#xff09;二、通过将windows中的文件拖拽到ubuntu的终端之上&#xff08;方式2&#xff09;一、配置windows和ubuntu之间的共享文件夹&#xff08;方式1&#xff09; VMware菜单…

UE Select File / Folder Window 插件说明

本插件可以在蓝图中打开系统自带的文件/文件夹选择窗口。并且可以在打包出发行包。 1. Open Load File Window 打开文件读取选择窗口&#xff0c;只能单选文件&#xff0c;此函数只是返回文件路径&#xff0c;不会真正读取文件信息 输入 Dialog Title &#xff1a;打开窗口的…

[附源码]java毕业设计图书管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Java EE|软件视角下的操作系统

文章目录前言操作系统的概念及常见的OS举例操作系统的定位以及它的功能/职责/作用全程高能&#xff01;&#xff01;&#xff01;敲黑板警告&#xff01;&#xff01;&#xff01;一、进程概念&#xff08;感性认知&#xff09;二、进程的描述和组织&#xff01;&#xff01;&a…

步进电机实验

一、实验目的&#xff1a; 掌握步进电机的控制方法 二、实验内容与要求&#xff1a; 编写实验程序&#xff0c;利用8255的B口来控制步进电机的运转。 三、实验环境&#xff1a; PC机一台&#xff0c;TD-PITE实验装置一套。 四、实验步骤&#xff1a; 1、参考下图连接实验…

Linux下如何操作寄存器

本期主题&#xff1a; linux下操作寄存器 往期链接&#xff1a; linux设备驱动中的并发linux设备驱动中的编译乱序和执行乱序linux设备驱动之内核模块linux字符驱动linux字符驱动之ioctl部分linux字符驱动之read、write部分linux驱动调试之Debugfs 文章目录1.为什么有这个问题…

内网信息收集(基于红日靶场1)

net view # 查看局域网内其他主机名 net config Workstation # 查看计算机名、全名、用户名、系统版本、工作站、域、登录域 net user # 查看本机用户列表 net user /domain # 查看域用户 net localgroup administrators # 查看本地…

合宙esp32 环境搭建和使用方法

文章目录1.环境搭建2.问题2-1&#xff1a;exec: "cmd": executable file not found in %PATH%3.合宙esp32 使用3-1引脚定义3-1-1&#xff1a;板载LED3-2下载程序&#xff1a;3-3测试程序4.ESP32-C3开发板相关资料1.环境搭建 1-1&#xff1a;下载esp32 安装包 链接&a…

[一篇读懂]C语言八讲:数据结构概述

[一篇读懂]C语言八讲&#xff1a;数据结构概述1. 与408关联解析及本节内容介绍1 与408关联解析2 本节内容介绍2. 逻辑结构与存储结构1 逻辑结构2 存储结构顺序存储链式存储3 顺序存储与链式存储分析顺序存储优缺点链式存储优缺点3. 时间复杂度与空间复杂度1 算法定义2 时间复杂…