我正在尝试使用 VQC 类在 qiskit 中实现量子神经网络。
问题是每个数据都包含 190 个特征,这些特征无法使用默认的 VQC 函数 (ZZfeatureMap) 进行编码,因为这意味着创建一个具有 190 个量子位的电路。
我想采用的解决方案是振幅编码,它允许我仅使用 8 个量子位(256 个振幅 = 190 个特征 + 66 个零)。 如何在 qiskit 中实现执行此操作的参数化电路?
我尝试了以下方法(以 2 个量子位为例),但不起作用:
custom_circ = QuantumCircuit(2)
x = ParameterVector('x', 4)
custom_circ.initialize(x)
编辑:
我的问题不在于参数,而在于幅度编码。 通常,如果我需要在 2 个 Qbit 中编码 4 个数字的向量,我只需执行以下操作:
circuit = QuantumCircuit(2)
vector = [0.124, -0.124, 0.124, 0.124]
circuit.initialize(vector)
通过这种方式,我将向量编码为量子位的振幅。 但现在我需要参数化它(向量不固定)。 问题是“初始化”函数不接受参数:
Traceback (most recent call last):
[...]
File "D: ... \qiskit\extensions\quantum_initializer\initializer.py", line 455, in initialize
return self.append(Initialize(params, num_qubits), qubits)
File "D: ... \qiskit\extensions\quantum_initializer\initializer.py", line 89, in init
if not math.isclose(sum(np.absolute(params) ** 2), 1.0,
TypeError: bad operand type for abs(): 'Parameter'
有没有一种方法可以创建参数化的幅度编码?
编辑2: 我解决了问题,谢谢。 如果您想参数化初始化电路,只需使用 RawFeatureVector .
最佳答案
您可以使用Parameter
在qiskit中构建参数化电路类(class)。这是一个例子:
In [1]: from qiskit import QuantumCircuit
...: from qiskit.circuit import Parameter
In [2]: custom_circ = QuantumCircuit(2)
...: theta = Parameter("\u03B8")
...: custom_circ.rz(theta, range(2))
...: custom_circ.draw()
Out[2]:
┌───────┐
q_0: ┤ RZ(θ) ├
├───────┤
q_1: ┤ RZ(θ) ├
└───────┘
关于quantum-computing - 带有幅度编码的 qiskit VQC 用于状态准备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68257662/