PyTorch 创建数据集

2024-09-06 18:28
文章标签 数据 创建 pytorch

本文主要是介绍PyTorch 创建数据集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图片数据和标签数据准备

1.本文所用图片数据在同级文件夹中 ,文件路径为'train/’

在这里插入图片描述

2.标签数据在同级文件,文件路径为'train.csv'

在这里插入图片描述

3。将标签数据提取

train_csv=pd.read_csv('train.csv')

创建继承类

第一步,首先创建数据类对象 此时可以想象为单个数据单元的创建 { 图像,标签}

在这里插入图片描述

继承的是Dataset类 (数据集类)

from torch.utils.data import Dataset
from PIL import Image          //从文件路径中提取图片所需要的函数class Imagedata(Dataset):        //继承Dataset类def __init__(self,df,dir,transform=None):     //往类里传输需要的数据必须在这定义,后面初始化函数才能使用传入的数据,//df表示传入的标签数据,dir表示图像数据文件地址,transform是图像增强的处理操作super().__init__()                      //声明后面操作需要用的数据self.df=df                           self.dir=dirself.transform=transformdef __len__(self):                     //模板函数,没什么卵用return len(self.df)def __getitem__(self, idex):           //将单个数据和标签整合到一块的初始化函数img_id=self.df.iloc[idex,0]        //图片的名称在df文件中,标签也在df的文件中,如下图,为的就是提出图像数据文件中的图片,否则从图片数据文件中一张一张提取出来很难,名称太长img=Image.open(self.dir+img_id)   //拿到了图片的整个完整地址  img=np.array(img)                //Image提取出来的为image类型,需要转换为numpy数组,才能存储到数据集中//上面两行也可以换为cv2.imread(dir),直接读取的数据就可以往里面存,避免了数据转换label=self.df.iloc[idex,1]       //从df中提取对应的标签,就是同一张图像的标签,由idex固定return img,label                 //返回整理好的单个数据单元(图像+标签)

在这里插入图片描述

第二步,创造好了单个数据单元对象,那么需要将多个数据单元整合起来构成一个完整的数据集

先将单个数据单元实现,因为上面的代码为类对象代码,并没有实现

train_dataset=ImageDataset(df=train_csv,dir='train/')  //df为标签文件,dir表示你图像存储的文件地址

得到了单个数据单元,那么开始将数据整合,先调用数据整合函数:

from torch.utils.data import DataLoader

通过数据流来整合

train_data=DataLoader(train_dataset,batch_size=32)    //train_dataset 为单个对象     batch_size为设置几个为一小组,为后面的分组训练做准备

那么最后得到的train_data就是带有图像和标签的数据集,可以验证一下:

for img,label in train_data:print(img,label)

在这里插入图片描述

图像增强技术(降噪,标准化)

上面没有加入图像增强代码,创建数据集时候,可以先将图像增强后再存入数据集,增强的主要目的就是提高训练准确率,标准化可以使图像在神经网络训练的更快,因为图像的数据明显变小,举个例子,由像素[233,221,222]可以直接变为[2.33,2.21,2.22]

如下使图像增强代码,用的使torchvision,每行代码都有注释

from torchvision import transformstransform_train = transforms.Compose([transforms.ToTensor(),        //将图像变为Tensor张量,并将图像像素由255-0变为1-0,压缩,并将图像的维度从 (H x W x C) 转换为 (C x H x W)transforms.Pad(32, padding_mode='symmetric')   //表示在图像的四周各填充 32 个像素。transforms.RandomHorizontalFlip(),    //以一定的概率对图像进行随机水平翻转。这有助于增加数据的多样性,提高模型的泛化能力。防止拟合transforms.RandomVerticalFlip(),      //以一定的概率对图像进行随机垂直翻转。同样是为了增加数据多样性transforms.RandomRotation(10),       //以一定的概率对图像进行随机旋转,旋转角度在 -1010 度之间。增加数据的多样性transforms.Normalize((0.485, 0.456, 0.406),     //指定每个通道的均值。通常是在 ImageNet 数据集上计算得到的均值。(0.229, 0.224, 0.225))])   //指定每个通道的标准差。也是在 ImageNet 数据集上计算得到的标准差。

那么在数据单元创建的时候加入,以下是完整代码:

from torch.utils.data import Datasetclass ImageDataset(Dataset):def __init__(self, df, dir, transform=None): super().__init__()self.df = dfself.dir = dirself.transform = transformdef __len__(self):return len(self.df)def __getitem__(self, idx):img_id = self.df.iloc[idx,0]img_path = self.dir + img_idimage = cv2.imread(img_path)            //这里用了cv2直接读取图片,避免了转换numpyimage = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)   //opencv里的数据增强label = self.df.iloc[idx,1]if self.transform is not None:image = self.transform(image)return image, label-----------------------图像增强技术------------------------
from torchvision import transforms
transform_train = transforms.Compose([transforms.ToTensor(),transforms.Pad(32, padding_mode='symmetric'),transforms.RandomHorizontalFlip(),transforms.RandomVerticalFlip(),transforms.RandomRotation(10),transforms.Normalize((0.485, 0.456, 0.406),(0.229, 0.224, 0.225))])
transform_test = transforms.Compose([transforms.ToTensor(),transforms.Pad(32, padding_mode='symmetric'),transforms.Normalize((0.485, 0.456, 0.406),(0.229, 0.224, 0.225))])from torch.utils.data import DataLoader
dataset_train = ImageDataset(df=train_df, img_dir='train/',transform=transform_train)
loader_train = DataLoader(dataset=dataset_train, batch_size=32, shuffle=True)

这篇关于PyTorch 创建数据集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142779

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X