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

PyTorch孪生神经网络批量输入尺寸不匹配错误解决求助

问题原因分析

错误核心是特征拼接维度选错了:

  • 批量输入时,output1和output2的形状是[batch_size, 5]
  • 默认的torch.cat会在样本维度(第0维)拼接,得到[2*batch_size, 5]的张量
  • 但后续全连接层self.fc第一层是nn.Linear(10,5),要求每个样本的特征是10维,自然就出现尺寸不匹配的报错
修复方案

1. 修正拼接维度

在forward方法里,给torch.cat加上dim=1参数,把每个样本的两个特征在特征维度拼接,这样得到的张量形状是[batch_size, 10],刚好匹配全连接层的输入要求:

def forward(self, input1, input2):
    output1 = self.forward_once(input1)
    output2 = self.forward_once(input2)
    # 关键修改:指定dim=1在特征维度拼接
    combinedOutput = torch.cat((output1, output2), dim=1)
    output = self.fc(combinedOutput)
    return output

2. 批量数据输入的正确姿势

你的DataLoader需要返回成对的输入数据,每个batch的结构应该是(input_batch1, input_batch2, label_batch):

  • input_batch1/input_batch2:形状[batch_size, 30](对应你的输入特征维度)
  • label_batch:形状[batch_size, 1](二分类标签,0或1表示样本对是否相似)

训练循环的示例代码:

for input1, input2, labels in dataloader:
    optimizer.zero_grad()
    outputs = model(input1, input2)
    # Sigmoid输出是浮点型,标签要转成float匹配
    loss = criterion(outputs, labels.float())
    loss.backward()
    optimizer.step()
验证修改

用随机批量数据测试是否正常:

model = MySiameseNet()
# 生成batch_size=10的随机输入
input1 = torch.randn(10, 30)
input2 = torch.randn(10, 30)
output = model(input1, input2)
print(output.shape)  # 应该输出torch.Size([10, 1]),符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:03:15