当前位置: 首页 > news >正文

PyTorch的torchvision内置数据集使用,transform+pytorch联合使用

一、PyTorch的torchvision内置数据集介绍

我们前面的文章里谈到的数据集是我们自己找的一些自定义数据集。那么在Pytorch中存在2种数据集(Dataset),即内置数据集(Built-in dataset)和自定义数据集(Custom dataset)。该2种数据集在使用时有所区别,我们之前课程里学习的就是自定义数据集,这里就不多讲了。

而pytorch的内置数据集(Built-in dataset)是由pytorch的torchvision这个库提供的,我们可以直接在代码中下载下来使用,包含了各种各样的机器训练所需要的数据集类型

1、首先去官网了解一下

官方文档在这:torchvision — Torchvision 0.19 documentation

这是最新的pytorch官方文档,可能每一年都会变,目前2024年最新版的就是这样

往下滑,找到这里【Dataset】的【Built-in dataset】,这个就是内置数据集的官方文档

然后就能看到各种各样的数据集,看不懂可以下载一下网页翻译的插件,或者用微信的截图,可以实时翻译任何界面的英文

然后大概整体介绍一下我们常用的一些数据集:

  • MNIST:手写数字图像数据集,用于图像分类任务。
  • CIFAR:包含10个类别、60000张32x32的彩色图像数据集,用于图像分类任务。
  • COCO:通用物体检测、分割、关键点检测数据集,包含超过330k个图像和2.5M个目标实例的大规模数据集。
  • ImageNet:包含超过1400万张图像,用于图像分类和物体检测等任务。
  • Penn-Fudan Database for Pedestrian Detection and Segmentation:用于行人检测和分割任务的数据集。
  • STL-10:包含100k张96x96的彩色图像数据集,用于图像分类任务。
  • Cityscapes:包含5000张精细注释的城市街道场景图像,用于语义分割任务。
  • SQUAD:用于机器阅读理解任务的数据集。

其他的比较复杂以后再说,目前就这些可以了解一下,比如点进去CIFAR10可以看到,是一个对图片物品的识别

点击MNIST,这是来自各个人的手写文字的图片数据集

2、了解数据集的三大分类:训练集、验证集、测试集

数据集具体分为三大类:训练集、验证集、测试集

我们可以用以前读书时的上课知识、课后练习题、期末考试来比喻这三类数据集:

假设我们有已知的T1、T2、T3三个点,对应的 “坐标” 是数据集里【带有标签的样本对】:(x1, y1)、(x2, y2)、(x3, y3),x代表输入、y代表标签

这两个坐标会分别得到两个点T1、T2数据,当我们用这两个数据进行机器训练时就会得到一个函数式(假设):y = ax + b,那么这个【y = ax + b】就是【模型

然后我们当我们把T3的【x3】输入,根据【模型】:【y = ax + b】得出 \hat{y}这个 \hat{y}是机器模型训练得到的结果,而我们已知的T3坐标是【x3,y3】(就比如说 [0013035.jpg] 这个图片对应的是 [蚂蚁] 这个标签)

那么现在将\hat{y}】与【y3】进行对比,就可以得出这个模型的好坏。

然后我们刚刚知道,(x1, y1)、(x2, y2)参与了模型训练,因此就是【训练集】;而(x3, y3)没有参与训练,只是在最后对(x1, y1)、(x2, y2)训练出来的模型进行测试,他就是【测试集】

【训练集】【测试集】有严格划分,训练集只参与训练,相当于我们做的课后练习、模拟试卷,而测试集只参与测试,相当于高考试卷,你总不能把高考题直接给学生做了再参加高考吧?

那么【验证集】又是什么?

我们前面的例子里,训练机器模型的时候,我们根据T1、T2获得了【y=ax+b】这么个模型式子,那么a、b就是【参数】

在实际机器训练中,我们还需要一种参数叫【超参数】,它考虑得是更加精细的方面的可能,通过调整这些超参数,才能让模型更加精确、误差更小

但是随着业务越来越复杂,需要调整的超参数越来越多、越来越难,人为调整已经不太适用

