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

Dataset与DataLoader、transform

文章目录

  • 1、Dataset
  • 2、DataLoader
    • 2.1 参数详解
      • 2.1.1 num_works
      • 2.1.2 pin_memory
      • 2.1.3 collate_fn
  • 3、图像增强
  • 4、重写transform

1、Dataset

在 PyTorch 中,如果要创建自定义的数据集(Dataset),通常会继承 torch.utils.data.Dataset 类。这是因为 PyTorch 提供了 Dataset 类来帮助管理数据集,并定义了一些必要的方法和属性,如 lengetitem 等。

在这里插入图片描述

import torch.utils.data as data
import torch
class MyDataSet(data.Dataset):def __init__(self):#创建tensor 含有20个数值 0-19self.data=torch.arange(0,20)def __getitem__(self, index):return self.data[index]def __len__(self):return len(self.data)if __name__ == '__main__':dataset=MyDataSet()print(len(dataset)) #20print(dataset[3]) #tensor(3)

2、DataLoader

if __name__ == '__main__':dataset=MyDataSet()print(len(dataset)) #20print(dataset[3]) #tensor(3)#定义读取规则 这里是打乱顺序 每次读取4个 所以20/4=5 Dataloader的长度是5Dataloader=data.DataLoader(dataset,shuffle=True,batch_size=4)print(len(Dataloader))for i in Dataloader:print(i)   #tensor([ 5, 10, 15, 16])# tensor([ 7, 18,  4,  0])# tensor([11,  3, 14,  1])# tensor([19,  8, 13, 12])# tensor([ 6,  2,  9, 17])

2.1 参数详解

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/95124230fc354

2.1.1 num_works

就是看用几个GPU来同时计算 一个GPU计算一个batch_SIZE
在这里插入图片描述

2.1.2 pin_memory

加快读取速度 默认为false

2.1.3 collate_fn

即我们DataLoader 每迭代出一个batch_size 是一个什么样的格式。
分类任务 其实collate_fn 不用重写 用官方自带的即可
get_item 首先根据索引找到每张图片及标签 然后是一个列表形式,之后再通过collate_fn 将图片和标签重组在一起,images的shape为 (batch_size,C,H,W).labels的shape为(batch_size,1)
在这里插入图片描述
对于图像分割或者关键点检测 我们都需要重写collate_fn.因为target是一个字典,传统的无法进行读取。
,因为读取的数据包括image和targets,不能直接使用默认的方法合成batch。

 def collate_fn(batch):imgs_tuple, targets_tuple = tuple(zip(*batch))imgs_tensor = torch.stack(imgs_tuple)return imgs_tensor, targets_tuple

3、图像增强

数据增强可以增加训练集的样本数量,缓解过拟合,并提高模型的泛化能力,从而有效提升算法的性能

图像预处理:
1、将图像转换成tensor 的数据格式
2、将图像的 像素值范围 由 0~255 转换为 0~1
3、(height, width, channel) =====>>>(channel, height, width)
4、归一化图像
归一化可以优化算法的收敛速度和性能,和 BN 层的作用差不多
归一化处理还可以消除不同图像之间的亮度和颜色差异,提高模型的鲁棒性。
在这里插入图片描述

4、重写transform

传统的transform接口 只能接受一个参数即图像本身。
重写transform的目的:可以接受多个参数,可以保证对我们的图像和标注进行同步处理,比如图像分类任务,如果我们对图像及进行了预处理,比如进行了图像裁剪和缩放以及旋转等,其对应的标注框也应该做同步变换,否则就会出错,这时候就需要我们重写transform,对图像和标注做同步处理。

比如:

class Compose(object):"""组合多个transform函数"""def __init__(self, transforms):self.transforms = transformsdef __call__(self, image, target):for t in self.transforms:image, target = t(image, target)return image, target

归一化只对图像做处理就好

class Normalize(object):def __init__(self, mean=None, std=None):self.mean = meanself.std = stddef __call__(self, image, target):image = F.normalize(image, mean=self.mean, std=self.std)return image, target
http://www.lryc.cn/news/321110.html

相关文章:

  • 海豚调度系列之:认识海豚调度
  • MateBook 14s 2023款 集显 触屏(HKFG-16)原厂Win11系统
  • zookeeper快速入门(合集)
  • 鸿蒙App开发学习 - TypeScript编程语言全面开发教程(上)
  • Java语言: JVM
  • 下拉树级带搜索功能
  • 【数组、字符串】算法例题
  • docxTemplater——从word模板生成docx文件
  • Linux权限维持后门及应急响应
  • git相关指令
  • Apache Doris 2.1 核心特性 Variant 数据类型技术深度解析
  • accessToken
  • nodeJs 学习
  • STM32利用AES加密数据、解密数据
  • C语言技能数(知识点汇总)
  • Vue.js+SpringBoot开发企业项目合同信息系统
  • Linux Shell中的echo命令详解
  • php 页面中下载文件|图片
  • 2024年企业经济管理与大数据国际会议(ICEEMBD 2024)
  • 数新网络助阵哈工大国家级项目,共绘数智化新篇章,打造大数据法务平台
  • React+umi+dva 项⽬实战-lesson6
  • Vue el-table 合并单元格
  • 面试算法-61-二叉树的右视图
  • 【鸿蒙HarmonyOS开发笔记】动画过渡效果之布局更新动画
  • 过路费的题解
  • 51单片机LED8*8点阵显示坤坤跳舞打篮球画面
  • C++_day6:2024/3/18
  • 汇编语言和IBM的关系
  • 堆(数据结构)
  • 医药工厂5G智能制造数字孪生可视化平台,推进医药企业数字化转型