DLNote1——Dataset类码代实战

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

b站土堆深度学习视频个人学习笔记,温故知新。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Dataset类型

Dataset本质上就是一个抽象类,可以把数据封装成Python可以识别的数据结构。

Dataset类不能实例化,所以在使用Dataset的时候,我们需要定义自己的数据集类,也是Dataset的子类,来继承Dataset类的属性和方法。

二、使用方法

1.引入库

代码如下(示例):

from torch.utils.data import Dataset
from PIL import Image
import os

from torch.utils.data import Dataset这行代码从torch.utils.data模块中导入了Dataset类。Dataset是PyTorch中用于表示数据集的抽象类,你可以通过继承这个类来创建自定义的数据集。

从PIL库中导入Image模块。PIL(Python Imaging Library)是一个用于处理图像的库,Image模块提供了打开、操作和保存图像的功能。

2.方法定义

代码如下:

class MyData(Dataset):

    def __init__(self, root_dir, label_dir):#label_dir为上一级目录的名称
        self.root_dir = root_dir
        self.label_dir = label_dir
        self.path = os.path.join(self.root_dir, self.label_dir)
        # os.listdir方法获取self.path目录下的所有文件和子目录的名称,
        # 并将这些名称组成的列表赋值给实例变量self.img_path
        self.img_path = os.listdir(self.path)

    def __getitem__(self, index):
        img_name = self.img_path[index]
        img_path = os.path.join(self.path, img_name)
        img = Image.open(img_path)
        label = self.label_dir
        return img, label

第一个函数为初始化,参数为图片文件的根目录(root_dir)和上一级目录的名称(label_dir),
os.path.join(self.root_dir, self.label_dir)通过将这两个路径连接在一起从而得到文件目录的路径。
os.listdir方法获取self.path目录下的所有文件和子目录的名称,并将这些名称组成的列表赋值给实例变量self.img_path

第二个函数参数为列表序号idex,传入指定数字通过self.img_path[index]得到列表中第(index-1)个的图片名称,再将图片路径与图片名称组合得到该图片的完整路径。最终返回图片(img)及其目录名称(label)。

3.具体使用

  1. 首先将训练集放入项目文件夹中
    请添加图片描述
  2. 编写完MyData类后添加如下代码
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)

train_dataset = ants_dataset + bees_dataset

在这段代码中,定义了两个数据集对象 ants_dataset 和 bees_dataset,然后将它们合并成一个名为 train_dataset 的数据集。

4.代码实现

from torch.utils.data import Dataset
from PIL import Image
import os
class MyData(Dataset):

    def __init__(self, root_dir, label_dir):#label_dir为上一级目录的名称
        self.root_dir = root_dir
        self.label_dir = label_dir
        self.path = os.path.join(self.root_dir, self.label_dir)
        # os.listdir方法获取self.path目录下的所有文件和子目录的名称,
        # 并将这些名称组成的列表赋值给实例变量self.img_path
        self.img_path = os.listdir(self.path)

    def __getitem__(self, index):
        img_name = self.img_path[index]
        img_path = os.path.join(self.path, img_name)
        img = Image.open(img_path)
        label = self.label_dir
        return img, label

    def __len__(self):
        return len(self.img_path)


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)

train_dataset = ants_dataset + bees_dataset

总结(AI总结)

这段代码定义了一个自定义的数据集类 MyData,用于加载图像数据。以下是代码的总结:

  • 导入必要的库
    torch.utils.data 中的 Dataset 类,用于创建自定义数据集。
    PIL 库中的 Image 类,用于处理图像。
    os 库,用于处理文件路径和目录操作。

  • 定义 MyData 类
    继承自 Dataset 类。
    init 方法:
    接受 root_dir 和 label_dir 作为参数,分别表示根目录和标签目录。
    通过 os.path.join 方法将根目录和标签目录拼接成完整路径,并赋值给 self.path。
    使用 os.listdir 方法获取 self.path 目录下的所有文件和子目录的名称,并将这些名称组成的列表赋值给 self.img_path。
    getitem 方法:
    接受 index 作为参数,返回指定索引的图像和标签。
    通过索引获取图像名称,拼接成完整图像路径,并使用 Image.open 方法打开图像。返回图像和标签(即 label_dir)。
    len 方法:
    返回图像路径列表的长度,即数据集的大小。

  • 创建数据集实例
    定义根目录 root_dir 和两个标签目录 ants_label_dir 和 bees_label_dir。
    创建两个数据集实例 ants_dataset 和 bees_dataset。
    使用 + 运算符将两个数据集合并成一个 train_dataset。

总结来说,这段代码定义了一个用于加载图像数据的自定义数据集类 MyData,并通过实例化该类创建了两个数据集,最后将这两个数据集合并成一个训练数据集。

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值