美文网首页
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