9.图片分类数据集

news2024/10/7 4:28:57

1. 图像分类数据集

MNIST数据集 [LeCun et al., 1998] 是图像分类中广泛使用的数据集之一,但作为基准数据集过于简单。 我们将使用类似但更复杂的Fashion-MNIST数据集。

%matplotlib inline
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2l

d2l.use_svg_display()

2. 读取数据集

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

# 通过ToTensor 实例将图像数据从PIL类型变换成32位浮点数格式
# 并除以255使得所有像素的数值均在0~1之间

trans = transforms.ToTensor()  # 把图片转成pytorch的tensor,做一个简单的预处理

# 从torchvision.datasets中把FashionMNIST拿到,下载到上一级目录的data下面
# train = True 表示的是:下载的是训练数据集
# transform=trans 表示数据集拿出来之后,要得到的是pytorch的tensor,而不是一堆图片
# download=True 默认从网上下载,如果不方便的话,可以事先下载好存在data文件夹下面
mnist_train = torchvision.datasets.FashionMNIST(root="./data",train = True,
                                               transform=trans,
                                               download=True)
# 测试数据集,用来验证模型好坏的数据集,不参与训练
mnist_test = torchvision.datasets.FashionMNIST(root="./data",train=False,
                                              transform=trans,download=True)

len(mnist_train),len(mnist_test)

下载成功会显示:

在这里插入图片描述
读取第一张图片:

# mnist_train[i][0]表示第i个样本的图片信息,mnist_train[i][1]表示第i个样本的标签值
mnist_train[0][0].shape # 第一张图片的形状,是一个黑白图片
# rgb的channel数=1,单通道,长和宽都是28

在这里插入图片描述

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

def get_fashion_mnist_labels(labels):
    '''返回Fashion-MNIST数据集的文本标签'''
    text_labels = [
        't-shirt','trouser','pullover','dress','coat','sandal',
        'shirt', 'sneaker', 'bag', 'ankle boot']
    return [text_balels[int(i)] for i in labels]

创建一个函数来可视化这些样本:

def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5):  #@save
    """绘制图像列表"""
    # 设置图片大小
    figsize = (num_cols * scale, num_rows * scale) # tuple类型
    # _表示忽略不使用的变量,即fig
    _, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)
    axes = axes.flatten()
    for i, (ax, img) in enumerate(zip(axes, imgs)):
        if torch.is_tensor(img):
            # 图片张量
            ax.imshow(img.numpy())
        else:
            # PIL图片
            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

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

# 通过DataLoader函数从训练数据集中拿到第一个小批量,批量大小为18的数据
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))

在这里插入图片描述

3. 读取小批量

batch_size = 256

# 每一次读取数据不容易,需要使用多个进程来进行数据的读取,操作以及预读取
def get_dataloader_workers():
    '''使用4个进程来读取的数据'''
    return 4

train_iter = data.DataLoader(mnist_train,batch_size,shuffle = True,
                            num_workers = get_dataloader_workers())

timer = d2l.Timer() # 定义Timer函数来测试速度
for X,y in train_iter:
    continue
f'{timer.stop():.2f} sec'

运行结果如下,可以看到扫一遍数据要4.25秒:
在这里插入图片描述

有时候会碰到模型训练很快,但是数据读不过来,通常来说,会在训练之前,去看一下数据读取多快。读取数据的时间至少要比训练要快一些

4. 整合所有的组件

把所有的之前的函数放在一个函数里面,使得之后能够重用。

定义load_data_fashion_mnist函数,用于获取和读取Fashion-MNIST数据集。 这个函数返回训练集和验证集的数据迭代器。 此外,这个函数还接受一个可选参数resize,用来将图像大小调整为另一种形状。

def load_data_fashion_mnist(batch_size, resize=None):  #@save
    """下载Fashion-MNIST数据集,然后将其加载到内存中"""
    trans = [transforms.ToTensor()]
    if resize:
        trans.insert(0, transforms.Resize(resize))
    trans = transforms.Compose(trans)
    mnist_train = torchvision.datasets.FashionMNIST(
        root="../data", train=True, transform=trans, download=True)
    mnist_test = torchvision.datasets.FashionMNIST(
        root="../data", train=False, transform=trans, download=True)
    return (data.DataLoader(mnist_train, batch_size, shuffle=True,
                            num_workers=get_dataloader_workers()),
            data.DataLoader(mnist_test, batch_size, shuffle=False,
                            num_workers=get_dataloader_workers()))

下面,我们通过指定resize参数来测试load_data_fashion_mnist函数的图像大小调整功能:

train_iter, test_iter = load_data_fashion_mnist(32, resize=64)
for X, y in train_iter:
    print(X.shape, X.dtype, y.shape, y.dtype)
    break

现在已经准备好使用Fashion-MNIST数据集,便于下面的章节调用来评估各种分类算法。

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

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

相关文章

idea配置tomcat热部署不生效问题

