Pytorch Dataset类的使用(个人学习笔记)

这篇具有很好参考价值的文章主要介绍了Pytorch Dataset类的使用(个人学习笔记)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

训练模型一般都是先处理 数据的输入问题预处理问题

Pytorch提供了几个有用的工具:torch.utils.data.Dataset类torch.utils.data.DataLoader类。

流程是先把 原始数据 转变成 torch.utils.data.Dataset类

随后再把得到torch.utils.data.Dataset类 当作一个参数传递给 torch.utils.data.DataLoader类

得到一个数据加载器,这个数据加载器每次可以返回一个 Batch 的数据供模型训练使用。

这一过程通常可以让我们把一张 生图 通过标准化、resize等操作转变成我们需要的 [B,C,H,W] 形状的 Tensor。

用原始数据都造出来的 Dataset子类 其实就是一个静态的数据池,这个数据池支持我们用 索引 得到某个数据,想要让这个数据池流动起来,源源不断地输出 Batch 还需要下一个工具 DataLoader类 。所以我们把创建的 Dataset子类 当参数传入 即将构建的DataLoader类才是使用Dataset子类最终目。

Dataset类的作用:提供一种方式去获取数据及其对应的真实Label

pycharm提供了三种利用python的方式

jupyter notebook,在pycharm中的python控制台,以及python文件

我觉得利用控制台和比较方便

Pytorch Dataset类的使用(个人学习笔记)

图片库可以直接拖进来

Pytorch Dataset类的使用(个人学习笔记)

help(Dataset)或者Dataset??查看帮助

Pytorch Dataset类的使用(个人学习笔记)

dataset类是一个抽象类,所有的数据集想要在数据与标签之间建立映射,都需要继承这个类,所有的子类都需要重写__getitem__方法,该方法根据索引值获取每一个数据并且获取其对应的Label,子类也可以重写__len__方法,返回数据集的size大小。

一般__init__负责加载全部原始数据,初始化之类的。

__getitem__负责按索引取出某个数据,并对该数据做预处理。

但是对于如何加载原始数据以及如何预处理数据完全是由自己定义的,包括我们用 dataset[index] 取出的数据的组织形式都是完全自行定义的。

对于def __init__(self, root_dir, label_dir)

很简单,就是接收实例化时传入的参数:获取根目录路径、子目录路径

然后将两个路径进行组合,就得到了目标数据集的路径

我们将这个路径作为参数传入listdir函数,从而让img_path_list中存储该目录下所有文件名

此时通过索引就可以轻松获取每个文件名

接下来,我们要使用这些初始化的信息去获取其中的每一个图片的JpegImageFile对象

from torch.utils.data import Dataset  ##导入Dataset类
from PIL import Image  ## 读取图片的库,可以对图片进行可视化
##使用PIL来读取数据,它提供一个Image模块,可以让我们提取图像数据,我们先导入这个模块
import os  ## 关于系统操作的库,主要用来对文件路径操作,对数据所在文件路径进行字符串操作

class MyData(Dataset): ##首先我们创建一个类,类名为MyData,这个类要继承Dataset类

    def __init__(self, root_dir, label_dir):
##首先需要写的是__init__方法,此方法用于对象实例化,通常用来提供类中需要使用的变量
        self.root_dir = root_dir##根目录路径
        self.label_dir = label_dir##标签路径
        self.path = os.path.join(self.root_dir, self.label_dir)
##目标路径文件夹是两个路径拼在一起,os方法对字符串进行拼接
        self.img_path_list = os.listdir(self.path)
##从数据集目标路径中,获取所有文件的名字,存储到一个列表中,listdir方法会将路径下的所有文件名(包括后缀名)组成一个列表



    def __getitem__(self, idx):
##__getitem__方法,该方法根据索引值获取每一个数据并且获取其对应的Label
## 默认是item,但常改为idx,是index的缩写,以便以后数据集获取后我们使用索引编号访问每个数据
        img_name = self.img_path_list[idx]## 从文件名列表中获取了文件名
        img_item_path = os.path.join(self.root_dir, self.label_dir, img_name)
## 组装路径,获得了图片具体的路径
        img =Image.open(img_item_path)##使用PIL读取这个图像
        label = self.label_dir
        return img, label ##此处img是一个JpegImageFile对象,label是一个字符串。
##使用这个类进行实例化时,传入的参数是根目录路径,以及对应的label名,我们就可以得到一个MyData对象


    def __len__(self): ##__len__方法,返回数据集的size大小
        return len(self.img_path_list)
##__len__主要功能是获取数据集的长度,由于我们在初始化中已经获取了所有文件名的列表,所以只需要知道这个列表的长度,就知道了有多少个文件,也就是知道了有多少个具体的数据




##有了这个MyData对象后,我们可以直接使用索引来获取具体的图像对象,索引即可调用__getitem__方法,会返回我们根据索引提取到的对应数据的图像对象以及其label

root_dir = "hymenoptera_data/train" ##在这里我们用的是相对路径
ants_label_dir = "ants" ##指向存放train数据集里的ants数据的文件夹
bees_label_dir = "bees"
ants_dataset = MyData(root_dir, ants_label_dir)
bees_dataset = MyData(root_dir, bees_label_dir)
train_dataset = ants_dataset + bees_dataset
img1, label1 = ants_dataset[0]  # 返回一个元组,返回值是__getitem__方法的返回值 
img2, label2 = bees_dataset[0]
from PIL import Image 
img_path = "D:\\DeepLearning\\dataset\\train\\ants\\0013035.jpg"##图片的绝对路径
img = Image.open(img_path) ##使用Image的open方法读取图片
img.size##读取图片大小
img.show()##查看图片
##控制台右侧可以看到一些属性
Pytorch Dataset类的使用(个人学习笔记)

