You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch DataLoader返回targets形状异常问题咨询

解决PyTorch DataLoader中Target形状转置的问题
  • 问题根源:你的__getitem__返回的target是Python列表或numpy数组,而非PyTorch张量。DataLoader默认的collate_fn会对这类可迭代对象按元素位置堆叠——22个长度为4的列表,会被拼成4个长度为22的数组,最终形成len(targets)=4、len(targets[0])=22的结构。

  • 快速修复:把__getitem__里的target转换成PyTorch张量即可。示例代码:

def __getitem__(self, idx):
    # 生成processed_images的逻辑不变
    # 假设原来的target是列表或numpy数组
    target = [1, 0, 0, 0]  # 你的4维独热向量
    # 转换成张量
    target_tensor = torch.tensor(target, dtype=torch.float32)
    return processed_images, target_tensor

这样DataLoader会自动按batch维度堆叠,得到形状为torch.Size([22,4])的target张量。

  • 备选方案:自定义collate_fn
    如果因为某些原因不能提前转成张量,可以自定义数据拼接函数,强制按样本维度堆叠:
def custom_collate(batch):
    # 从batch中提取所有图像和target
    processed_images = torch.stack([sample[0] for sample in batch])
    targets = torch.tensor([sample[1] for sample in batch])
    return processed_images, targets

# 初始化DataLoader时传入自定义collate_fn
dataloader = DataLoader(your_dataset, batch_size=22, collate_fn=custom_collate)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:57:09