dataloadershuffle的简单介绍

http://www.itjxue.com  2023-02-11 13:06  来源:未知  点击次数: 

DataLoader的使用

简单来说,DataLoader就是数据加载器,结合了数据集和取样器,并且可以提供多个线程处理数据集。在训练模型时使用到此函数,用来把训练数据分成多个小组,此函数每次抛出一组数据。直至把所有的数据都抛出。就是做一个数据的初始化。

在实践中,数据读取经常是训练的性能瓶颈,特别当模型较简单或者计算硬件性能较高时。Pytorch的Dataloader中一个很方便的功能是允许使用多进程来加速数据读取,我们可以通过num_workers来设置使用几个进程读取数据。

参数解释:

dataset:要取的数据集,一般要返回img和label

batch_size:每次从dataset中取多少数据进行打包

shuffle:是否打乱数据

num_workers:加载数据的时候采用单进程还是多进程,默认设置为0,意为采用主进程进行加载

*注:num_works在windows中会偶尔出现问题,如果遇到workerror可以考虑将num_works设置为0

drop_last:当数据集最后一批小于batch_size时,是否舍去最后一批数据集

结果:

如果增加epoch,并将shuffle设置为False,drop_last设置为True:

将shuffle设置为True后的结果:

参考资料:

1. ;spm_id_from=pageDriver

2.

3.

优化pytorch DataLoader提升数据加载速度

因为pytorch数据加载速度太慢,影响训练速度,实训快速加载数据方式,提前获取要加载的数据,整体速度能快1/6.

操作步骤如下所示:

1、激活自己的torch虚拟环境:

source activate torch

2、安装prefetch_generator包

pip install prefetch_generator

3、定义DataLoaderX,继承torch原有的DataLoaderX的属性

class DataLoaderX(DataLoader):

? ? def __iter__(self):

? ? ? ? return BackgroundGenerator(super().__iter__())

4、使用的时候只需要把DataLoader变成DataLoaderX:

如下所示:

gen= DataLoaderX(train_dataset,shuffle=True,

batch_size=batch_size,

num_workers=4,pin_memory=True,

drop_last=False,

collate_fn=yolo_dataset_collate)

为什么已经训练好的分类器在测试阶段pytorch中dataloader的batchsize和shuffle=T/F会影响分类器的准确率?

shuffle的时候是不是只把特征洗牌了而没有洗y,或者x和y洗的逻辑不一样所以导致y错位了?

(责任编辑:IT教学网)

更多

推荐MYSQL文章