pytorch学习(一)Dataset

Dataset类:
pytorch读取图片,主要通过Dataset类。Dataset类作为所有datasets的基类,所有的datasets都要继承它。
码源:

class Dataset(object):
"""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.
""
def __getitem__(self, index):
    raise NotImplementedErro
def __len__(self):
    raise NotImplementedErro
def __add__(self, other):
    return ConcatDataset([self, other])
    

    之所以要自己写DataSet,是因为原本提供的DataSet无法满足我们的实际需求,此时就需要我们自定义。通过继承 torch.utils.data.Dataset来实现,在继承的时候,需要 override 三个方法:

init: 用来初始化一些有关操作数据集的参数
getitem:定义数据获取的方式(包括读取数据,对数据进行变换等),该方法支持从 0 到 len(self)-1的索引。obj[index]等价于obj.getitem
len:获取数据集的大小。len(obj)等价于obj.len()

*自定义DataSet的框架:

class CustomDataset(data.Dataset):#需要继承data.Dataset
   def __init__(self):
       # TOD  
       # 1. Initialize file path or list of file names.
       pass
   def__getitem__(self, index):
        # TODO
        # 1. Read one data from file (e.g. using numpy.fromfile, PIL.Image.open).
        # 2. 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 0

def len(self):
return len(self.batch_sampler)
DataSet创建及使用的完整流程如下:

1.首先创建好自己的DataSet类,然后创建一个Dataset的对象
2.将创建好的DataSet对象传入DataLoader中,创建一个 DataLoader的对象
3.遍历这个DataLoader对象,从而取出自己的数据。

在训练神经网络时,最好是对一个batch的数据进行操作,同时还需要对数据进行shuffle和并行加速等。对此,PyTorch提供了DataLoader帮助实现这些功能。Dataset只负责数据的抽象,一次调用__getitem__只返回一个样本。

DataLoader()的各个参数含义如下:
DataLoader的函数定义如下: DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, num_workers=0, collate_fn=default_collate, pin_memory=False, drop_last=False)

  1. dataset:加载的数据集,这个从DataSet()函数而来。
  2. batch_size:batch size,设定每次训练迭代时加载的数据量。
  3. shuffle::是否将数据打乱
  4. sampler: 样本抽样
  5. num_workers:使用多进程加载的进程数,0代表不使用多进程,设定多进程可以使得加载数据时更加快速。
  6. collate_fn: 如何将多个样本数据拼接成一个batch,一般使用默认的拼接方式即
  7. pin_memory:是否将数据(tensor)保存在pin memory区,pin memory中的数据转到GPU中会快一些
  8. drop_last:dataset中的数据个数可能不是batch_size的整数倍,drop_last为True会将多出来不足一个batch的数据丢弃,False表示不丢弃。
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

碧寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值