Reh*_*man 5 machine-learning computer-vision deep-learning pytorch
我正在训练一个深度学习模型,使用 Google 的 Colab 对 NIH 的 Chest Xray-14 数据集中的疾病进行多标签分类。鉴于大约 112k 训练示例和有限的 RAM,我无法一次将所有图像加载到 Dataloader 中。
有没有一种方法可以将图像路径存储在 pytorch 的 DataLoader 中,只读取训练期间当前迭代所需的图像,一旦迭代完成,图像就会从内存中卸载,依此类推,直到一个 epoch 完成。
是的, ImageFolder的默认行为是创建图像路径列表并仅在需要时加载实际图像。它不支持多类标签。但是,您可以编写自己的Dataset来支持多标签,详细信息请参考ImageFolder类。
__init__在构建图像路径列表和相应的标签列表期间。仅应在__getitem__调用时才加载图像。下面是此类数据集类的存根,详细信息将取决于文件的组织、图像类型和标签格式。
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 """
Run Code Online (Sandbox Code Playgroud)
创建有效的数据集实例后,应创建DataLoader实例,并提供数据集作为参数。DataLoader 负责对其数据集进行采样,即调用__getitem__您编写的方法,并将单个样本放入小批量中。它还处理并行加载并定义索引的采样方式。DataLoader 本身不会存储超出其需要的内容。任何时候它应该在内存中保存的最大样本数是batch_size * num_workers(或者batch_size如果num_workers == 0)。
| 归档时间: |
|
| 查看次数: |
2715 次 |
| 最近记录: |