那么就产生了【验证集】,借助它可以获得【最优超参数组合】

【训练集】产生模型,【验证集】评估模型并找出一组最有超参数,然后再交给【训练集】产出新的模型......如此反复,最终将最优化的模型交给【测试集】测试

3、pytorch下载并使用数据集

回到代码 ,现在我们先用【CIFAR-10】这个数据集为例子讲解,点开官方文档,这次点左边不要点右边

然后可以看到,【CIFAR-10】这个数据集需要传入这么几个参数,具体作用我写在图片了

执行一下代码进行下载:

import torchvision# 这里我们设置train_set是训练集数据、test_set是测试集数据
# 然后因为我根目录已经有一个"dataset"目录放自定义数据集了,我就指定在根目录再创一个文件夹叫“dataset2”,用来放下载的内置数据集
# 然后【训练集】的train参数设置为true,【测试集】就是false,最后允许下载
train_set = torchvision.datasets.CIFAR10("./dataset2", train=True, download=True)
test_set = torchvision.datasets.CIFAR10("./dataset2", train=False, download=True)

(网速因人而异吧,我这个巨特么慢)

那么有迅雷或者百度网盘的超级会员的可以试一下去迅雷或者百度网盘下载,然后复制粘贴进项目里就行了,没有的话其实也是一样,可以安心下载完挂后台去干别的了,至少一小时起步

感谢,来自该博主文章:CIFAR-10 / CIFAR-100数据集(官网/网盘下载)_cifar100pytorch下载-CSDN博客

链接:百度网盘 请输入提取码
提取码:uwis

N万年之后......终于下载安装完毕,那么而我们在下载的代码下面输出一下数据集看看就会发现成功了,这里注意,即使我们下载完了数据集,这两句代码还是要留着,download参数也不用换成False,因为它会自动检测已经下载存在,就不会重复下载了

import torchvision# 这里我们设置train_set是训练集数据、test_set是测试集数据
# 然后因为我根目录已经有一个"dataset"目录放自定义数据集了,我就指定在根目录再创一个文件夹叫“dataset2”,用来放下载的内置数据集
# 然后【训练集】的train参数设置为true,【测试集】就是false,最后允许下载
train_set = torchvision.datasets.CIFAR10("./dataset2", train=True, download=True)
test_set = torchvision.datasets.CIFAR10("./dataset2", train=False, download=True)# 打印训练集和测试集的数据量
print(train_set[0])

然后在PyTorch的内置数据集中,无论是CIFAR-10、MNIST还是其他数据集,当你索引数据集对象时,都会返回一个元组,其中第一个元素是【数据】,第二个元素是【标签的索引】。

那么我们知道python可以多个变量同时接收多个返回值,那么就可以设两个变量来接收【数据】和【标签的索引】,变量名随便起,比如:

那么我们将代码放到【python控制台】运行的话,就会看到数据集有这么个属性:【classes】,这个属性是列表list,而我们刚刚获取到的【标签的索引】就是对应【classes】列表里的索引,那么【数据集.classes[ 标签的索引 ]】就可以获取到【标签】了

4、结合transforms,把数据集转化成transforms的tensor型数据

transform有个函数叫【Compose】,它可以将多个操作组合起来,相当于打包,然后形成一个操作流程,一次性依次对图像进行所有操作

例如,假设你有一个图像,你想要先将其转换为灰度图像,然后再将其大小调整为32x32。你可以使用【torchvision.transforms.Compose】来组合这两个转换操作:

from torchvision import transforms# 创建两个转换操作
to_grayscale = transforms.Grayscale(num_output_channels=1) # 调灰度的操作
resize = transforms.Resize((32, 32)) # 裁剪图像大小的操作# 组合这两个转换操作,现在就能用它代表这两个操作了
transform = transforms.Compose([to_grayscale, resize])# 使用组合的转换操作对图像一次性进行两个操作转换
image = transform(image)

那么有了【transform转换操作】之后,翻看上面我们讲过,pytorch的【CIFAR-10】接收的参数里有一个叫【transform=?】,就是用来接收【transform转换操作】的,在两个 “下载代码” 那里的第三个参数位置加上【transform = transform转换操作】

