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

PyTorch多输入模型输入输出特征定义及维度错误排查

问题解答

先针对你的模型维度疑问和报错问题逐一解答:

1. ResNet50全连接层与分支维度的关系

ResNet50原模型的最后全连接层Linear(in_features=2048, out_features=1000)是用于ImageNet分类的输出层,但你代码中通过list(models.resnet50().children())[:-1]已经去掉了这个全连接层,保留的是特征提取部分(到平均池化层为止),这部分输出的特征维度是torch.Size([1,2048,1,1]),展平后为2048维。

  • self.landmark_features的最后输出维度不需要强制设为1000,这个维度可以根据任务需求自由调整,和原ResNet的分类输出维度无绑定关系。
  • self.combined_features的第一层Linear的in_features必须等于图像分支展平后的维度 + 关键点分支输出的维度,而非固定为1000。

2. 关键点分支第一层输入维度的正确性

关键点输入尺寸为[1,96],代表每个样本的特征是96维,所以self.landmark_features第一层Linear(in_features=96)的设置是完全正确的——Linear层的in_features必须和输入特征维度严格匹配。

3. 维度错误(1x3048 vs 1000x512)的原因

报错里的3048是图像分支展平维度 + 关键点分支输出维度的总和:

  • 图像分支经self.image_features后输出为torch.Size([1,2048,1,1]),通过a.view(a.size(0), -1)展平后变成[1,2048]
  • 关键点分支经self.landmark_features后输出为[1,1000]
  • 两者拼接后维度为1*(2048+1000)=1*3048

而你设置的self.combined_features第一层是Linear(1000,512),它期望输入维度为1000,但实际输入是3048,维度不匹配导致矩阵乘法报错。

修复方案

只需把self.combined_features的第一层Linear的in_features改为3048即可:

self.combined_features = nn.Sequential(
    nn.Linear(3048, 512),  # 修改为图像分支+关键点分支的总维度:2048+1000=3048
    nn.ReLU(),
    nn.Linear(512, 32),
    nn.ReLU(),
    nn.Linear(32,1))

你也可以调整self.landmark_features的最后输出维度(比如改为2048),只要保证拼接后的总维度和combined_features第一层的in_features一致即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:36:20