Qiskit VQC训练报错:输入数据形状不匹配问题求助
问题解决步骤
核心错误分析
- fit方法参数传错:
vqc.fit(X_train, X_test)中第二个参数应传入训练集标签y_train,而非测试集特征X_test。VQC的fit()方法要求第二个参数是样本对应的标签,传入测试特征会直接导致维度不匹配。 - 特征映射选择错误:使用
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
相关产品推荐
相关产品推荐

