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

自定义Dataset实现ImageFolder转DataLoader偶发张量尺寸不匹配报错

问题分析与解决方法

为什么会出现4通道图像?

报错里的[4,128,128]是RGBA格式的图像,第四个通道是透明度(Alpha通道)。你的数据集里混进了少量这类格式的图片,大部分图片是常规的RGB三通道,所以才会出现偶发报错——当DataLoader随机采样的batch里刚好包含RGBA图时,就会因为通道数不匹配触发stack报错,没抽到的时候就正常运行。

解决办法

在自定义Dataset的__getitem__方法里,强制将所有图像转换为3通道RGB格式,不管原图是RGBA、灰度图还是其他格式。直接修改图像读取的代码:

原来的图像读取代码可能是这样:

from PIL import Image

img = Image.open(img_path)
img = img.resize((128, 128))

改成下面这样,加个.convert('RGB'):

from PIL import Image

img = Image.open(img_path).convert('RGB')  # 强制转成3通道RGB
img = img.resize((128, 128))

这样所有图像都会统一成3通道,DataLoader堆叠batch时就不会再出现尺寸不匹配的问题了。

另外也可以提前批量检查并转换数据集里的RGBA图,但代码里实时处理更稳妥,能避免后续新加入的异常格式图片引发问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:49:55