在训练循环中,我将一批数据加载到CPU中,然后将其传输到GPU:
import torch.utils as utils
train_loader = utils.data.DataLoader(train_dataset, batch_size=128, shuffle=True, num_workers=4, pin_memory=True)
for inputs, labels in train_loader:
inputs, labels = inputs.to(device), labels.to(device)
这种加载数据的方式非常耗时,有没有直接加载数据到GPU而不需要传输的方法?
3条答案
按热度按时间9bfwbjaz1#
@PeterJulian首先感谢您的回复。据我所知,没有单行命令可以将整个数据集加载到GPU。实际上,在我的回复中,我的意思是在数据加载器的
__init__
中使用.to(设备)。在我之前分享的链接中有一些示例。另外,我在下面留下了一个示例数据加载器代码。希望链接中的示例和下面的代码都能有所帮助。5gfr0r5j2#
你可以加载所有的数据到Tensor比移动它yo GPU内存。(假设你有足够的内存)当你需要它使用Tensor内的一个已经在GPU内存。希望它有帮助。
b91juud33#
对于许多深度学习问题,您不能直接将训练数据加载到Tensor中。在使用其他免费多处理器进行训练时,您需要使用DataLoader生成新的增强数据。
这就是DataLoader的优势。通过策略性地设置转换参数,您的训练数据在每个时期都略有不同,有助于正则化。
当然,如果不需要在训练时进行全面的数据扩增,并且您有足够的内存将整个静态训练数据作为一个Tensor对象加载,那么这肯定会解决您的问题。
只需设置tensorObject.to(设备),但您将失去数据加载程序的优势。