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

PyTorch中DataLoader返回长度为16而非预期1的原因咨询

DataLoader返回长度16而非1的原因解析

问题重现

用户执行代码:

img_path = 'G:/tiff/NC_H08_20220419_0600.tif'
img = io.imread(img_path).astype(np.float32)
print(img.shape)
data_tf = torchvision.transforms.Compose([torchvision.transforms.ToTensor()])
train_data = data_tf(img)
print(train_data.shape)
train_loader = DataLoader(dataset=train_data, batch_size=1)
print(len(train_loader))

得到输出:

(2486, 2755, 16)
torch.Size([16, 2486, 2755])
16

用户原本预期len(train_loader)为1,但实际输出是16,以下是原因和解决办法:

原因分析

  • ToTensor()会将numpy数组的维度从(H, W, C)转换为PyTorch标准的(C, H, W),原本的16个通道被放到了张量的第一个维度。
  • DataLoader默认将输入张量的第一个维度视为样本数量维度,它把这16个通道当成了16个独立样本处理。
  • 当batch_size=1时,每个批次仅包含1个样本,总批次数量等于样本数,也就是16,所以len(train_loader)返回16。

解决办法

要把整个图像作为1个样本,需要给张量添加一个批次维度,让第一个维度代表样本数(这里是1):

# 在转换后添加维度
train_data = data_tf(img).unsqueeze(0)
# 此时train_data.shape为torch.Size([1, 16, 2486, 2755])

这样DataLoader会把第一个维度的长度1当作样本总数,len(train_loader)就会返回1,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:45:57