Pytorch学习笔记——认识数据

        最近在跟着小土堆pytorch的视频跟着学习python,根据自己的理解和课程上面的知识,写了这一篇学习笔记。

1、加载数据        

        数据的加载是学习pytorch的第一步,我们需要加载数据,完成特征工程,对加载数据存在的一些特征来进行分析和处理,进而利用相关算法训练得到模型。

        数据该如何加载呢?

        首先,如果是文本之类数据的话,可以使用open()函数进行文件读取操作,对于图片的话,可以使用PIL下面的一个api,调用里面的open()方法来打开图片,如果要使用,则需要进行导包的操作。

from PIL import Image

如果导需要从某种数据源加载数据,并对这些数据进行预处理和格式化的话,利用pytorch中的Dataset类是最为方便的,也需要导包。

from torch.utils.data import Dataset

Dataset类里面定义了两种方法:

  1. __len__(): 返回数据集中的样本数量。
  2. __getitem__(idx): 根据给定的索引 idx 返回一个样本

我们需要自己定义一个类,这个类继承Dataset类,并重写相关方法

需要调用系统路径,导入os模块,不要忘记了

import os

此时先定义一个自定义类,这个自定义类继承于Dataset类

class MyData(Dataset):

然后重写Dataset里面的__init__和__getitem__方法

class MyData(Dataset):# 初始化方法,当创建MyData对象时会被调用# root_dir: 数据集的根目录# label_dir: 自定义的类别目录,通常是某个类别的子目录def __init__(self, root_dir, label_dir):self.root_dir = root_dir         # 存储根目录self.label_dir = label_dir       # 存储类别目录# 拼接根目录和类别目录,得到完整路径self.path = os.path.join(self.root_dir, self.label_dir)# 获取该类别目录下的所有文件/图片名,并存储到self.img_path列表中self.img_path = os.listdir(self.path)# 根据索引获取数据集中的单个样本# idx: 样本的索引def __getitem__(self, idx):# 获取索引对应的图片名img_name = self.img_path[idx]# 拼接完整的图片路径img_item_path = os.path.join(self.root_dir, self.label_dir, img_name)# 打开图片并获取图片对象image = Image.open(img_item_path)# 使用类别目录作为标签label = self.label_dir# 返回图片对象和标签return image, label

记得在py文件统计目录下有相关文件,我是跟着小土堆的课程,所以就下载了dataset的数据集

最后定义好相关的变量和函数即可

root_dir = "dataset/train" 
ants_label_dir = "ants_image" 
bees_label_dir = "bees_image" 
ants_dataset = MyData(root_dir,ants_label_dir) 
bees_dataset = MyData(root_dir,bees_label_dir) 

这样就能得到ants_dataset和bees_dataset两个类别的数据集

2、查看数据

        查看数据集的话,需要用到DataLoader数据加载类来加载数据,调用Transform来对数据进行增强,通过使用 transforms.Compose 来组合多个转换操作(这是后面要学习的)

下面的代码可以看下,但不用深究,看个大致就行。

from torch.utils.data import Dataset, DataLoader
from PIL import Image
import os
import torch
from torchvision import transformsclass MyData(Dataset):def __init__(self, root_dir, label_dir, transform=None):self.root_dir = root_dirself.label_dir = label_dirself.path = os.path.join(self.root_dir, self.label_dir)self.img_names = os.listdir(self.path)self.transform = transformself.label = self.label_dir.replace("_image", "")  # 假设标签是目录名的前缀def __getitem__(self, idx):img_name = self.img_names[idx]img_path = os.path.join(self.path, img_name)image = Image.open(img_path)if self.transform:image = self.transform(image)return image, self.labeldef __len__(self):return len(self.img_names)root_dir = "dataset/train"
ants_label_dir = "ants_image"
bees_label_dir = "bees_image"# 定义数据增强
transform = transforms.Compose([transforms.Resize((224, 224)),  # 调整为适合模型输入的尺寸transforms.ToTensor(),  # 将 PIL Image 或 numpy.ndarray 转换为 torch.FloatTensortransforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # ImageNet 的均值和标准差
])ants_dataset = MyData(root_dir, ants_label_dir, transform=transform)
bees_dataset = MyData(root_dir, bees_label_dir, transform=transform)# 创建 DataLoader
batch_size = 4
train_loader = DataLoader(ants_dataset, batch_size=batch_size, shuffle=True)# 查看数据集
for images, labels in train_loader:print("Images batch shape:", images.shape)print("Labels batch:", labels)

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

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