idea中配置了tomcat的“update classes and resources”后,点击run之后,每次修改代码都没有及时生效,也就是没有成功进行热部署。 在idea中实现热部署,要先设置自动编译,再选择正确的运行模式(Debug运行&am…

SSM和SpringBoot整合

目录 一、整合Mybatis 配置文件 pom.xml application.yml jdbc.properties generatorConfig.xml 启动类 测试 二、整合Mybatis-plus Mybatis-plus 新建项目 pom.xml application.yml 在项目导入mybatis-plus的代码生成的类 完成基本增删改查方法开发 三、Mybatispl…

常用数据库之sql server的使用和搭建

1.1 介绍 关系型数据库,SQLServer是由微软公司开发的一种关系型据库管理系统,它已广泛用于电子商务、银行、保险、电力等行业。SQLServer提供了对XML和Internet标准的支持,具有强大的、灵活的、基于Web的应用程序管理功能。 1.2 优缺点 优点…

毕业设计-基于机器视觉的安全帽佩戴识别系统

目录 前言 课题背景与意义 课题实现技术思路 目标检测 算法检测 算法实现 最后 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越…

企业子网划分详解

一、IP协议 1、IP协议简介 IP协议是TCP/IP协议族的基石,它为上层提供无状态、无连接、不可靠的服务,也是Socket网络编程的基础之一。 IP协议特点: 无状态:指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送,传输,接收都是相互独立的。这种服务最大缺点是…

Web5到底是什么?Web4去哪了?

Web3咱还没搞明白,Web3还没有完全的投入应用 ,这Web5怎么就来了? 在今年6月召开的加密盛宴Consensus上,推特创始人比特必信徒杰克多西,首次提出全新Web5的概念,并公开呛声Web3的VC们可以洗洗睡了&#xff…

【Lilishop商城】No2-7.确定软件架构搭建六(本篇包括延时任务,会用到rocketmq、redis)

仅涉及后端,全部目录看顶部专栏,代码、文档、接口路径在: 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇只介绍重点架构逻辑,具体编写看源代码就行,读起来也不复杂~ 谨慎&#xf…

使用python进行贝叶斯统计分析

本文讲解了使用PyMC3进行基本的贝叶斯统计分析过程. 最近我们被客户要求撰写关于贝叶斯统计分析的研究报告,包括一些图形和统计输出。 # 导入 import pymc3 as pm # python的概率编程包 import numpy.random as npr # numpy是用来做科学计算的 import matplotlib…

cubeIDE开发,结合图片取模工具,stm32程序在LCD显示图片

一、图片取模工具(imag2lcd) 我们前面将汉字显示时说过,嵌入式LCD屏显示就是通过LCD屏幕数据接口给每个屏幕像素给出一个颜色值实现实时渲染显示出来。只不过文字显示时,给出的是一个二进制点阵,然后根据二进制中的“1…

Java文件输入输出(简单易懂版)

文章目录写在前面文件输入文件输出写在前面 在Java中不论文件输入还是输出都会用到File类,参考这篇文章Java File类(文件操作类)详解这里会涉及到绝对路径、相对路径、路径中的斜杠“/”和反斜杠“\”,有些小伙伴可能不熟悉&…

数据结构—B树、B+树

文章目录B树B树的特点为什么要有B树:红黑树和B树比较B树B树的特点B树构建过程查询时数据提供数据磁盘向cpu推送数据B树的优点总结为什么要有B树:B树用途:为什么要有B树:B树用途:———————————————————…

WorkTool企微机器人APP分享自定义小程序

移动端应用怎么分享自定义小程序到企业微信 前言 什么是自定义小程序,就是我们可以通过业务逻辑或代码来动态修改每次发出的小程序所附带的路径(path)和参数(params),以此来控制每次发出的小程序都是有不同含义的,但企业微信并不让我们这样…

[附源码]Python计算机毕业设计Django体育器材及场地管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

【Spring】事务管理

目录项目目录spring-dao.xml测试项目目录 UserMapper.xml写sql语句UserMapperImpl继承sqlSessionDaoSupport然后在里面做一个addUser和一个delete我们delete语句故意写错 但是我们想把add和delete当成一个事务delete错了,add也不应该成功所以我们需要进行事务管理配…

FLStudio2023水果中文版本使用操作心得与技巧

FL Studio2023是一款强大的音乐创作编辑软件,因软件LOGO为水果标志,故我们国人都习惯称之为水果。它让你的计算机就像是全功能的录音室,漂亮的大混音盘,先进的创作工具,让你的音乐突破想象力的限制。因此它又有"水…

手撕ThreadLocal源码

首先&#xff0c;创建MyThreadLocal类&#xff0c;区分开java.lang.ThreadLocal package com.huhu.threadlocal;import java.util.HashMap; import java.util.Map;public class MyThreadLocal<T> {/*** 所有需要和当前线程绑定的数据要放到这个容器当中*/private Map<…

WIFI的传输距离介绍

WIFI的传输距离介绍 WiFi模块在智能家居&#xff0c;智能驾舱等各行业各领域应用极广&#xff0c; 但有多少人了解他的传输距离是多少呢&#xff1f;是受什么影响呢&#xff1f; 一&#xff1a;WiFi模块的传输距离 WiFi模块的传输距离普遍在100-200米之间&#xff0c;其中也有支…

乐观锁思想在JAVA中的实现——CAS

前言 生活中我们看待一个事物总有不同的态度&#xff0c;比如半瓶水&#xff0c;悲观的人会觉得只有半瓶水了&#xff0c;而乐观的人则会认为还有半瓶水呢。很多技术思想往往源于生活&#xff0c;因此在多个线程并发访问数据的时候&#xff0c;有了悲观锁和乐观锁。 悲观锁认…

React+ts学习文档

1.项目中遇到的困难解决以及方案 1.顶部的查询按钮 点击查询如果在该组件去进行axios请求&#xff0c;这样再该组件下获得返回的列表还需要传回父组件&#xff0c;父组件再把列表发给下面的table组件&#xff0c;不太方便。 解决方案&#xff1a;将用户的选择项传给顶级组件i…

Kubernetes v1.25 搭建一个单节点集群用于Debug K8S源码

参考说明 参考自&#xff1a;v1.25.0-CentOS-binary-install-IPv6-IPv4-Three-Masters-Two-Slaves.md&#xff0c;按照自己的理解修改了下。 搭建好的单节点v1.25.4版本集群 1. 集群环境准备 1.1. 主机规划 IP主机名主机角色操作系统安装组件192.168.11.71k8s-master1maste…