Error: The size of tensor a (2048) must match the size of tensor b (1000) at nonsingleton dimension2

这个错误信息表明在执行张量运算时,两个张量在非单一维度(这里是维度2)上的尺寸不匹配。具体来说,张量a在维度2上的大小是2048,而张量b在相同维度上的大小却是1000。

报错代码行为:

similarity = torch.sum(seq_norm * spec_norm, dim=2)

这是seq_norm和spec_norm做点积的时候要求其向量维度一致

seq_norm是a,seqc_norm是b,于是查看ab两个的大小,发现a是torch.Size([1, 4567, 2048]) b是torch.Size([1000])

b出了问题,找到b的出处,b是用resnet152提取的特征向量,维度为1000是因为直接保存了全连接层的结果(resnet的输出结果就是1000个类别)

要想匹配维度,需要修改b的保存,使b保存全连接层的前一层,就可以解决。

def forward(self, x):
    x = self.transform(x)
    x = x.unsqueeze(0).to(device)
    x = Variable(x)
    
    # 获取 'avgpool' 层的输出
    res_features = self.resnet.layer4(x)
    res_features = F.avg_pool2d(res_features, res_features.size()[3])  # 全局平均池化
    res_features = res_features.squeeze(3).squeeze(2)  # 去除不必要的维度
    
    return res_features

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值