train_set = torchvision.datasets.CIFAR10("./dataset2", train=True, transform=dataset_transfrom, download=True)
test_set = torchvision.datasets.CIFAR10("./dataset2", train=False, transform=dataset_transfrom, download=True)

5、最后结合tensorboard打印一下图像

既然现在图像数据集已经成了tensor类型数据,那就可以用tensorboard打印一下图像了

完整代码:

import torchvision
from torch.utils.tensorboard import SummaryWriter# torchvision.transforms.Compose是一个函数,它可以将多个图像转换操作组合在一起
dataset_transfrom = torchvision.transforms.Compose([torchvision.transforms.ToTensor() # 将图像转换为【tensor(张量)】操作# 还可以添加一些裁剪、转灰度......等等图像操作
])# 这里我们设置train_set是训练集数据、test_set是测试集数据
# 然后因为我根目录已经有一个"dataset"目录放自定义数据集了,我就指定在根目录再创一个文件夹叫“dataset2”,用来放下载的内置数据集
# 然后【训练集】的train参数设置为true,【测试集】就是false,并开启transform数据转换,最后允许下载
train_set = torchvision.datasets.CIFAR10("./dataset2", train=True, transform=dataset_transfrom, download=True)
test_set = torchvision.datasets.CIFAR10("./dataset2", train=False, transform=dataset_transfrom, download=True)# 输出一些tensor类型的数据集数据
print(train_set[0])# 最后利用tensorboard打印出照片
write = SummaryWriter("CIFAR-10")
for i in range(10):# 遍历10张图片img, target = train_set[i]write.add_image("【CIFAR-10】_img", img, i)write.close()

记得关闭上一个tensorboard的终端

相关文章:

PyTorch的torchvision内置数据集使用,transform+pytorch联合使用

