首页 > 其他分享 >小土堆学习笔记7:torchvision中的数据集使用

小土堆学习笔记7:torchvision中的数据集使用

时间:2024-10-25 18:17:36浏览次数:8  
标签:10 torchvision transform 笔记 dataset train 土堆 数据

本节视频主要内容

如何把数据集和transform结合在一起,毕竟因为不可能只对一张图片进行处理,所以会讲到在科研中需要使用的标准数据集该如何下载、组织、查看、使用。(也就是.dataset和.transforms如何进行联合使用)

torchvision的几个模块

进入PyTorch官网,点击官方文档(DOCS),看到不同的块,选择torchvision,看到API文档,在写代码时只需指定相应的数据集并设置参数,它就能自己去下载和使用这些标准数据集。

例如COCO数据集常用于目标检测、语义分割,MNIST手写文字,CIFAR常用于物体识别

torchvision除了.dataset这个模块,还有:

.io模块,但不常用;

.models模块,提供一些比较常见的神经网络,比较重要也比较常用,例如分类、语义分割、视频分类;

.ops模块提供少见操作;

.transforms是之前讲解的内容;

.utils提供一些小工具,如TensorBoard。

什么是CIFAR

CIFAR-10 是一个经典的图像分类数据集,包含 10 个类别的 60,000 张彩色图像(每张图像 32x32 大小),其中有 50,000 张用于训练,10,000 张用于测试。这个数据集已经被很多计算机视觉的研究人员用于深度学习模型的训练和测试。

torchvision.datasets.CIFAR10torchvision 库中的一个内置数据集,用户可以很方便地通过它来加载 CIFAR-10 数据集(如代码所示)。

target_transform的作用

target_transform 参数允许你对数据集的标签(也就是 target)进行变换。它的作用是在返回数据之前,对目标值进行某些变换操作。

举例说明

如果 CIFAR-10 中的标签是 0 到 9 的整数,对应类别如飞机、汽车等,你可以通过 target_transform 将这些整数转换为 one-hot 编码(一个向量),用以适应不同的模型需求。例如:

from torchvision import transforms
import torch

def one_hot_transform(target):
    one_hot = torch.zeros(10)
    one_hot[target] = 1
    return one_hot

dataset = torchvision.datasets.CIFAR10(root='./data', train=True, target_transform=one_hot_transform)

设置断点,以及 Debug 与 Run 的区别

  • Run(运行): 在不设置断点的情况下,运行程序意味着代码会从头到尾顺序执行,并在没有错误的情况下完成。

  • Debug(调试): 进行 Debug 的目的是帮助开发者找出代码中的错误或问题。设置断点后,程序会在运行到断点时暂停,允许你逐步检查变量的值、执行的逻辑等。这样可以实时观察程序执行过程中每一步的状态。

    • 在代码中设置断点(红点处)并选择 Debug,而不是直接运行的目的是让程序在那一行代码执行之前暂停,你可以通过查看变量状态、函数调用等,找到问题或者验证程序的执行逻辑。

Debug窗口中 Threads & Variables 栏目

1. Threads(线程): 显示当前 Python 程序正在运行的线程。每个线程代表程序的一个执行路径。对于多线程程序,这里会列出所有线程的状态。

2. Variables(变量): 这个部分显示的是在当前调试上下文中,所有的局部和全局变量的状态。

  • classes 这行对应的是 CIFAR-10 中的类别和具体数字的映射关系。classes 的内容为一个列表,其中列出了 CIFAR-10 的所有类别,如飞机(airplane)、汽车(automobile),这些类别会对应数字 0 到 9。图中 classes 下的内容正是这个映射关系。

  • 其他可下拉内容

    • data:这是数据集本身的内容,即图片数据。
    • targets:这是数据集的目标标签(target),即每张图片对应的类别标签。
    • meta:这是一些元数据(如文件名、MD5 校验等)。
    • transform:显示了用于对数据进行转换的操作(如将图像转为 Tensor)。

train_set 与 test_set 

我们有如下两行代码:

train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, transform=dataset_transform, download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, transform=dataset_transform, download=True)
挨个解释其中的参数:

root="./dataset":表示数据集存储的根目录。如果该目录不存在,程序会自动下载数据集。

train=True/False:决定是否加载训练集(train=True)或测试集(train=False)。也就是说:

  • train=True:表示加载 训练集,也就是用于模型训练的数据。在 CIFAR-10 中,训练集有 50,000 张图像。

  • train=False:表示加载 测试集,也就是用于模型评估的数据。CIFAR-10 的测试集中包含 10,000 张图像。

transform=dataset_transform:对图像数据进行预处理转换的操作。在这个例子中,dataset_transform 将图像数据转为 Tensor(张量),使其可以用于 PyTorch 模型的训练。

download=True:如果数据集未下载过,会自动下载。

Python中for循环的写法

