美文网首页
Pytorch数据加载及Dataset类代码实战

Pytorch数据加载及Dataset类代码实战

作者: 过气海豹 | 来源:发表于2021-09-22 00:24 被阅读0次

1 数据加载概念

Dataset:提供一种方式去获取数据及其label
Dataload:为后边的网络提供不同的数据形式

1.1 功能

Dataset应实现:
如何使用每一个数据及其label
告诉我们有多少数据

1.2 使用

官方解释:
An abstract class representing a Dataset.
All other datasets should subclass it. All subclasses should override
``__len__``, that provides the size of the dataset, and ``__getitem__``,
supporting integer indexing in range from 0 to len(self) exclusive.

表示数据集的抽象类。  
所有其他数据集都应该继承它。 所有子类都应该重写  
' ' __len__ ' ',提供数据集的大小,' ' __getitem__ ' ',  
支持从0到len(self)的整数索引。  

2 实战

#此函数为整个类提供一个全局变量,即为getitem、len提供一些方法
    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 = os.listdir(self.path)
重写的两个函数:
    def __getitem__(self, idx):
        img_name = self.img_path[idx]
        img_item_path = os.path.join(self.root_dir,self.label_dir,img_name)
        img = Image.open(img_item_path)
        label = self.label_dir
        return img, label

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

完整代码:

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

class MyData(Dataset):

    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 = os.listdir(self.path)

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

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


root_dir = "dataset/train"
ants_label_dir = "ants"
bees_label_dir = "bees"

ants_dataset = MyData(root_dir,ants_label_dir)
bees_dataset = MyData(root_dir,bees_label_dir)

train_data = ants_dataset + bees_dataset

到这里我们便可以使用dataset,如

img ,label = ants_dataset[0]
img.show()

便会展示ants数据集的第一张图片
又如统计数据集中的数量,则可以:

len(train_data)
Out[22]: 245

参考视频:
https://www.bilibili.com/video/BV1hE411t7RN?p=7&spm_id_from=pageDriver

相关文章

网友评论

      本文标题:Pytorch数据加载及Dataset类代码实战

      本文链接:https://www.haomeiwen.com/subject/bwfbgltx.html