You need to enable JavaScript to run this app. PyTorch自定义数据集__getitem__解包错误及图片数组维度问题求助
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch自定义数据集__getitem__解包错误及图片数组维度问题求助

解决方法

报错根因

你的问题核心是数据集里的样本格式不统一:
一部分样本是符合预期的(图片数组, 标签)二元组,所以前几次调用__getitem__可以正常跑,等DataLoader加载到四元组格式的异常样本时,就会触发解包错误。

修复代码

先导入numpy,修改__getitem__方法兼容两种格式即可:

import numpy as np

def __getitem__(self, index):
    data_item = self.data[index]
    # 适配两种样本格式
    if len(data_item) == 2:
        img, label = data_item
    else:
        part1, part2, part3, label = data_item
        # 把part3的列表转为numpy数组,形状为(150, 312)
        part3_arr = np.array(part3)
        # 以下合并逻辑可以根据你实际需要的图片维度调整,示例给两种常用方式:
        # 方案1:直接堆叠三个部分得到3维数组,适配多通道输入要求
        img = np.stack([
            part1, 
            np.array(part2), 
            part3_arr.flatten()
        ], axis=0)
        # 方案2:如果只需要用part1作为输入,直接reshape到2维即可
        # img = part1.reshape(32, 64) # 2048=32*64,按需调整尺寸
        
        # 如果需要适配PIL的(H,W,C)维度顺序,加一行转置即可
        # img = np.transpose(img, (1,2,0))
    return img, int(label)

后续优化建议

这个兼容方案只是临时解决运行报错,你最好回头排查下数据集的生成逻辑:

  • 确认为什么会同时生成两种格式的样本
  • 从数据生产侧统一格式,比下游加载时做兼容更稳妥
  • 可以在生成数据集时加格式校验,过滤掉异常样本,避免运行时中途崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 13:24:03