首页 > 其他分享 >Pytorch Dataset入门

Pytorch Dataset入门

时间:2024-04-16 10:22:55浏览次数:27  
标签:__ 入门 self Dataset Pytorch path label 数据

Dataset入门

Pytorch Dataset code:torch/utils/data/dataset.py#L17

Pytorch Dataset tutorial: tutorials/beginner/basics/data_tutorial.html

 
理论:

PyTorch中的Dataset是一个抽象类,用来表示数据集的接口,所有其他数据集都需要继承这个类,并且覆写以下三个方法:

  1. __init__:初始化数据集的一些配置,例如加载所有的数据标签。

  2. __len__:以便len(dataset)可以返回数据集的大小,例如n。如果n小于数据集长度,则只会取前n个的数据。

  3. __getitem__:输入是数据的索引,以便可以使用dataset[i]来获取第i个样本,数据增强一般会在这里做。

代码:

下面是一个自定义的Dataset样例(不可执行):

import cv2
import json
import torch.utils.Dataset as Dataset

class CustomDataset(Dataset):
    def __init__(self, imgs_path, labels_path, img_transform=None, label_transform=None):
        self.imgs_path = imgs_path  # 输入图像的路径,list
        self.labels_path = labels_path  # 输入图像对应的标签路径,list
        self.img_transform = img_transform  # 图像的数据增强
        self.label_transform = label_transform  # 标签的数据增强

    def __len__(self):
        return len(self.imgs_path)  # 返回数据集的长度

    def __getitem__(self, idx):
        img_path = self.imgs_path[idx]
        label_path = self.labels_path[idx]
        img = cv2.imread(img_path)  # 读取图像
        label = json.load(open(label_path))  # 读取标签
        if self.img_transform:  # 图像的数据增强
            img = self.img_transform(img)
        if self.label_transform:  # 标签的数据增强
            label = self.label_transform(label)
        return img, label  # 返回图像和标签,用于训练

 

总结:

值得注意的是,Dataset只负责数据的加载和预处理,对于如何训练数据(例如:是否进行shuffle,是否进行并行加速等)这部分的逻辑是由DataLoader实现的。通常情况下,我们会将DatasetDataLoader一起使用。

另外,PyTorch还提供了一些常用的数据集,如:ImageFolderCIFAR10MNIST等,这些数据集都是继承Dataset类,同时在init方法中进行数据的下载,以及在getitem方法中进行数据的加载和预处理。

Dataset是单线程读取数据,每次只能读取一个样本,不能一次性读取一个mini-batch的数据。

Dataset的主要特性包含:

  • 抽象接口:PyTorch通过定义一个抽象Dataset类,让用户可以使用统一的方式来加载各种不同的数据,提供了很好的扩展性。

  • 懒加载:实际的数据载入并不发生在构造数据集实例时,而是发生在用到这些数据时,这样可以提高内存利用率,并且可以实现对大规模数据的处理。

  • 预处理:Dataset的一个重要应用就是数据预处理,你可以在getitem函数中进行任何你的数据预处理过程。

 


嗨,欢迎大家关注我的公众号《CV之路》,一起讨论问题,一起学习进步~

标签:__,入门,self,Dataset,Pytorch,path,label,数据
From: https://www.cnblogs.com/gy77/p/18137555

相关文章

  • linux入门
    命令文件操作进入目录cd/root/test_linux_command新建文件touchnew_name.txt查看目录文件,是否新建成功ls进入文件vimnew_name.txt按i即可进入插入模式,按ESC退出插入模式进入命令模式。安全退出:wq查看文件//显示文件尾10行tail-n10new_name.txt//显......
  • ASP.NET Core 8 Swagger UI 入门使用
    介绍Swashbuckle有三个主要组成部分:Swashbuckle.AspNetCore.Swagger:将SwaggerDocument对象公开为JSON终结点的Swagger对象模型和中间件。Swashbuckle.AspNetCore.SwaggerGen:从路由、控制器和模型直接生成SwaggerDocument对象的Swagger生成器。它通常与Swagger终......
  • HTML入门
    HTML入门HTML简介ps:以下内容全部为个人理解,可能有些地方描述不够准确HTML的作用:为网页提供结构ps:就是通过标签来告诉浏览器哪些是标题,哪些是段落,哪些是列表标签可以通过属性来提供更多的信息,一般是成对出现的单标签和双标签:单标签一般用于没有内容的元素,双标签用于有内......
  • Pytorch计算机视觉实战(更新中)
    第一章人工神经网络基础1.1人工智能与传统机器学习学习心得:传统机器学习(ML):需要专业的主题专家人工提取特征,并通过一个编写良好的算法来破译给定的特征,从而判断这幅图像中的内容。输入-->人工提取特征-->特征-->具有浅层结构的分类器-->输出当存在欺骗性的图片出现时可能会......
  • shell入门基础
    一、shell变量定义及注意点1、shell只读变量定义:readonly例:a=xxx只读不可更改,不能unset(撤销变量)。注意点:1.变量不能以数字开头2.bash中默认是字符串类型。2、局部变量提升全局变量命令:export变量例:a=hello==>提升全局变量:exporta(后直接跟白变量名)二、she......
  • 系统架构基础知识入门指南-上
    接上一篇文章《为什么测试要了解系统架构》的内容,这篇聊聊如何掌握基础的系统架构知识。从我个人的角度来说,所谓的系统架构,就是对软件系统整体结构的抽象设计。如何理解这句话呢?举个生活中常见的例子:如何盖一座房子?正常的做法是先勘探地质,然后对房子进行设计(房屋大小朝向、门......
  • Pytorch DistributedDataParallel(DDP)教程二:快速入门实践篇
    一、简要回顾DDP在上一篇文章中,简单介绍了Pytorch分布式训练的一些基础原理和基本概念。简要回顾如下:1,DDP采用Ring-All-Reduce架构,其核心思想为:所有的GPU设备安排在一个逻辑环中,每个GPU应该有一个左邻和一个右邻,设备从它的左邻居接收数据,并将数据汇总后发送给右邻。通过N轮迭代......
  • Pytorch分类模型的训练框架
    Pytorch分类模型的训练框架PhotoDataset数据集是自己定义的数据集,数据集存放方式为:----image文件夹--------0文件夹--------------img1.jpg--------------img2.jpg--------1文件夹--------------img1.jpg--------------img2.jpg....如果是cpu训练的话,就把代码中的.cu......
  • LangChain轻松入门和开发实践
    LangChain是一个开发语言模型应用的框架。LangChain能够简化开发与语言模型工作流中的复杂部分,帮助开发人员能够更轻松地进行开发,并定制满足需求的应用。LangChain有两大优点,一是它能将外部数据,如文件、其他应用、API数据等,无缝地集成到语言模型中;二是它通过代理功能,让语言模型......
  • 从零手写实现 apache Tomcat-01-入门介绍
    自己如何实现?要实现一个简单版本的Tomcat,整体思路如下了解Tomcat的基本原理:Tomcat是一个开源的JavaServlet容器和Web服务器,它能够运行JavaServlet和JavaServerPages。Tomcat是基于Java的,它是用Java编写的。创建一个简单的HTTP服务器:创建一个Jav......