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
网友评论