torch.utils.data

发布时间 2023-04-17 15:54:05作者: Mrsmile11401

Dataset子类

dataset子类用用构建数据集。是一个抽象类,需要重写__getitem__函数。

代码示例如下:

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.root_dir = "dataset/train"
        self.label_dir = label_dir
# self.label_dir = "ants"
        self.img_list = os.listdir(os.path.join(root_dir, label_dir))
		
'''
os.path.join(root_dir, label_dir) = "dataset/train/ants" 为蚂蚁图片的相对路径

os.listdir()函数返回路径下的文件或文件夹列表
[918932.jpg,7894398,jpg,...,fadio.jpg]
'''

    def __getitem__(self, idx):
        img_name = self.img_list[idx]
        img_path = os.path.join(self.root_dir, self.label_dir, img_name)
        img = Image.open(img_path)
        label = self.label_dir
        return img, label
'''
通过init()函数中的文件名列表,可以在getitem中通过index获取图片

__getitem__函数的作用:
ants_dataset = Mydata("dataset/train", "ants")
img , label = ants_dataset[0]
在类实例化后,可以通过索引调用getitem函数
'''

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