pytorch如何自定义自己的MyDatasets

PyTorch提供了一个工具函数torch.utils.data.DataLoader。所有其他数据集都应该进行子类化。所有子类应该override__len__和__getitem__,前者提供了数据集的大小,后者支持整数索引,范围从0到len(self)。
class torch.utils.data.TensorDataset(data_tensor, target_tensor)
包装数据和目标张量的数据集。
通过沿着第一个维度索引两个张量来恢复每个样本。
参数:
data_tensor (Tensor) - 包含样本数据
target_tensor (Tensor) - 包含样本目标(标签)


下面是一个自定义Datasets的框架

class MyDataset(torch.utils.data.Dataset):#需要继承torch.utils.data.Dataset
    def __init__(self):
        # TODO
        # 1. 初始化文件路径,并将文件名和标签值放入一个列表Initialize file path or list of file names.
	# 2. 初始化自身参数 
        pass
    def __getitem__(self, index):
        # TODO
        # 1. 从自身数据列表中读取一个数据Read one data from file (e.g. using numpy.fromfile, PIL.Image.open).
        # 2. 使用自身的transform处理数据Preprocess the data (e.g. torchvision.Transform).
        # 3. 返回一个数据和其对应的标签Return a data pair (e.g. image and label).
        #这里需要注意的是,第一步:read one data,是一个data
        pass
    def __len__(self):
        # 返回数据集合的大小You should change 0 to the total size of your dataset.
        return len


下面是一个使用fashion-mnist数据定义的Mydataset:

root = './data/fashion'

def My_loader(path):
	return PIL.Image.open(path).convert('RGB')

class MyDataset(torch.utils.data.Dataset):
	def __init__(self, txt_dir, transform=None, target_transform=None, loader=My_loader)
		data_txt = open(txt_dir, 'r')
		imgs = []
		for line in data_txt:
			line = line.strip()
			words = line.split()
			imgs.append((words[0], words[0]))
		self.imgs = imgs
		self.transform = transform
		self.target_transform = target_transform
		self.loader = My_loader

	def __len__(self):
		len = len(self.imgs)
		return len
	
	def __getitem__(self, index):
		img_name, label = self.img[index]
		img = self.loader(img_name)
		if self.transform is not None:
			img = self.transfrom(img)
		return img, label 


class torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, num_workers=0, collate_fn=<function default_collate>, pin_memory=False, drop_last=False)
数据加载器。组合数据集和采样器,并在数据集上提供单进程或多进程迭代器。
参数:
dataset (Dataset) – 加载数据的数据集。
batch_size (int, optional) – 每个batch加载多少个样本(默认: 1)。
shuffle (bool, optional) – 设置为True时会在每个epoch重新打乱数据(默认: False).
sampler (Sampler, optional) – 定义从数据集中提取样本的策略。如果指定,则忽略shuffle参数。
num_workers (int, optional) – 用多少个子进程加载数据。0表示数据将在主进程中加载(默认: 0)
collate_fn (callable, optional) –
pin_memory (bool, optional) –
drop_last (bool, optional) – 如果数据集大小不能被batch size整除,则设置为True后可删除最后一个不完整的batch。如果设为False并且数据集的大小不能被batch size整除,则最后一个batch将更小。(默认: False)


更多关于pytorch学习地址:http://blog.csdn.net/column/details/15023.html


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值