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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信创实践(3):基于x2openEuler将CentOS升级成openEuler,享受其带来的创新和安全特性

引言: 在当前的 IT 行业中,创新和安全性是两大关键趋势。随着 CentOS 停止维护,许多用户正在寻找替代方案,以保持其系统的更新和安全。openEuler 作为一个强大的开源操作系统,成为了理想的迁移目标。本教程将指导您如…

LiveQing视频点播流媒体RTMP推流服务功能-支持大疆等无人机RTMP推流支持OBS推流一步一步搭建RTMP视频流媒体服务示例

LiveQing支持大疆等无人机RTMP推流支持OBS推流一步一步搭建RTMP视频流媒体服务示例 1、流媒体服务搭建2、推流工具准备3、创建鉴权直播间4、获取推流地址5、配置OBS推流6、推流及播放7、获取播放地址7.1 页面查看视频源地址7.2 接口查询 8、相关问题8.1、大疆无人机推流花屏 9、…

感知机模型

一、概述 感知机模型(Perceptron Model)也叫做神经元模型,设计灵感即来自于生物神经元的运行机制,依次完成信息接收、处理、输出的过程。当前大放异彩的各种人工神经网络模型即由一个个人工神经元构成,因此,本文介绍的感知机模型&…

详解 MQ 消息队列

谈起消息队列,内心还是会有些波澜。 消息队列,缓存,分库分表是高并发解决方案三剑客,而消息队列是我最喜欢,也是思考最多的技术。 我想按照下面的四个阶段分享我与消息队列的故事,同时也是对我技术成长经…

0成本实现.NET Web API 8.0项目内网映射

1.背景 最近在学习CICD,里面会有用到内网映射的使用场景。为了加深对内网映射实操的记忆。我实操了下基于.Net 8.0的内网映射,并支持互联网访问。本文主要介绍了在win11下安装路由侠,并将.net 8.0发布到win11,项目运行、路由侠配…

【学习笔记】5G-A时代物联网应用及策略研究

摘要 海量物联网通信是5G典型应用场景之一,为了实现蜂窝网的全场景物联能力,需要更多的场景化技术,5G-A引入了RedCap(5G Reduced Capability)和Passive IoT。其中,RedCap降低了设备复杂性及成本&#xff0…

weblogic漏洞——CVE-2020-14882

一、基本信息 靶机:IP:192.168.100.40 二、攻击过程 进入 vulhub 靶场相关目录,并启动环境 cd master/weblogic/CVE-2020-14882 docker-compose up -d 绕过登录验证 http://192.168.100.40:7001/console/css/%252e%252e%252fconsole.por…

自己设计的QT系统,留个档

注册登录 主界面展示 天气预报 音乐播放

Guitar Pro 8.2.1 Build 32+Soundbanks Win/Mac音色库 开心激活版 音乐软件Guitar Pro 8中文破解版

音乐软件Guitar Pro 8中文破解版是一个受吉他手喜爱的吉他和弦、六线谱、BASS 四线谱绘制、打印、查看、试听软件,它也是一款优秀的 MIDI 音序器,MIDI 制作辅助工具,可以输出标准格式的 MIDI。GP 的过人之处就在于它可以直接用鼠标和键盘按标…

echarts多个环形图

echarts图表集 var dataValue [{name:今日待分配方量,value:49}, {name:今日已分配方量,value:602}, {name:今日完成方量,value:1037}]var piedata1 [{name: 1#拌和机,value: 20},{name: 2#拌和机,value: 22},{name: 3#拌和机 ,value: 17},{name: 4#拌和机,value: 18},{name…

二、搭建网站服务器超详细步骤——部署轻量应用服务器(Centos)

前言 经过第一篇博客的铺垫,现在小伙伴们已经选择了合适的服务器和域名,那么这篇博客就要详细的讲解,如何部署轻量应用服务器,为什么要选择Linux系统?为什么要选择CentOS作为系统镜像? 一、轻量应用服务器…

PCI Express 体系结构导读摘录(二)

系列文章目录 PCI Express 体系结构导读摘录(一) PCI Express 体系结构导读摘录(二) 文章目录 系列文章目录第Ⅱ篇  PCI Express 体系结构概述第 4 章  PCIe 总线概述4. 1  PCIe 总线的基础知识4. 1. 1  端到端的数据传递4. 1…

【SLAM】GNSS的定义,信号原理以及RTK在多传感器融合中的使用方法

【SLAM】GNSS的定义,信号原理以及在多传感器融合中的使用方法 1. GNSS的定义2. GNSS信号原理3. RTK - Real Time Kinematic4。 如何使用RTK做融合和优化 1. GNSS的定义 GPS(Global Positioning System)和GNSS(Global Navigation …

为啥给的贷款额度差距那么大?机构到底是怎么决定给你多少额度?

今日,我们深入探讨一个颇为引人入胜的话题——为何在不同银行或信贷机构申请贷款时,所能获得的额度竟能如此大相径庭?同时,揭秘这些金融机构背后是如何精密计算并决定每位申请者的“额度”的。以下内容干货满满,建议收…

【时时三省】(C语言基础)指针进阶 例题2

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 第一个arr 数组名相当于首元素地址 因为他没有放到strlen内部 也没有取地址 strlen是找\0 找不到\0就不会停下来 所以它打印的就是随机值 第二个arr0 首元素地址加零还…

Linux-(系统启动、用户管理)

目录 前言 关机&重启命令 基本介绍 注意细节 用户登录和注销 注意: 用户管理 基本介绍 添加用户 指定/修改密码 删除用户 查询用户信息 切换用户 查看当前用户登录用户 用户组 新增组 删除组 查看所有组 修改用户所属组 创建用户时指定用户…

磁盘加密工具 | VeraCrypt v1.26.15 绿色版

VeraCrypt 是一个开源项目,旨在提供强大的加密解决方案,以创建和管理加密的磁盘分区和加密容器。它继承了著名的加密软件 TrueCrypt 的特性,并在此基础上进行了扩展和改进。 主要特性 1. 高级加密算法 VeraCrypt 支持多种加密算法&#xf…

面试软件测试需要掌握的技能有哪些?

一、测试用例的编写 1、在测试中最重要的文档,他是测试工作的核心,是一组在测试时输入输出的标准,是软件需求的具体对照。编写测试用例,是测试人员的基本功,真正能写好的人并不多。 测试用例包含的内容: …

Mindspore 初学教程 - 3. Tensor 张量

张量(Tensor)是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在  n n n 维空间内,有  n r n^{r} nr 个分量的一种量,其…

学习日志8.30--防火墙NAT

目录 一、实验环境配置 二、配置防火墙静态NAT一对一 三、配置防火墙静态NAT多对多 四、配置防火墙NAT端口转换NAPT 五、防火墙smart-nat、easyip 六、防火墙三元组NAT 在学习过基于路由器的NAT网络地址转换,现在学习基于防火墙NAT的网络地址转换,…