标准写法

for i in range(10):
    print(i)
这种写法会遍历从 0 到 9 的数值,循环 10 次。

遍历列表

for item in [1, 2, 3, 4]:
    print(item)
这种写法会遍历一个列表中的每个元素。

带索引遍历

for index, item in enumerate([10, 20, 30]):
    print(index, item)
这种写法会同时获取元素的索引和值。

enumerate() 是 Python 内置的一个函数,用于遍历一个可迭代对象(如列表、元组等)时,同时获取元素的索引和值。

举个例子,假设你有一个列表 [10, 20, 30],使用 enumerate() 函数可以同时得到列表中每个元素的索引和对应的值。

下面是一个简单的示例:

my_list = [10, 20, 30]
for index, value in enumerate(my_list):
    print(index, value)
输出结果:

0 10
1 20
2 30

  • index:表示当前元素的索引(位置),比如 0, 1, 2。
  • value:表示当前索引对应的元素的值,比如 10, 20, 30。

标签:10,torchvision,transform,笔记,dataset,train,土堆,数据
From: https://blog.csdn.net/qq_40525602/article/details/143237207

相关文章

  • 10月25日记录(《代码大全》(第二版)阅读笔记)
    精读笔记:《代码大全》(第二版)《代码大全》第二版是软件开发领域的经典之作,涵盖了从编程基础到复杂系统设计的各个方面。本书的核心目标是帮助开发者编写出高质量、易于维护的代码。通过详细阐述编程过程中的各种技术、方法和最佳实践,作者史蒂夫·迈克康奈尔为读者提供了丰富的知识......
  • 十月二十五日总结(阅读笔记)
    我读的是《程序员修炼之道:从小工到专家》。下面是阅读前三章总结的内容。第一章重点讲述了程序员的职业定位和自我提升的必要性。作者指出,作为一名程序员,首先要清楚自己的职业目标和定位。只有了解自己在职业生涯中想成为什么样的人,才能制定出切实可行的发展计划。书中提到,许多程......
  • Spring学习笔记_10-@Component
    @Component1.介绍在项目开发过程中,我们自己编写的类如果想注入到Spring中,由Spring来管理Bean的生命周期,就可以使用@Component注解将其注入到IOC容器中。@Component注解还有三个衍生注解,那就是@Repository、@Service和@Controller注解,并且衍生出的注解通常会在使用MVC架构开......
  • Spring学习笔记_09——Environment
    Environment1.介绍Spring框架中的Environment是一个非常重要的概念,它提供了访问当前运行环境配置的API。Environment是一个接口,它包含了多个方法,用于获取配置参数、设置默认配置源、激活特定的配置文件等。在Spring应用中,Environment实例通常被注入到需要访问配置信息的......
  • 职业技能大赛—物联网应用开发赛项(Ubuntun_Linux)精华笔记 (03)
    MySQL中的show各种查看命令介绍//全局变量在MySQL启动的时候由服务器自动将它们初始化为默认值,这些默认值可以通过更改my.ini这个文件来更改。//MySQL中的show各种查看命令介绍是必须了解的Mysql基础操作还请您认真看下去 1.使用show查看showtables或showtablesfrom......
  • 学习笔记(四):页面和自定义组件生命周期
    页面和组件的定义:自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的......
  • 普罗米修斯笔记
    参数解释名词解释例子、说明瞬时查询查询特定时间点下的计算结果mysql连接数这种只有一个数据点的指标区间查询查询在一段时间返回内的计算结果cpu使用率这种多个数据点的指标时间段你要分析的一个具体的时间范围只用于区间查询时间窗口你要进行计算的......
  • 学习笔记(三):自定义组件
    自定义组件基于struct实现,1、struct:struct+自定义组件名+{...}的组合构成自定义组件,不能有继承关系。对于struct的实例化,可以省略new。2、@Component:@Component装饰器仅能装饰struct关键字声明的数据结构。struct被@Component装饰后具备组件化的能力,需要实现build方法描......
  • 卢卡斯定理学习笔记
    卢卡斯定理对于非负整数\(a\),\(b\)和质数\(p\),有\[C_{a}^{b}\equivC_{a~mod~p}^{b~mod~p}\cdotC_{\lfloor{a/p}\rfloor}^{\lfloor{b/p}\rfloor}~~\left({mod~p}\right)\]证明引理\[\left({1+x}\right)^{p^{\alpha}}\equiv1+x^{p^{\alpha}}~~\left(......
  • FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
    ijkplayer是一款由B站研发的移动端国产播放器,它基于FFmpeg3.4版本,同时兼容Android和iOS两大移动操作系统。ijkplayer的源码托管地址为https://github.com/bilibili/ijkplayer,截止2024年9月15日,ijkplayer获得3.24万星标数,以及0.81万个分支数,而这还是ijkplayer停止更新6年之后的数据,......