DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, batch_sampler=None, num_workers=0, collate_fn=None, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None, *, prefetch_factor=2, persistent_workers=False)
pin_memory
pin_memory就是锁页内存。主机中的内存,有两种存在方式,一是锁页,二是不锁页,锁页内存存放的内容在任何情况下都不会与主机的虚拟内存进行交换(注:虚拟内存就是硬盘),而不锁页内存在主机内存不足时,数据会存放在虚拟内存中。
创建DataLoader时,设置pin_memory=True,则意味着生成的Tensor数据最开始是属于内存中的锁页内存,这样将内存的Tensor转义到GPU的显存就会更快一些。(显卡中的显存全部是锁页内存!)
当计算机的内存充足的时候,可以设置pin_memory=True。当系统卡住,或者交换内存使用过多的时候,设置pin_memory=False。因为pin_memory与电脑硬件性能有关,pytorch开发者不能确保每一个炼丹玩家都有高端设备,因此pin_memory默认为False。
如果想提速的话设置pin_memory=True。一般搭配x.cuda(non_blocking=True)。这样将数据从CPU移动到GPU的时候,它是异步的。在它传输的时候,CPU还可以干其他的事情
drop_last
drop_last默认是False
如果设置为True:这个是对最后的未完成的batch来说的,比如你的batch_size设置为64,而一个epoch只有100个样本,那么训练的时候后面的36个就被扔掉了…
如果为False(默认),那么会继续正常执行,只是最后的batch_size会小一点。
num_works
默认是0
num_workers
属性告诉DataLoader
实例要使用多少个子进程进行数据加载。默认情况下,num_workers
值被设置为0,0值代表告诉加载器在主进程内部加载数据。如果__getitem__中包含运算的话(如对图片的resize,灰度,归一化处理等),设置num_works>0, 并行读取。当设置num_works>0的时候,具体是多少最优要去尝试
Pytorch torch.utils.data.DataLoader(二) —— pin_memory锁页内存 & drop_last & num_works
于 2021-08-10 20:16:39 首次发布
DataLoader的pin_memory参数用于决定是否将数据加载到锁页内存,提高GPU数据传输速度。若计算机内存充足,建议设置为True。drop_last参数控制是否丢弃最后一个不完整的小批量数据,设为True时,不足batch_size的数据会被丢弃。num_workers指定数据加载子进程的数量,可提升数据预处理效率。适当设置这些参数能优化训练性能。
摘要由CSDN通过智能技术生成