`Dataset` 类中的`__getitem__` 方法

在 PyTorch 的 Dataset 类中,__getitem__ 方法是一个核心方法,它在数据加载时被调用。具体来说,__getitem__ 方法在以下情况下被调用:

1. 数据加载器(DataLoader)访问数据

注意是访问数据时,在创建dataloader实例时并不会调用,在真正要用这个数据时才用调用
__getitem__ 是 PyTorch 数据加载器(DataLoader)用来获取数据样本的方法。每当 DataLoader 需要一个数据样本时,它会调用 __getitem__ 方法来获取指定索引的样本。这通常发生在以下情况下:

  • 训练过程中:当训练模型时,数据加载器会迭代整个数据集,每次迭代时通过 __getitem__ 方法获取一个批次(batch)的数据样本。
  • 测试或验证过程中:在测试或验证阶段,数据加载器也会使用 __getitem__ 方法来获取数据样本。

2. 数据索引时

如果你直接从数据集对象中索引(例如 dataset[idx]),__getitem__ 方法也会被调用。这种方式通常在以下场景中使用:

  • 调试或分析数据:你可以通过索引来直接访问数据集中的特定样本进行分析或调试。
  • 自定义数据处理:在数据预处理过程中,可能会直接访问特定的样本来应用特定的处理或变换。

代码示例

以下是一个简单的例子,展示如何通过数据加载器来调用 __getitem__ 方法:

from torch.utils.data import DataLoader

# 创建一个数据集对象
dataset = MVSDataset(...)

# 创建数据加载器
data_loader = DataLoader(dataset, batch_size=4, shuffle=True)

# 遍历数据加载器,获取批次数据
for batch in data_loader:
    imgs = batch['imgs']
    proj_matrices = batch['proj_matrices']
    depth = batch['depth']
    depth_values = batch['depth_values']
    mask = batch['mask']
    # 进一步处理数据

在上面的代码中,每次 data_loader 需要一个批次的数据时,它会调用 dataset.__getitem__(idx) 来获取指定索引 idx 的数据样本。

__getitem__ 的作用

MVSDataset 类中,__getitem__ 方法负责:

  • 根据给定的索引 idx,从 metas 列表中提取元数据(例如,scan, light_idx, ref_view, src_views)。
  • 读取和处理相关的图像、投影矩阵、深度图等数据。
  • 返回一个包含所有这些数据的字典,以供后续训练或测试使用。

这样,__getitem__ 方法为每个数据样本提供了标准化的处理流程,使得数据加载和训练过程更加高效和一致。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ocpro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值