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

在PyTorch中用AdaptiveAvgPool2d解决多尺寸图像CNN训练报错问题

解决不同尺寸图像训练CNN时的张量维度不匹配问题

训练不同尺寸图像的CNN模型时,遇到报错:ValueError: expected sequence of length 1200 at dim 2 (got 1069)。推测是图像尺寸不一致导致,但不想通过resize统一尺寸,希望用AdaptiveAvgPool2d解决该问题。

错误原因

报错的直接原因是批量内图像张量的尺寸不统一:不同图像的宽高不同,转成tensor后形状不一致,自定义的collate_fn尝试将这些形状不同的张量强行拼接成一个大张量,导致维度不匹配报错。

AdaptiveAvgPool2d的作用是将任意尺寸的输入特征图转换成指定尺寸的输出,但批量处理的前提是所有样本的张量形状一致,才能正常输入到模型中进行批量运算。

解决方案

需要在数据加载阶段先将每个图像张量通过AdaptiveAvgPool2d转换成固定尺寸,这样批量内的张量形状统一,就能正常输入到模型;模型里的AdaptiveAvgPool2d可以保留,用于进一步调整特征图尺寸。

修改后的数据集代码

def makeData():
    data = []
    # cat
    for i in range(1, 11):
        data.append({"path": "images/cat_" + str(i) + ".jpeg", "label": 1})
    # not cat
    for i in range(1, 11):
        data.append({"path": "images/not_cat_" + str(i) + ".jpeg", "label": 0})
    return data

def loadImage(path):
    return Image.open(path).convert('RGB')

class MyDataset(Data.Dataset):
    def __init__(self, data):
        self.data = data
        # 加入AdaptiveAvgPool2d将图像统一为3x32x32(和模型注释的输入尺寸匹配)
        self.transform = transforms.Compose([
            transforms.ToTensor(),
            transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)),
            # 用自适应平均池化替代resize,得到固定尺寸张量
            lambda x: torch.nn.functional.adaptive_avg_pool2d(x, (32, 32))
        ])
    
    def __getitem__(self, idx):
        img = loadImage(self.data[idx]["path"])
        img = self.transform(img)
        label = torch.FloatTensor([self.data[idx]["label"]])
        return img, label

    def __len__(self):
        return len(self.data)

# 现在不需要自定义collate_fn,使用默认实现即可
loader = Data.DataLoader(MyDataset(makeData()), batch_size=2, shuffle=True)

模型代码可保留原结构

你的模型中已有的AdaptiveAvgPool2d((16, 16))可以正常工作:输入到模型的张量已经是统一的3x32x32,经过两次卷积后仍为32x32x32,再经过自适应池化得到32x16x16,后续全连接层的维度完全匹配。

额外说明

  • 若不想在数据加载阶段做自适应池化,也可修改collate_fn让它返回包含不同形状张量的列表,然后在训练循环中逐个处理样本(批量大小设为1),但这种方式训练效率极低,不推荐。
  • AdaptiveAvgPool2d与resize的区别:resize通过插值拉伸/压缩图像,会改变像素空间分布;自适应平均池化通过对区域像素取平均值得到固定尺寸,能更好保留图像特征信息,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:19:54