如何在Qiskit的VQC中实现可参数化的Amplitude Encoding振幅编码
问题原因
Qiskit 原生的 initialize 方法在构造电路阶段会强制校验输入量子态的归一性,需要实时计算输入向量各元素的绝对值平方和,而ParameterVector是参数占位符,构造阶段没有实际数值,因此会触发类型错误,不支持直接传入参数化向量做振幅编码。
解决方案
使用Qiskit Machine Learning模块提供的RawFeatureVector类实现参数化振幅编码,该类专门适配VQC等量子机器学习模型的特征映射需求,支持参数化输入,不需要在电路构造阶段做归一性校验。
2量子比特测试示例(对应你报错的demo场景)
import numpy as np from qiskit.circuit import QuantumCircuit, ParameterVector from qiskit_machine_learning.circuit.library import RawFeatureVector # 2量子比特对应4维特征向量 feature_dim = 4 x = ParameterVector('x', feature_dim) # 构造参数化振幅编码电路 amp_encoding = RawFeatureVector(feature_dimension=feature_dim) custom_circ = QuantumCircuit(amp_encoding.num_qubits) custom_circ.append(amp_encoding, range(amp_encoding.num_qubits)) # 绑定参数验证功能 vector = [0.124, -0.124, 0.124, 0.124] # 输入向量需提前做L2归一化 norm_vector = vector / np.linalg.norm(vector) bound_circ = custom_circ.bind_parameters({x: norm_vector})
190维特征适配方案
你需要的8量子比特实现逻辑如下:
- 190维原始特征先补零到256维(2^8),匹配8量子比特的振幅空间大小
- 补零后的向量做L2归一化后输入电路
- 直接将构造好的编码电路作为特征映射传入VQC类即可使用
对应代码示例:
import numpy as np from qiskit_machine_learning.circuit.library import RawFeatureVector from qiskit_machine_learning.algorithms import VQC # 2^8=256,刚好容纳190个特征+66个补零值 feature_dim = 256 amp_feature_map = RawFeatureVector(feature_dimension=feature_dim) # 单条样本预处理示例 raw_feature = np.random.rand(190) # 末尾补66个0 padded_feature = np.pad(raw_feature, (0, 66), mode='constant') # L2归一化 normed_feature = padded_feature / np.linalg.norm(padded_feature) # 后续直接将amp_feature_map传入VQC构造参数即可 # vqc = VQC(feature_map=amp_feature_map, ansatz=你的变分电路, ...)
注意事项
- 输入到
RawFeatureVector的特征向量必须提前做L2归一化,保证所有元素的平方和为1,否则运行时会出现量子态有效性报错 RawFeatureVector的feature_dimension参数必须为2的整数次幂,对应消耗的量子比特数为log2(feature_dimension)
内容的提问来源于stack exchange,提问作者Fred Derf
相关产品推荐
相关产品推荐

