Dataset

本文介绍了PyTorch中的数据处理组件,包括Dataset作为数据抽象类,需要覆写`__len__`和`__getitem__`方法。Dataloader则提供批量处理、shuffle、并行加速等功能,其参数如`num_workers`用于设置子进程数量。同时,文章提到了TensorDataset用于将内存数据转换为Tensor,并结合ConcatDataset用于合并多个数据集。
摘要由CSDN通过智能技术生成

Dataset                只负责数据的抽象,一次只返回一个数据或者样本

Pytorch中数据集被抽象为一个抽象类torch.utils.data.Dataset,所有的数据集都应该继承这个类,并override以下两项:

 

    __len__:代表样本数量。len(obj)等价于obj.__len__()。

    __getitem__:返回一条数据或一个样本。obj[index]等价于obj.__getitem__。建议将节奏的图片等高负载的操作放到这里,因为多进程时会并行调用这个函数,这样做可以加速。

 

dataset中应尽量只包含只读对象,避免修改任何可变对象。因为如果使用多进程,可变对象要加锁,但后面讲到的dataloader的设计使其难以加锁。如下面例子中的self.num可能在多进程下出问题:

 

class BadDataset(Dataset):

 def __init__(self):

  self.datas = range(100)

  self.num = 0 # read data times

 def __getitem__(self, index):

  self.num += 1

  return self.datas[index]

 

 

Dataloader  前面提到过,在训练神经网络时,最好是对一个batch的数据进行操作,同时还需要对数据进行shuffle和并行加速等。对此,PyTorch提供了DataLoader帮助我们实现这些功能。

 

官方documentation

 

Dataset负责表示数据集&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值