Pytorch学习笔记——认识数据

news2024/12/23 10:10:54

        最近在跟着小土堆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 transforms

class MyData(Dataset):

    def __init__(self, root_dir, label_dir, transform=None):
        self.root_dir = root_dir
        self.label_dir = label_dir
        self.path = os.path.join(self.root_dir, self.label_dir)
        self.img_names = os.listdir(self.path)
        self.transform = transform
        self.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.label

    def __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.FloatTensor
    transforms.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.coloradmin.cn/o/1655675.html

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

相关文章

智慧文旅开启沉浸式文化体验,科技让旅行更生动:借助智慧技术,打造沉浸式文化体验场景,让旅行者在旅行中深度感受文化的魅力

一、引言 随着科技的飞速发展,传统旅游行业正经历着前所未有的变革。智慧文旅,作为一种新兴的旅游模式,正以其独特的魅力,吸引着越来越多的旅行者。智慧文旅不仅改变了人们的旅行方式,更在深度上丰富了人们的文化体验…

09 - 数据清洗案例

流程图 kettle 面板图片 操作步骤 1、订阅数据源(kafka consumer) 2、抽取字段并转换key(JSON input) 3、判断img字段是否有值,有的话进行url转base64(JavaScript 代码) // 获取输入字段的值 v…

Windows内核开发:如何使用STL

前言 大家都知道应用层c的STL非常强大,非常好用,但是在内核下就没法用了。针对这个问题,经过我不懈的寻找,终于找到了解决内核无法使用STL的方法。 使用new/delete关键字 先说一下常用关键字如何在内核中使用。其实只需要在一个全…

C++类和对象详解(一)

目录 面向过程和面向对象初步认识类的引入类的定义类的两种定义方式声明和定义全部放在类体中 声名定义分离 类的作用域成员变量命名规则建议访问限定符 类的封装类的实例化类对象模型类的对象大小的计算扩展 结构体内存对齐规则 感谢各位大佬对我的支持,如果我的文章对你有用,…

Android Ant编译环境配置(Win)

1、 载ant包: 2、设置环境变量: 3、检查是否设置成功及版本 4、执行命令: android update project -p . -n “projectname”(例如:android update project --target 1 -p . -n “Couplet”)(只输入红色部分也是可以的…

GM EPUB Reader Pro for Mac:专业电子书阅读工具

GM EPUB Reader Pro是一款适用于Mac的专业EPUB阅读软件。它为用户提供了优质的阅读体验和丰富的功能。 GM EPUB Reader Pro支持EPUB格式,这是一种广泛使用的电子书格式,常用于小说、教育书籍、期刊等。您可以通过该软件打开和阅读EPUB文件,享…

使用js/java合并3dtiles

目录 前言: 需合并的json目录 aa/tileset.json bb/tileset.json cc/tileset.json dd/tileset.json ee/tileset.json js源码: 运行命令: 生成结果: java源码: Matrix.java ThreeDTilesJoin2.java pom文件…

微服务拆分

目录 前言: 逻辑视图架构风格 一、分层式架构风格 二、六边形架构 如何定义微服务架构 微服务的拆分 业务能力进行服务拆分 子域进行服务拆分 拆分的原则 单一职责 闭包原则 前言: 我们在软件开发的时候一直在谈论架构,那么什么是…

最全计算机毕业设计、大作业项目推荐(毕设源码+论文+PPT)

文章目录 1.毕设源码1.1 JAVA类源码模板1.2 PYTHON类源码模板1.3 C#类源码模板1.4 PHP类源码模板1.5 HTML类源码模板1.6 VUE类源码模板 2.毕设论文3.酷炫PPT 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/138598621 最…

短剧新纪元:引领潮流的短剧小程序开发,一触即达精彩世界

在信息爆炸的时代,短视频以其短小精悍、内容丰富的特点迅速崛起,成为人们日常生活中不可或缺的一部分。然而,短视频的短暂与碎片化,有时难以满足观众对完整故事的需求。为此,我们倾力打造了一款短剧小程序,…

某音扫码,短时间掉线问题,已解决

关于字节系抖音扫码掉线问题,已经困扰挺多人了,基本上你拿之前的逻辑去扫的话,估计几个小时或者一两天就掉线,这个问题呢,目前已经解决短时间掉线问题。抖音的cookie默认是大概60天左右的有效期

羊大师:羊奶营养守护孩子每一步

羊大师:羊奶营养守护孩子每一步 羊奶确实是一种营养丰富、具有多种健康益处的饮品,羊大师发现羊奶对于孩子的成长发育具有积极的促进作用。以下是一些关于羊奶对孩子成长的具体好处: 优质蛋白质:羊奶中的蛋白质含量高&#xff0c…

解决windows中的WSL Ubuntu子系统忘记root密码和用户密码问题

1、以管理员身份运行PowerShell 2、在powershell中执行wsl.exe --user root wsl.exe --user root如果出现了上面的报错,则需要运行步骤3、4,然后在执行步骤5改密码,如果没有出错,请直接跳到第5步改密码操作!&#xff…

【设计模式】之观察者模式

系列文章目录 【设计模式】之装饰器模式【设计模式】之工厂模式(三种)【设计模式】之工厂模式(三种) 前言 今天给大家介绍另一种设计模式--观察者模式,有了解webscoket实现原理的小伙伴应该对这个设计模式不陌生。不清…

2024年人工智能威胁态势报告:有关AI系统及AI应用的安全风险与安全防护全景

HiddenLayer公司最新发布的《2024年AI威胁场景报告》中,研究人员阐明了AI相关漏洞及其对组织的影响,并为应对这些挑战的IT安全和数据科学领导者提供了指导建议。最后,报告还揭示了各种形式的AI安全控制的前沿进展。 关键数据 平均而言&#x…

FMEA如何在设计活动中有效应用?——FMEA软件

免费试用FMEA软件-免费版-SunFMEA 在现代产品设计和开发过程中,FMEA(失效模式与影响分析)已经成为了一种不可或缺的工具。它的核心目标是在产品或过程设计的早期阶段,通过识别和分析潜在的失效模式,预防和控制可能出现…

react路由的简单demo

1.结构 2.router的index.js代码 import Home from "../pages/home/index";const routes [{path: "/",element: <Home />,},{path: "home",element: <Home />,}, ];export default routes;3.app.js代码 import "./App.css&qu…

Android 开机启动扫描SD卡apk流程源码分析

在开机的时候&#xff0c;装在SD卡的apk和装在系统盘的apk扫描过程不一样&#xff0c;系统盘apk在系统启动过程中扫描&#xff0c;而SD卡上的就不是&#xff0c;等系统启动好了才挂载、扫描&#xff0c;下面就说下SD扫描的流程&#xff1a; 在SystemServer启动MountService&am…

概念解析 | 威胁建模与DREAD评估:构建安全的系统防线

注1:本文系"概念解析"系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:威胁建模和DREAD模型 概念解析 | 威胁建模与DREAD评估:构建安全的系统防线 What Is Threat Modeling? Definition, Process, Examples, and Best Practices - Spic…

关于zabbix简介及zabbix服务端的部署

文章目录 一、zabbix概念1、zabbix简介2、zabbix主要特点3、zabbix运行机制4、zabbix应用场景5、zabbix监控原理6、zabbix的子程序7、zabbix监控的架构模式7.1 server-client架构7.2 server-proxy-client架构7.3 master-node-client 二、部署zabbix1、服务器配置2、服务器环境3…