其他具体使用可以参考【深度学习】PyTorch Dataset类的使用与实例分析 - 知乎 (zhihu.com)构建数据集路径部分

以及B站https://www.bilibili.com/video/BV1hE411t7RN?p=7文章来源地址https://www.toymoban.com/news/detail-445968.html

Pytorch Dataset类的使用(个人学习笔记)
Pytorch Dataset类的使用(个人学习笔记)
Pytorch Dataset类的使用(个人学习笔记)
Pytorch Dataset类的使用(个人学习笔记)

到了这里,关于Pytorch Dataset类的使用(个人学习笔记)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pytorch 训练过程内存泄露/显存泄露debug记录:dataloader和dataset导致的泄露

    微调 mask-rcnn 代码,用的是 torchvision.models.detection.maskrcnn_resnet50_fpn 代码,根据该代码的注释,输入应该是: images, targets=None (List[Tensor], Optional[List[Dict[str, Tensor]]]) - Tuple[Dict[str, Tensor], List[Dict[str, Tensor]]] 所以我写的 dataset 是这样的: 大概思路是: 先把所有的标注信息读入内存

    2024年02月14日
    浏览(48)
  • PyTorch学习笔记(十三)——现有网络模型的使用及修改

     以分类模型的VGG为例   设置为 False 的情况,相当于网络模型中的参数都是初始化的、默认的 设置为 True 时,网络模型中的参数在数据集上是训练好的,能达到比较好的效果 CIFAR10 把数据分成了10类,而 vgg16 模型把数据分成了 1000 类,如何应用这个网络模型呢? 方法1:把最

    2024年02月12日
    浏览(37)
  • 【深度学习】模型训练云服务器平台推荐!!!个人心路历程,新手少踩坑

    作为一名深度学习训练小白,想上github下一个一般的网络练练,但是每次千辛万苦地配置好环境,成功运行,没开始几步,就提示显存不够! (362条消息) 把显存用在刀刃上!17 种 pytorch 节约显存技巧_听 风、的博客-CSDN博客_降低显存占用 上网一搜一大堆教程,改小batchsize,清

    2023年04月22日
    浏览(42)
  • 深度学习技巧应用22-构建万能数据生成类的技巧,适用于CNN,RNN,GNN模型的调试与训练贯通

    大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用22-构建万能数据生成类的技巧,适用于CNN,RNN,GNN模型的调试与训练贯通。本文将实现了一个万能数据生成类的编写,并使用PyTorch框架训练CNN、RNN和GNN模型。 目录: 1.背景介绍 2.依赖库介绍 3.万能的数据生成器介绍

    2024年02月12日
    浏览(38)
  • PyTorch深度学习实战(1)——神经网络与模型训练过程详解

    人工神经网络 ( Artificial Neural Network , ANN ) 是一种监督学习算法,其灵感来自人类大脑的运作方式。类似于人脑中神经元连接和激活的方式,神经网络接受输入,通过某些函数在网络中进行传递,导致某些后续神经元被激活,从而产生输出。函数越复杂,网络对于输入的数据拟

    2024年02月06日
    浏览(47)
  • PyTorch Lightning快速学习教程一:快速训练一个基础模型

    粉丝量突破1200了!找到了喜欢的岗位,毕业上班刚好也有20天,为了督促自己终身学习的态度,继续开始坚持写写博客,沉淀并总结知识! 介绍:PyTorch Lightning是针对科研人员、机器学习开发者专门设计的,能够快速复用代码的一个工具,避免了因为每次都编写相似的代码而

    2024年02月16日
    浏览(54)
  • 学习pytorch 2 导入查看dataset

    B站小土堆视频 https://download.pytorch.org/tutorial/hymenoptera_data.zip

    2024年02月13日
    浏览(32)
  • pytorch实战-图像分类(二)(模型训练及验证)(基于迁移学习(理解+代码))

    目录 1.迁移学习概念 2.数据预处理  3.训练模型(基于迁移学习) 3.1选择网络,这里用resnet 3.2如果用GPU训练,需要加入以下代码 3.3卷积层冻结模块 3.4加载resnet152模 3.5解释initialize_model函数 3.6迁移学习网络搭建 3.7优化器 3.8训练模块(可以理解为主函数) 3.9开始训练 3.10微调

    2024年02月14日
    浏览(46)
  • torchvision pytorch预训练模型目标检测使用

    参考: https://pytorch.org/vision/0.13/models.html https://blog.csdn.net/weixin_42357472/article/details/131747022 有分类、检测、分割相关预训练模型 https://pytorch.org/vision/0.13/models.html#object-detection-instance-segmentation-and-person-keypoint-detection https://h-huang.github.io/tutorials/intermediate/torchvision_tutorial.html https

    2024年03月19日
    浏览(41)
  • U2Net、U2NetP分割模型训练---自定义dataset、训练代码训练自己的数据集

    前言 博客很久没有更新了,今天就来更新一篇博客吧,哈哈; 最近在做图像分割相关的任务,因此,写这么一篇博客来简单实现一下分割是怎么做的,内容简单,枯燥,需要耐心看,哈哈; 博客的内容相对简单,比较适合刚接触分割的同学参考学习(这篇博客在算法训练上

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包