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

Qiskit VQC训练报错:输入数据形状不匹配问题求助

问题解决步骤

核心错误分析

  1. fit方法参数传错:vqc.fit(X_train, X_test) 中第二个参数应传入训练集标签y_train,而非测试集特征X_test。VQC的fit()方法要求第二个参数是样本对应的标签,传入测试特征会直接导致维度不匹配。
  2. 特征映射选择错误:使用TwoLocal作为feature_map不合适,它默认是变分电路的ansatz组件,而非用于经典特征到量子态的编码映射,这会导致VQC无法识别输入特征的维度,出现"应为0,实际得到2"的错误。

修正后的代码

from qiskit import QuantumCircuit, transpile, assemble
from qiskit_aer import Aer
from qiskit_machine_learning.algorithms import VQC
from qiskit_algorithms.optimizers import COBYLA
from qiskit.circuit.library import TwoLocal, ZZFeatureMap
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
import numpy as np

# 演示用样本数据
scaled_data = np.random.rand(150, 2)
y = np.random.randint(0, 3, size=150)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(scaled_data, y, test_size=0.3, random_state=42)

# 根据特征维度定义量子比特数量
num_qubits = X_train.shape[1]

# 使用专门的特征映射ZZFeatureMap完成经典特征编码
feature_map = ZZFeatureMap(num_qubits=num_qubits, entanglement='linear')
# ansatz使用TwoLocal作为变分电路组件
ansatz = TwoLocal(num_qubits=num_qubits, entanglement='linear', rotation_blocks=['ry', 'rz'], entanglement_gate='cz')

# 定义优化器
optimizer = COBYLA()

# 初始化VQC,指定交叉熵损失适配多分类场景
vqc = VQC(feature_map=feature_map, ansatz=ansatz, optimizer=optimizer, loss='cross_entropy')

# 修正fit参数:传入训练特征与训练标签
vqc.fit(X_train, y_train)

# 评估分类器
score = vqc.score(X_test, y_test)
print(f"测试集准确率: {score}")

额外说明

  • ZZFeatureMap:是Qiskit中专门用于经典特征编码的映射,会根据输入特征的维度自动匹配输入数量,确保和你的2维特征对齐。
  • fit方法规范:所有机器学习模型的fit方法均遵循(特征数据, 标签数据)的参数格式,不要混淆测试集与标签的传入位置。
  • 多分类适配:针对3分类任务,显式指定loss='cross_entropy'可让VQC更好地适配多分类场景。

内容的提问来源于stack exchange,提问作者Dr Amit K Awasthi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:47:32