相关文章

【antd + vue】InputNumber 数字输入框 输入限制

一、需求说明 只能输入数字和小数点,保留小数点后两位;最多输入6位;删除所有内容时,默认为0; 二、问题说明 问题1:使用 precision 数值精度 时,超出规定小数位数时会自动四舍五入;…

数据结构中的栈(C语言版)

一.栈的概念 栈是一种常见的数据结构,它遵循后进先出的原则。栈可以看作是一种容器,其中的元素按照一种特定的顺序进行插入和删除操作。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做…

对比mongodb查询的执行计划,说一说组合索引的优化方案(下)

一、接着上文 上文已说到totalIds在or查询条件中,所以不会匹配到索引。 本文我们试着调整下查询条件,观察调整后,特别是totalIds字段,将匹配哪个索引。(观察的依据仍是查询计划的executionStats) 把tota…

【Web UI自动化】Python+Selenium 环境配置

安装Python 官网地址:https://www.python.org/,Downloads菜单下选择适合自己的系统版本,我的是Windows。 点击进入以后,可以看到当前最新版本。 点击上面的链接,页面下滑,找到下载链接,根据…

特斯拉PIXCELL矩阵大灯擎耀远程控制技术照亮未来智能之光

在科技的浪潮中,特斯拉这个名字如同一道闪电,照亮了新能源汽车的天空。而在这片星空中,特斯拉PIXCELL矩阵大灯则如同一颗璀璨的星辰,以其独特的创新技术和卓越的性能,为驾驶者提供了前所未有的照明体验。矩阵大灯技术如…

【团体程序设计天梯赛】往年关键真题 L2-036 网红点打卡攻略 模拟 L2-037 包装机 栈和队列 详细分析完整AC代码

【团体程序设计天梯赛 往年关键真题 详细分析&完整AC代码】搞懂了赛场上拿下就稳 【团体程序设计天梯赛 往年关键真题 25分题合集 详细分析&完整AC代码】(L2-001 - L2-024)搞懂了赛场上拿下就稳了 【团体程序设计天梯赛 往年关键真题 25分题合…

ElasticSearch教程入门到精通——第二部分(基于ELK技术栈elasticsearch 7.x新特性)

ElasticSearch教程入门到精通——第二部分(基于ELK技术栈elasticsearch 7.x新特性) 1. JavaAPI-环境准备1.1 新建Maven工程——添加依赖1.2 HelloElasticsearch 2. 索引2.1 索引——创建2.2 索引——查询2.3 索引——删除 3. 文档3.1 文档——重构3.2 文…

基于Matlab使用深度学习的多曝光图像融合

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在图像处理领域,多曝光图像融合技术是一种重要的技术,它可以将不同曝光条件下…

mysql优化面试总结

mysql优化 和 mysql优化之索引 两篇文章有大量的实验性的内容,我暂时没时间理解,把八股部分总结到这篇文章中,方便记忆 我们为什么要对sql进行优化 我们开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对…

基于EBAZ4205矿板的图像处理:03使用VIO调试输出HDMI视频图像

基于EBAZ4205矿板的图像处理:03使用VIO调试输出HDMI视频图像 在zynq调试时VIO是真的方便,特此写一篇博客记录一下 先看效果 项目简介 下面是我的BD设计,vtc用于生成时序,注意,2021.2的vivado的vtcIP是v6.2版本&…

移植USB RTL8723DU WIFI无线驱动给RK3588

wifi 通过dmesg发现可以识别到设备为无线网卡,并驱动蓝牙,但是在ifconfig中没有找到对应的wlan0。 推断有可能是内核里面没有针对8723du wifi的驱动。所以需要查询当前的5.10内核是否包含8723du的驱动。到https://linux-hardware.org/ 上查看。 并结合…

机器学习:深入解析SVM的核心概念【一、间隔与支持向量】

直接阅读原始论文可能有点难和复杂,所以导师直接推荐我阅读周志华的《西瓜书》!!然后仔细阅读其中的第六章:支持向量机 间隔与支持向量 **问题一:什么叫法向量?为什么是叫法向量**什么是法向量?…