-
Notifications
You must be signed in to change notification settings - Fork 370
Closed
Labels
type: bug 🐞Something isn't workingSomething isn't working
Milestone
Description
In the given line of code, when the feature_map = None
the TrainableFidelityQuantumKernel
doesn't initialize the feature map correctly. Although the base class FidelityQuantumKernel
assigns a ZZFeatureMap
to the argument, this is not reflected in the child class.
qiskit-machine-learning/qiskit_machine_learning/kernels/trainable_fidelity_quantum_kernel.py
Lines 86 to 95 in de2cf2c
super().__init__( | |
feature_map=feature_map, | |
fidelity=fidelity, | |
training_parameters=training_parameters, | |
enforce_psd=enforce_psd, | |
evaluate_duplicates=evaluate_duplicates, | |
) | |
# override the num of features defined in the base class | |
self._num_features = feature_map.num_parameters - self._num_training_parameters |
When doing this,
quantum_kernel = TrainableFidelityQuantumKernel(
fidelity=fidelity,
feature_map=None,
)
I get the following error,
AttributeError Traceback (most recent call last)
Cell In[3], line 6
2 fidelity = ComputeUncompute(sampler=sampler)
3 # feature_map = CustomFeatureMap(asset, artifacts).circuit
4
5 # Trainable Fidelity Quantum Kernel has trainable parameters and calculates fidelity.
----> 6 quantum_kernel = TrainableFidelityQuantumKernel(
7 fidelity=fidelity,
8 )
10 # perturbation for calculating the gradient; read more about it.
11 # cb_qkt = QKTCallback()
12 spsa_opt = SPSA(maxiter=10, learning_rate=0.05, perturbation=0.05)
File ~/miniconda3/envs/qiskit/lib/python3.9/site-packages/qiskit_machine_learning/kernels/trainable_fidelity_quantum_kernel.py:95, in TrainableFidelityQuantumKernel.__init__(self, feature_map, fidelity, training_parameters, enforce_psd, evaluate_duplicates)
86 super().__init__(
87 feature_map=feature_map,
88 fidelity=fidelity,
(...)
91 evaluate_duplicates=evaluate_duplicates,
92 )
94 # override the num of features defined in the base class
---> 95 self._num_features = feature_map.num_parameters - self._num_training_parameters
96 self._feature_parameters = [
97 parameter
98 for parameter in feature_map.parameters
99 if parameter not in self._training_parameters
100 ]
101 self._parameter_dict = {parameter: None for parameter in feature_map.parameters}
AttributeError: 'NoneType' object has no attribute 'num_parameters'
A suggested solution to this problem is,
super().__init__(
feature_map=feature_map,
fidelity=fidelity,
training_parameters=training_parameters,
enforce_psd=enforce_psd,
evaluate_duplicates=evaluate_duplicates,
)
# override the num of features defined in the base class
self._num_features = self.feature_map.num_parameters - self._num_training_parameters
Metadata
Metadata
Assignees
Labels
type: bug 🐞Something isn't workingSomething isn't working