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

PyTorch设置batch size为100时报输入与目标batch size不匹配问题

问题根因

  • 卷积层输入维度不匹配:PyTorch的nn.Conv1d要求输入张量格式为(batch_size, in_channels, sequence_length),你当前输入数据形状为(100, 32),直接送入卷积层时维度逻辑完全错位,导致后续张量的batch维度丢失,送入自定义Hybrid层时仅能处理单样本。
  • Hybrid量子层无批处理逻辑:你当前使用的Qiskit自定义Hybrid层默认只支持单样本输入,不管输入多少个样本,最终仅输出单样本结果(1, 2),和你的batch size=100不匹配。

修复步骤

1. 调整卷积层输入格式与参数

首先修正维度适配问题:

  • 若你的单样本特征长度为32、通道数为1,将__init__中的卷积层定义修改为nn.Conv1d(1, 1, kernel_size=1),并在forward函数最开头扩展输入的通道维度:
def forward(self, x):
    # 新增维度扩展,将形状从(100, 32)转为符合Conv1d要求的(100, 1, 32)
    x = x.unsqueeze(1)
    x = F.relu(self.conv1(x))
    x = self.dropout(x)
    x = x.view(x.size(0), -1)
    x = F.relu(self.fc1(x))
    x = self.fc2(x)
    # 此时x形状为(100, 1),送入Hybrid层
    x = self.hybrid(x)
    return torch.cat((x, 1 - x), -1)

若你的单样本通道数为32、特征长度为1,自行调整卷积层参数为nn.Conv1d(32, 1, kernel_size=1),对应扩展维度方式改为x = x.unsqueeze(-1)即可。

2. 修改Hybrid层支持批处理

在Hybrid层的forward逻辑中增加批处理循环,逐个处理batch内的样本后再拼接输出:

def forward(self, x):
    # 输入x形状为(batch_size, 1)
    batch_out = []
    for single_sample in x:
        # 保留原有单样本量子计算逻辑,输出单个样本的计算结果
        single_res = 原有单样本处理逻辑(single_sample)
        batch_out.append(single_res)
    # 拼接后输出形状为(batch_size, 1),匹配后续拼接要求
    return torch.tensor(batch_out, device=x.device)

修改后网络最终输出形状为(100, 2),和标签的batch size完全匹配,报错即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:06:03