gpt4 book ai didi

machine-learning - 如何将不适合内存的巨大数据集拆分并加载到pytorch Dataloader中?

转载 作者:行者123 更新时间:2023-11-30 09:15:06 26 4
gpt4 key购买 nike

我正在训练一个深度学习模型,以便使用 Google 的 Colab 对 NIH 的 Chest Xray-14 数据集中的疾病进行多标签分类。鉴于大约 112k 的训练示例和有限的 RAM,我无法一次将所有图像加载到 Dataloader 中。

有没有一种方法可以将图像路径存储在pytorch的DataLoader中,在训练期间仅读取当前迭代所需的图像,一旦迭代完成,图像就会从内存中卸载,依此类推,直到一个epoch完成.

最佳答案

是的,ImageFolder 的默认行为是创建图像路径列表并仅在需要时加载实际图像。它不支持多类标签。但是,您可以编写自己的 Dataset支持多标签,引用ImageFolder类的详细信息。

期间__init__您构建图像路径列表和相应的标签列表。仅当 __getitem__ 时才加载图像被调用。下面是此类数据集类的 stub ,详细信息将取决于文件的组织、图像类型和标签格式。

class CustomDataset(torch.utils.data.Dataset):
def __init__(self, args):
""" Construct an indexed list of image paths and labels """

def __getitem__(self, n):
""" Load image n in the list of image paths and return it along with its label.
In the case of multiclass the label will probably be a list of values"""

def __len__(self):
""" return the total number of images in this dataset """

创建有效的数据集实例后,DataLoader 的实例应该创建,提供您的数据集作为参数。 DataLoader 负责对其数据集进行采样,即调用 __getitem__您编写的方法,并将单个样本放入小批量中。它还处理并行加载并定义索引的采样方式。 DataLoader 本身不会存储超出其需要的内容。任何时候它应该在内存中保存的最大样本数是 batch_size * num_workers (或 batch_size 如果 num_workers == 0 )。

关于machine-learning - 如何将不适合内存的巨大数据集拆分并加载到pytorch Dataloader中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57836355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com