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

使用预训练InceptionV3进行图像分类时遭遇输入尺寸不匹配错误

解决InceptionV3预训练模型特征提取时的尺寸不匹配错误

咱们来拆解你遇到的RuntimeError: size mismatch问题,主要有几个核心问题需要修正:

1. 模型定义的笔误与结构错误

你代码里的pretrained_features是未定义的变量,这明显是个笔误,应该指代前面的pretrained_model。但更关键的是,直接通过children()[:-1]截取InceptionV3的结构并不合适——InceptionV3的网络结构比较特殊,简单用nn.Sequential包裹并截断会破坏特征输出逻辑,导致后续全连接层(fc)接收到的张量维度完全不匹配。

正确的特征提取模型定义

我们可以先关闭InceptionV3的辅助分类器(避免训练模式下返回双输出),再精准提取到全连接层之前的特征提取部分:

import torch
import torch.nn as nn
import torchvision.models as models

# 加载预训练InceptionV3,关闭辅助分类器避免双输出
inceptionV3 = models.inception_v3(pretrained=True, aux_logits=False)
# 提取特征提取主干:去掉最后的全连接层(fc)
pretrained_model = nn.Sequential(*list(inceptionV3.children())[:-1])
# 冻结预训练参数
for param in pretrained_model.parameters():
    param.requires_grad = False

这样定义的pretrained_model,输入torch.Size([256, 3, 299, 299])的张量后,会输出torch.Size([256, 2048, 1, 1])的特征图,你只需要再加一步展平操作,就能得到适配后续分类层的特征向量:

out_features = pretrained_model(inputs)
# 展平特征图为二维张量
out_features = torch.flatten(out_features, 1)

2. Transforms中的弃用函数问题

你用的transforms.Scale在新版torchvision中已经被弃用了,建议替换为transforms.Resize,避免后续版本兼容性问题:

from torchvision import transforms

data_transforms = transforms.Compose([
 transforms.Resize((299,299)),  # 替换Scale为Resize
 transforms.RandomHorizontalFlip(),
 transforms.ToTensor(),
 transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

3. 额外注意事项

  • 如果你在训练模式下使用InceptionV3,务必确保aux_logits=False,否则模型会返回主输出和辅助输出两个张量,同样会导致后续处理出错。
  • 如果你想更精准地控制特征提取范围,可以直接调用InceptionV3的子模块(比如inceptionV3.Mixed_5b、inceptionV3.Mixed_7c等)来拼接主干网络,结构会更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:44:27