I have a problem in my code for quantum neural network.
I tried to encoding 16 classical vectors to 4 qubits.
The function for amplitude encoding in my code as below:
def amplitude_encoding(num_qubits,x):
qc = QuantumCircuit(num_qubits,name ="Amplitude Encoding")
qc.initialize(x, [0, 1, 2, 3])
encode = qc.to_instruction()
return encode
I assigned "parameters" to x
with code as below:
self.X = [qiskit.circuit.Parameter('X{}'.format(i)) for i in range(self.n_inputs)]
And I got a same error as below.
How can I solve this problem?
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In [16], line 3
1 simulator = qiskit.Aer.get_backend('aer_simulator')
----> 3 circuit = QuantumCircuit_fixed(4, simulator, 100)
4 circuit._circuit.draw('mpl')
Cell In [15], line 21, in QuantumCircuit_fixed.__init__(self, n_qubits, backend, shots)
18 self.theta = [qiskit.circuit.Parameter('theta{}'.format(j)) for j in range(self.n_inputs)]
19 print(self.theta)
---> 21 self.feature_map = amplitude_encoding(self.n_qubits, self.X)
22 #self.feature_map = RawFeatureVector(16)
23 self._circuit.append(self.feature_map, range(4))
Cell In [2], line 7, in amplitude_encoding(num_qubits, x)
5 def amplitude_encoding(num_qubits,x):
6 qc = QuantumCircuit(num_qubits,name ="Amplitude Encoding")
----> 7 qc.initialize(x, [0, 1, 2, 3])
8 encode = qc.to_instruction()
9 return encode
File ~\anaconda3\envs\QISKIT\lib\site-packages\qiskit\extensions\quantum_initializer\initializer.py:191, in initialize(self, params, qubits)
188 qubits = [qubits]
189 num_qubits = len(qubits) if isinstance(params, int) else None
--> 191 return self.append(Initialize(params, num_qubits), qubits)
File ~\anaconda3\envs\QISKIT\lib\site-packages\qiskit\extensions\quantum_initializer\initializer.py:57, in Initialize.__init__(self, params, num_qubits)
36 def __init__(self, params, num_qubits=None):
37 r"""Create new initialize composite.
38
39 Args:
(...)
55 and the remaining 3 qubits to be initialized to :math:`|0\rangle`.
56 """
---> 57 self._stateprep = StatePreparation(params, num_qubits)
59 super().__init__("initialize", self._stateprep.num_qubits, 0, self._stateprep.params)
File ~\anaconda3\envs\QISKIT\lib\site-packages\qiskit\circuit\library\data_preparation\state_preparation.py:99, in StatePreparation.__init__(self, params, num_qubits, inverse, label)
96 self._from_label = isinstance(params, str)
97 self._from_int = isinstance(params, int)
---> 99 num_qubits = self._get_num_qubits(num_qubits, params)
101 params = [params] if isinstance(params, int) else params
103 super().__init__(self._name, num_qubits, params, label=self._label)
File ~\anaconda3\envs\QISKIT\lib\site-packages\qiskit\circuit\library\data_preparation\state_preparation.py:201, in StatePreparation._get_num_qubits(self, num_qubits, params)
198 raise QiskitError("Desired statevector length not a positive power of 2.")
200 # Check if probabilities (amplitudes squared) sum to 1
--> 201 if not math.isclose(sum(np.absolute(params) ** 2), 1.0, abs_tol=_EPS):
202 raise QiskitError("Sum of amplitudes-squared does not equal one.")
204 num_qubits = int(num_qubits)
TypeError: bad operand type for abs(): 'Parameter'