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

基于PyTorch与Qiskit的多参数混合经典量子神经网络报错解决

解决Qiskit混合经典量子神经网络多可训练参数的TypeError问题

问题分析

你遇到的TypeError: object of type 'float' has no len(),本质是原Hybrid类的逻辑只适配单个标量参数,当传入多参数张量时,参数绑定逻辑错误地将整个张量当成单个浮点数处理,触发了需要遍历参数长度的操作失败。手动设置(1,2)张量无效,是因为forward方法没有正确处理二维输入的维度拆分。

修改方案

1. 适配多参数的量子电路定义

用ParameterVector批量定义可训练参数,替代单个Parameter,方便后续参数绑定:

from qiskit import QuantumCircuit, Aer, execute
from qiskit.circuit import ParameterVector
import torch

def build_quantum_circuit():
    # 创建包含2个可训练参数的向量
    params = ParameterVector('θ', 2)
    qc = QuantumCircuit(1, 1)
    # 给量子门绑定不同的可训练参数
    qc.rx(params[0], 0)
    qc.ry(params[1], 0)
    qc.measure(0, 0)
    return qc, params

2. 修改Hybrid类的forward方法

调整输入处理逻辑,拆分二维输入张量的每个样本参数,逐一绑定到量子电路:

class Hybrid(torch.nn.Module):
    def __init__(self, backend, shots):
        super().__init__()
        self.backend = backend
        self.shots = shots
        self.qc, self.trainable_params = build_quantum_circuit()
    
    def forward(self, x):
        # 输入x形状要求为(N, 2):N是样本数,2是可训练参数个数
        output = []
        for sample in x:
            # 绑定当前样本的2个参数到量子电路对应位置
            bound_circuit = self.qc.bind_parameters({
                self.trainable_params[0]: sample[0].item(),
                self.trainable_params[1]: sample[1].item()
            })
            # 执行量子电路并计算期望输出
            job = execute(bound_circuit, self.backend, shots=self.shots)
            counts = job.result().get_counts()
            expectation = counts.get('0', 0) / self.shots
            output.append(expectation)
        # 转换为PyTorch张量返回,保持维度匹配
        return torch.tensor(output, dtype=torch.float32).view(-1, 1)

3. 验证多参数输入

构造符合维度要求的输入张量,测试模型运行:

# 初始化模拟器和模型
backend = Aer.get_backend('qasm_simulator')
model = Hybrid(backend, shots=1024)

# 构造3个样本,每个样本含2个可训练参数
input_tensor = torch.tensor([[0.1, 0.2], [0.3, 0.4], [0.5, 0.6]], dtype=torch.float32)
result = model(input_tensor)
print(result)

关键修改点

  • 用ParameterVector统一管理多可训练参数,避免单个参数定义的冗余。
  • 在forward方法中遍历输入的每个样本,拆分出对应参数逐一绑定,确保每个量子门获取正确的参数值。
  • 严格保证输入张量为二维结构(样本数×参数数),避免标量或一维输入导致的维度不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:17:23