You need to enable JavaScript to run this app. PyTorch自定义Dataset类实例化时__getitem__()方法未触发问题求助
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch自定义Dataset类实例化时__getitem__()方法未触发问题求助

问题原因

你对PyTorch Dataset的方法触发逻辑存在误解:__getitem__ 不会在类实例化阶段被调用,它属于懒加载接口,仅在实际读取数据的时候才会执行。__init__ 方法是实例化阶段唯一会执行的逻辑,仅用来加载数据集的元信息(比如你的csv文件读取、根路径存储都属于这一步的操作)。

触发__getitem__的正确场景

只有执行以下操作时,你写的print("GET!")才会执行:

  • 主动通过下标读取数据集的单个元素:
    # 实例化阶段,不会打印GET!
    custom_dataset = MaleFacesDataset(csv_path="你的csv文件路径", root_dir="你的图片根目录")
    # 主动取第0个元素,触发__getitem__,打印GET!
    sample = custom_dataset[0]
    
  • 将Dataset传入DataLoader后迭代读取批次数据时,DataLoader会自动批量调用__getitem__加载数据。

你现有代码的其他问题

  • __init__方法中直接使用了未作为参数传入的transform变量,运行会报未定义错误,建议修改构造方法:
    def __init__(self, csv_file, root_dir, transform=None):
        self.landmarks_frame = pd.read_csv(csv_file)
        self.root_dir = root_dir
        self.transform = transform
    
  • 存在重复的Image格式转换代码,你连续两次调用Image.fromarray处理同一份sample,属于冗余逻辑,可以删掉任意一行。

内容的提问来源于stack exchange,提问作者Avalon1511

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 01:45:05