任务
自己制作数据集,并可使用DataLoader调用。
步骤
1 生成数据及标签
这一步生成所需数据与对应标签。注意数据与标签的对应关系。
我这里直接将一个.npy文件作为一个数据,其文件名为其对应标签。
2 定义Mydataset类
import re
import numpy as np
from torch.utils import data
re_paths = re.compile(r'data/unwrap/\w{4,5}\\(-?\d+\.\d+)_(-?\d+\.\d+)_(-?\d+\.\d+)\.npy')
class Mydataset(data.Dataset):
# 类初始化
def __init__(self, paths, transform):
self.paths = paths
self.transforms = transform
# 进行切片
def __getitem__(self, index): # 根据给出的索引进行切片,并对其进行数据处理转换成Tensor,返回成Tensor
path = self.paths[index]
data = self.transforms(np.load(path))
label = np.array(list(map(np.float32, re_paths.match(path).groups())))
return data, label
# 返回长度
def __len__(self):
return len(self.paths)
3 实例化Mydataset
import torch
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
import glob
from mydataset import Mydataset
import numpy as np
transform = transforms.Compose([
transforms.ToTensor() # 作用:第一转换成Tensor,第二将图片取值范围转换成0-1之间,第三会将channel置前
])
train_paths = glob.glob(r'data/unwrap/train/*.npy') # 训练集地址
train_dataset = Mydataset(train_paths, transform)
test_paths = glob.glob(r'data/unwrap/test/*.npy') # 测试集地址
test_dataset = Mydataset(test_paths, transform)
gen = DataLoader(dataset=train_dataset, batch_size=Batch_size, shuffle=True, num_workers=0)
gen_test = DataLoader(dataset=test_dataset, batch_size=Batch_size // 2, shuffle=True, num_workers=0)
4 调用DataLoader加载数据
经过前面3个步骤就可以使用DataLoader加载数据了。
for iteration, batch in enumerate(gen):
images, targets = batch[0], batch[1]