一、PyTorch的torchvision内置数据集介绍 我们前面的文章里谈到的数据集是我们自己找的一些自定义数据集。那么在Pytorch中存在2种数据集(Dataset),即内置数据集(Built-in dataset)和自定义数据集(Custom d…...

MT1619 (A/B/C对应18W/22W/25W)如何避免温度高、电磁干扰

MT1619系列是一款开关电源芯片,其内部集成了一颗高集成度、高性能的电流模式 PWM 控制器和一颗功率 MOSFET。MT1619 具有恒功率功能,特别适用于 PD 充电器、电源适配器等中小功率的开关电源设备。极低的启动电流与工作电流、以及轻载或者无负载情况下的 …...

Hadoop 的基本 shell 命令

Hadoop 的基本 shell 命令主要用于与 Hadoop 分布式文件系统(HDFS)和 MapReduce 进行交互。以下是一些常用的 Hadoop shell 命令: 一、 HDFS 命令 1. 查看 HDFS 状态 hdfs dfsadmin -report: 显示 HDFS 的健康状态和容量信息。 2. 文件系统操…...

HCIP-交换实验

根据实验要求,完成实验内容: 实验拓扑图如下所示 : 搭建拓补图: LSW1,LSW2: [LS1]interface Eth-Trunk 0 [LS1-Eth-Trunk0]q [LS1]interface g0/0/3 [LS1-GigabitEthernet0/0/3]eth-trunk 0 [LS1]interf…...

Windows下线程的创建与使用(win32-API)

一、前言 线程是比进程更轻量级的执行单元,允许在一个进程中并发执行多个控制流。每一个线程都有自己的程序计数器、寄存器集和栈空间,但它们共享所属进程的全局数据和资源。这种共享内存模型使线程间的通信比进程间通信更为高效,同时也带来…...

华为OD机试(C卷,100分)- 游戏分组

题目描述 部门准备举办一场王者荣耀表演赛,有 10 名游戏爱好者参与,分为两队,每队 5 人。 每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把 10 名参赛者分为示例尽量相近的两队。 一队的实力可以表示为这一队 5 名队员的评分总和。 现在给你…...

centos7.9系统按cloudpods

1. 简介: Cloudpods 是一款简单、可靠的企业IaaS资源管理软件。帮助未云化企业全面云化IDC物理资源,提升企业IT管理效率。 Cloudpods 帮助客户在一个地方管理所有云计算资源。统一管理异构IT基础设施资源,极大简化多云架构复杂度和难度&…...

android apk 加固后的地图加载异常及重新签名

1.首先根据需求将打包生成后的APK进行加固,可以使用360、阿里、腾讯加固等。 2.加固后的APK无法直接安装,需要重新进行签名。 3.首先找到sdk的位置,进入build-tools目录。 4.根据gradle文件选择版本目录。 5.将加固后的APK放至该目录下。在…...

手把手搭建私人在线备份系统

对于打工人来说,什么文件最重要? 那就是——打不开的文件最重要! 那么,如何才能避免这样的事情发生呢?这时候就需要使出我们的大杀器——文件备份! 文件备份怎么搞才最合适呢? 是使用移动硬盘&a…...

数据分析实操案例分享:如何对人事数据进行BI分析?

在数据驱动时代,数据分析已经成为企业和个人获取竞争优势的关键技能。特别是在人力资源管理领域,数据分析的应用正变得越来越重要。通过对在职和离职数据的深入分析,企业不仅能够洞察员工的动态,揭示员工流动的模式、预测人才需求…...

谷粒商城实战笔记-228-商城业务-认证服务-自定义SpringSession完成子域session共享

文章目录 一,228-商城业务-认证服务-自定义SpringSession完成子域session共享1. cookieSerializer()2. springSessionDefaultRedisSerializer() 一,228-商城业务-认证服务-自定义SpringSession完成子域session共享 前面弄清楚了分布式服务中的两个问题&…...

Elasticsearch核心

一、几个核心概念 1、节点:一个节点(Node)就是一个es进程,一个服务器可以部署多个节点 查询节点以及节点信息: http://127.0.0.1:9200/_cat/nodes?v 2、角色,是指节点在集群中担任什么角色&#xff1a…...

Python.NET:打开Python与.NET世界互通的大门

Python.NET 是一个强大的工具,它为 Python 程序员提供了一种与 .NET 公共语言运行时 (CLR) 无缝集成的途径。它就像一座桥梁,将 Python 的灵活性与 .NET 的强大功能连接起来,为开发者提供了前所未有的自由和可能性。 1. Python.NET 的核心价值…...

uniapp - plugins的组件配置使用

点击进入到uniapp中mp-weixin的配置中 点击进入小程序的plugin的配置 在项目中,我们可引用插件的使用,例如一些快递100,点餐插件的业务引入 添加插件 在使用插件前,首先要在小程序管理后台的“设置-第三方服务-插件管理”中添加…...

Microsoft Edge WebView2 截图

使用工具可以保存可见区域 CallDevToolsProtocolMethodAsync("Page.captureScreenshot", Params) always returns only visible part of html page including scrollbars. I tried all possible combinations of "fromSurface" and "captureBeyondVi…...

[word] 复杂文本如何仅全选word中的表格 (简单跟做即可)

问题描述 在word文档中,有各种形式的文本,有纯文本,有表格,有图片或者更多其它形式参杂在一起,本篇记录解决如何只全选中文档中的所有表格形式的部分,从而方便对表格进行批量修改和操作 环境说明 word版…...

Aop切面编程

学习视频 一、定义模型:订单保存模型,订单更新模型,业务层,日志模型 订单保存模型 /*** author durunwu* date 2024-08-20-21:04*/ Data public class SaveOrder {private Long id; }订单更新模型 /*** author durunwu* date …...

目标检测 | yolov9 原理和介绍

相关系列: 目标检测 | yolov1 原理和介绍 目标检测 | yolov2/yolo9000 原理和介绍 目标检测 | yolov3 原理和介绍 目标检测 | yolov4 原理和介绍 目标检测 | yolov5 原理和介绍 目标检测 | yolov6 原理和介绍 目标检测 | yolov7 原理和介绍 目标检测 | yolov8 原理和…...

如何在不格式化的情况下解锁Android智能手机密码

如果您忘记了密码,您的 Android 移动设备会将您锁定。发生这种情况时,通常可以通过执行恢复出厂设置来重新获得对设备的访问权限。可悲的是,这将导致所有数据的丢失。下面列出了在不丢失任何个人数据的情况下解锁锁定的Android 手机的有效方法…...

ts语法、nvm的使用以及github访问速度

TS基础语法 let aa:string "123" let bb:number 123 let cc:boolean true let dd:undefined undefined let ee:null null let list:Array<string> ["1", 2, 3] let list2:string[] ["1", 2, 3]interface Ibj {name: string,age: n…...

缓存实现方式

缓存是一个常见的话题&#xff0c;因为它对于提高应用程序性能至关重要。缓存是一种存储数据的临时地方&#xff0c;以便快速访问数据&#xff0c;减少对原始数据源&#xff08;如数据库或文件系统&#xff09;的访问次数&#xff0c;从而提高应用程序的响应速度和吞吐量。 Jav…...

鸿蒙内核源码分析(中断切换篇) | 系统因中断活力四射

关于中断部分系列篇将用三篇详细说明整个过程. 中断概念篇 中断概念很多&#xff0c;比如中断控制器&#xff0c;中断源&#xff0c;中断向量&#xff0c;中断共享&#xff0c;中断处理程序等等.本篇做一次整理.先了解透概念才好理解中断过程.用海公公打比方说明白中断各个概念…...

回归预测|基于雪消融优化相关向量机的数据回归预测Matlab程序SAO-RVM 多特征输入单输出 SAO-RVM

回归预测|基于雪消融优化相关向量机的数据回归预测Matlab程序SAO-RVM 多特征输入单输出 SAO-RVM 文章目录 前言回归预测|基于雪消融优化相关向量机的数据回归预测Matlab程序SAO-RVM 多特征输入单输出 SAO-RVM 一、SAO-RVM模型1. 基本模型原理2. 贝叶斯框架3. 模型优化流程4. 总…...

如何在HTML中创建链接?什么是CSS定位?什么是CSS优化?

HTML使用标签 <a> 来设置超文本链接。 超链接可以是一个字&#xff0c;一个词&#xff0c;或者一组词&#xff0c;也可以是一幅图像&#xff0c;您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。 当您把鼠标指针移动到网页中的某个链接上时&#xff0c;箭…...

1.Java:集合

集合作用&#xff1a; 1.动态保存任意多个对象。 2.提供操作对象方法比如add,remove,set,get等方法。 3.使用集合添加&#xff0c;删除代码简洁。 集合分类 集合分为单列集合以及双列集合。 单列集合&#xff1a; 双列集合&#xff1a; Collection接口特点 1.Collection…...

C语言从头学49—文件操作(四)

本文继续上一篇有关 "文件操作" 内容并继续其编号。 十九、函数 ftell() 函数 ftell() 返回文件内部指针的当前位置&#xff0c;该函数原型定义在头文件 stdio.h中。 使用格式&#xff1a;ftell(参1); 参1&#xff1a;文件指针 返…...

算法力扣刷题记录 八十四【46.全排列】

前言 回溯章节第11篇。记录 八十四【46.全排列】 回溯学习过&#xff1a;组合问题、切割问题、子集问题。 本文是排列问题。 一、题目阅读 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&…...

[C++进阶]map和set

一、关联式容器 STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身。 那什么是关联式容器&#xff1f;它与序列式容器…...

ios机型下input输入框输入时拉高

问题 部分iphone或者ipad机型下&#xff0c;网页中使用input输入框时&#xff0c;调起ios软键盘输入时&#xff0c;input输入框被拉高&#xff0c;导致布局错位或者变化。 <input type"text" name"phonenum" >直观表现 注&#xff1a;在android机型…...

nacos 使用 docker 单机部署连接 MySQL 数据库并开启鉴权

文章目录 本地部署的配置启用鉴权(未验证) docker部署的配置修改docker 镜像源启用鉴权&#xff0c;必须添加如下环境变量如何生成鉴权的密钥 完整环境变量docker启动命令 本地部署的配置 文件结构 application.properties #配置文件 mysql-schema.sql …...