|
a |
|
b/Code/All Qiskit, PennyLane QML Nov 23/10a1 Eff. Dimension .985Local kkawchak.ipynb |
|
|
1 |
{ |
|
|
2 |
"cells": [ |
|
|
3 |
{ |
|
|
4 |
"cell_type": "markdown", |
|
|
5 |
"metadata": {}, |
|
|
6 |
"source": [ |
|
|
7 |
"# Effective Dimension of Qiskit Neural Networks\n", |
|
|
8 |
"In this tutorial, we will take advantage of the `EffectiveDimension` and `LocalEffectiveDimension` classes to evaluate the power of Quantum Neural Network models. These are metrics based on information geometry that connect to notions such as trainability, expressibility or ability to generalize.\n", |
|
|
9 |
"\n", |
|
|
10 |
"Before diving into the code example, we will briefly explain what is the difference between these two metrics, and why are they relevant to the study of Quantum Neural Networks. More information about global effective dimension can be found in [this paper](https://arxiv.org/pdf/2011.00027.pdf), while the local effective dimension was introduced in a [later work](https://arxiv.org/abs/2112.04807)." |
|
|
11 |
] |
|
|
12 |
}, |
|
|
13 |
{ |
|
|
14 |
"cell_type": "markdown", |
|
|
15 |
"metadata": { |
|
|
16 |
"pycharm": { |
|
|
17 |
"name": "#%% md\n" |
|
|
18 |
} |
|
|
19 |
}, |
|
|
20 |
"source": [ |
|
|
21 |
"## 1. Global vs. Local Effective Dimension\n", |
|
|
22 |
"Both classical and quantum machine learning models share a common goal: being good at **generalizing**, i.e. learning insights from data and applying them on unseen data.\n", |
|
|
23 |
"\n", |
|
|
24 |
"Finding a good metric to assess this ability is a non-trivial matter. In [The Power of Quantum Neural Networks](https://arxiv.org/pdf/2011.00027.pdf), the authors introduce the **global** effective dimension as a useful indicator of how well a particular model will be able to perform on new data. In [Effective Dimension of Machine Learning Models](https://arxiv.org/pdf/2112.04807.pdf), the **local** effective dimension is proposed as a new capacity measure that bounds the generalization error of machine learning models.\n", |
|
|
25 |
"\n", |
|
|
26 |
"The key difference between global (`EffectiveDimension` class) and **local** effective dimension (`LocalEffectiveDimension` class) is actually not in the way they are computed, but in the nature of the parameter space that is analyzed. The global effective dimension incorporates the **full parameter space** of the model, and is calculated from a **large number of parameter (weight) sets**. On the other hand, the local effective dimension focuses on how well the **trained** model can generalize to new data, and how **expressive** it can be. Therefore, the local effective dimension is calculated from **a single** set of weight samples (training result). This difference is small in terms of practical implementation, but quite relevant at a conceptual level." |
|
|
27 |
] |
|
|
28 |
}, |
|
|
29 |
{ |
|
|
30 |
"cell_type": "markdown", |
|
|
31 |
"metadata": {}, |
|
|
32 |
"source": [ |
|
|
33 |
"## 2. The Effective Dimension Algorithm\n", |
|
|
34 |
"\n", |
|
|
35 |
"Both the global and local effective dimension algorithms use the Fisher Information matrix to provide a measure of complexity. The details on how this matrix is calculated are provided in the [reference paper](https://arxiv.org/pdf/2011.00027.pdf), but in general terms, this matrix captures how sensitive a neural network's output is to changes in the network's parameter space.\n", |
|
|
36 |
"\n", |
|
|
37 |
"In particular, this algorithm follows 4 main steps:\n", |
|
|
38 |
"\n", |
|
|
39 |
"1. **Monte Carlo simulation:** the forward and backward passes (gradients) of the neural network are computed for each pair of input and weight samples.\n", |
|
|
40 |
"2. **Fisher Matrix Computation:** these outputs and gradients are used to compute the Fisher Information Matrix.\n", |
|
|
41 |
"3. **Fisher Matrix Normalization:** averaging over all input samples and dividing by the matrix trace\n", |
|
|
42 |
"4. **Effective Dimension Calculation:** according to the formula from [*Abbas et al.*](https://arxiv.org/pdf/2011.00027.pdf)" |
|
|
43 |
] |
|
|
44 |
}, |
|
|
45 |
{ |
|
|
46 |
"cell_type": "markdown", |
|
|
47 |
"metadata": { |
|
|
48 |
"slideshow": { |
|
|
49 |
"slide_type": "slide" |
|
|
50 |
} |
|
|
51 |
}, |
|
|
52 |
"source": [ |
|
|
53 |
"## 3. Basic Example (SamplerQNN)\n", |
|
|
54 |
"\n", |
|
|
55 |
"This example shows how to set up a QNN model problem and run the global effective dimension algorithm. Both Qiskit `SamplerQNN` (shown in this example) and `EstimatorQNN` (shown in a later example) can be used with the `EffectiveDimension` class.\n", |
|
|
56 |
"\n", |
|
|
57 |
"We start off from the required imports and a fixed seed for the random number generator for reproducibility purposes." |
|
|
58 |
] |
|
|
59 |
}, |
|
|
60 |
{ |
|
|
61 |
"cell_type": "code", |
|
|
62 |
"execution_count": 1, |
|
|
63 |
"metadata": { |
|
|
64 |
"slideshow": { |
|
|
65 |
"slide_type": "skip" |
|
|
66 |
} |
|
|
67 |
}, |
|
|
68 |
"outputs": [ |
|
|
69 |
{ |
|
|
70 |
"name": "stderr", |
|
|
71 |
"output_type": "stream", |
|
|
72 |
"text": [ |
|
|
73 |
"/tmp/ipykernel_1202/2968235742.py:6: DeprecationWarning: ``qiskit.algorithms`` has been migrated to an independent package: https://github.com/qiskit-community/qiskit-algorithms. The ``qiskit.algorithms`` import path is deprecated as of qiskit-terra 0.25.0 and will be removed no earlier than 3 months after the release date. Please run ``pip install qiskit_algorithms`` and use ``import qiskit_algorithms`` instead.\n", |
|
|
74 |
" from qiskit.algorithms.optimizers import COBYLA\n" |
|
|
75 |
] |
|
|
76 |
} |
|
|
77 |
], |
|
|
78 |
"source": [ |
|
|
79 |
"# Necessary imports\n", |
|
|
80 |
"import matplotlib.pyplot as plt\n", |
|
|
81 |
"import numpy as np\n", |
|
|
82 |
"from IPython.display import clear_output\n", |
|
|
83 |
"from qiskit import QuantumCircuit\n", |
|
|
84 |
"from qiskit.algorithms.optimizers import COBYLA\n", |
|
|
85 |
"from qiskit.circuit.library import ZFeatureMap, RealAmplitudes, ZZFeatureMap\n", |
|
|
86 |
"from qiskit.utils import algorithm_globals\n", |
|
|
87 |
"from sklearn.datasets import make_classification\n", |
|
|
88 |
"from sklearn.preprocessing import MinMaxScaler\n", |
|
|
89 |
"\n", |
|
|
90 |
"from qiskit_machine_learning.algorithms.classifiers import NeuralNetworkClassifier\n", |
|
|
91 |
"from qiskit_machine_learning.neural_networks import EffectiveDimension, LocalEffectiveDimension\n", |
|
|
92 |
"from qiskit_machine_learning.neural_networks import SamplerQNN, EstimatorQNN\n", |
|
|
93 |
"\n", |
|
|
94 |
"# set random seed\n", |
|
|
95 |
"algorithm_globals.random_seed = 42" |
|
|
96 |
] |
|
|
97 |
}, |
|
|
98 |
{ |
|
|
99 |
"cell_type": "markdown", |
|
|
100 |
"metadata": { |
|
|
101 |
"pycharm": { |
|
|
102 |
"name": "#%% md\n" |
|
|
103 |
}, |
|
|
104 |
"slideshow": { |
|
|
105 |
"slide_type": "skip" |
|
|
106 |
} |
|
|
107 |
}, |
|
|
108 |
"source": [ |
|
|
109 |
"### 3.1 Define QNN\n", |
|
|
110 |
"\n", |
|
|
111 |
"The first step to create a `SamplerQNN` is to define a parametrized feature map and ansatz. In this toy example, we will use 3 qubits, and we will define the circuit used in the `SamplerQNN` class." |
|
|
112 |
] |
|
|
113 |
}, |
|
|
114 |
{ |
|
|
115 |
"cell_type": "code", |
|
|
116 |
"execution_count": 2, |
|
|
117 |
"metadata": { |
|
|
118 |
"pycharm": { |
|
|
119 |
"name": "#%%\n" |
|
|
120 |
}, |
|
|
121 |
"slideshow": { |
|
|
122 |
"slide_type": "-" |
|
|
123 |
} |
|
|
124 |
}, |
|
|
125 |
"outputs": [ |
|
|
126 |
{ |
|
|
127 |
"data": { |
|
|
128 |
"image/png": "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\n", |
|
|
129 |
"text/plain": [ |
|
|
130 |
"<Figure size 621.941x284.278 with 1 Axes>" |
|
|
131 |
] |
|
|
132 |
}, |
|
|
133 |
"execution_count": 2, |
|
|
134 |
"metadata": {}, |
|
|
135 |
"output_type": "execute_result" |
|
|
136 |
} |
|
|
137 |
], |
|
|
138 |
"source": [ |
|
|
139 |
"num_qubits = 3\n", |
|
|
140 |
"# create a feature map\n", |
|
|
141 |
"feature_map = ZZFeatureMap(feature_dimension=num_qubits, reps=1)\n", |
|
|
142 |
"# create a variational circuit\n", |
|
|
143 |
"ansatz = RealAmplitudes(num_qubits, reps=1)\n", |
|
|
144 |
"\n", |
|
|
145 |
"# combine feature map and ansatz into a single circuit\n", |
|
|
146 |
"qc = QuantumCircuit(num_qubits)\n", |
|
|
147 |
"qc.append(feature_map, range(num_qubits))\n", |
|
|
148 |
"qc.append(ansatz, range(num_qubits))\n", |
|
|
149 |
"qc.decompose().draw(\"mpl\")" |
|
|
150 |
] |
|
|
151 |
}, |
|
|
152 |
{ |
|
|
153 |
"cell_type": "markdown", |
|
|
154 |
"metadata": {}, |
|
|
155 |
"source": [ |
|
|
156 |
"The parametrized circuit can then be sent together with an optional interpret map (parity in this case) to the `SamplerQNN` constructor." |
|
|
157 |
] |
|
|
158 |
}, |
|
|
159 |
{ |
|
|
160 |
"cell_type": "code", |
|
|
161 |
"execution_count": 3, |
|
|
162 |
"metadata": { |
|
|
163 |
"pycharm": { |
|
|
164 |
"name": "#%%\n" |
|
|
165 |
} |
|
|
166 |
}, |
|
|
167 |
"outputs": [], |
|
|
168 |
"source": [ |
|
|
169 |
"# parity maps bitstrings to 0 or 1\n", |
|
|
170 |
"def parity(x):\n", |
|
|
171 |
" return \"{:b}\".format(x).count(\"1\") % 2\n", |
|
|
172 |
"\n", |
|
|
173 |
"\n", |
|
|
174 |
"output_shape = 2 # corresponds to the number of classes, possible outcomes of the (parity) mapping." |
|
|
175 |
] |
|
|
176 |
}, |
|
|
177 |
{ |
|
|
178 |
"cell_type": "code", |
|
|
179 |
"execution_count": 4, |
|
|
180 |
"metadata": { |
|
|
181 |
"pycharm": { |
|
|
182 |
"name": "#%%\n" |
|
|
183 |
} |
|
|
184 |
}, |
|
|
185 |
"outputs": [], |
|
|
186 |
"source": [ |
|
|
187 |
"# construct QNN\n", |
|
|
188 |
"qnn = SamplerQNN(\n", |
|
|
189 |
" circuit=qc,\n", |
|
|
190 |
" input_params=feature_map.parameters,\n", |
|
|
191 |
" weight_params=ansatz.parameters,\n", |
|
|
192 |
" interpret=parity,\n", |
|
|
193 |
" output_shape=output_shape,\n", |
|
|
194 |
" sparse=False,\n", |
|
|
195 |
")" |
|
|
196 |
] |
|
|
197 |
}, |
|
|
198 |
{ |
|
|
199 |
"cell_type": "markdown", |
|
|
200 |
"metadata": {}, |
|
|
201 |
"source": [ |
|
|
202 |
"### 3.2 Set up Effective Dimension calculation\n", |
|
|
203 |
"\n", |
|
|
204 |
"In order to compute the effective dimension of our QNN using the `EffectiveDimension` class, we need a series of sets of input samples and weights, as well as the total number of data samples available in a dataset. The `input_samples` and `weight_samples` are set in the class constructor, while the number of data samples is given during the call to the effective dimension computation, to be able to test and compare how this measure changes with different dataset sizes." |
|
|
205 |
] |
|
|
206 |
}, |
|
|
207 |
{ |
|
|
208 |
"cell_type": "markdown", |
|
|
209 |
"metadata": {}, |
|
|
210 |
"source": [ |
|
|
211 |
"We can define the number of input samples and weight samples and the class will randomly sample a corresponding array from a normal (for `input_samples`) or a uniform (for `weight_samples`) distribution. Instead of passing a number of samples we can pass an array, sampled manually." |
|
|
212 |
] |
|
|
213 |
}, |
|
|
214 |
{ |
|
|
215 |
"cell_type": "code", |
|
|
216 |
"execution_count": 5, |
|
|
217 |
"metadata": { |
|
|
218 |
"pycharm": { |
|
|
219 |
"name": "#%%\n" |
|
|
220 |
} |
|
|
221 |
}, |
|
|
222 |
"outputs": [], |
|
|
223 |
"source": [ |
|
|
224 |
"# we can set the total number of input samples and weight samples for random selection\n", |
|
|
225 |
"num_input_samples = 10\n", |
|
|
226 |
"num_weight_samples = 10\n", |
|
|
227 |
"\n", |
|
|
228 |
"global_ed = EffectiveDimension(\n", |
|
|
229 |
" qnn=qnn, weight_samples=num_weight_samples, input_samples=num_input_samples\n", |
|
|
230 |
")" |
|
|
231 |
] |
|
|
232 |
}, |
|
|
233 |
{ |
|
|
234 |
"cell_type": "markdown", |
|
|
235 |
"metadata": {}, |
|
|
236 |
"source": [ |
|
|
237 |
"If we want to test a specific set of input samples and weight samples, we can provide it directly to the `EffectiveDimension` class as shown in the following snippet:" |
|
|
238 |
] |
|
|
239 |
}, |
|
|
240 |
{ |
|
|
241 |
"cell_type": "code", |
|
|
242 |
"execution_count": 6, |
|
|
243 |
"metadata": { |
|
|
244 |
"pycharm": { |
|
|
245 |
"name": "#%%\n" |
|
|
246 |
} |
|
|
247 |
}, |
|
|
248 |
"outputs": [], |
|
|
249 |
"source": [ |
|
|
250 |
"# we can also provide user-defined samples and parameters\n", |
|
|
251 |
"input_samples = algorithm_globals.random.normal(0, 1, size=(10, qnn.num_inputs))\n", |
|
|
252 |
"weight_samples = algorithm_globals.random.uniform(0, 1, size=(10, qnn.num_weights))\n", |
|
|
253 |
"\n", |
|
|
254 |
"global_ed = EffectiveDimension(qnn=qnn, weight_samples=weight_samples, input_samples=input_samples)" |
|
|
255 |
] |
|
|
256 |
}, |
|
|
257 |
{ |
|
|
258 |
"cell_type": "markdown", |
|
|
259 |
"metadata": {}, |
|
|
260 |
"source": [ |
|
|
261 |
"The effective dimension algorithm also requires a dataset size. In this example, we will define an array of sizes to later see how this input affects the result." |
|
|
262 |
] |
|
|
263 |
}, |
|
|
264 |
{ |
|
|
265 |
"cell_type": "code", |
|
|
266 |
"execution_count": 7, |
|
|
267 |
"metadata": { |
|
|
268 |
"pycharm": { |
|
|
269 |
"name": "#%%\n" |
|
|
270 |
} |
|
|
271 |
}, |
|
|
272 |
"outputs": [], |
|
|
273 |
"source": [ |
|
|
274 |
"# finally, we will define ranges to test different numbers of data, n\n", |
|
|
275 |
"n = [5000, 8000, 10000, 40000, 60000, 100000, 150000, 200000, 500000, 1000000]" |
|
|
276 |
] |
|
|
277 |
}, |
|
|
278 |
{ |
|
|
279 |
"cell_type": "markdown", |
|
|
280 |
"metadata": {}, |
|
|
281 |
"source": [ |
|
|
282 |
"### 3.3 Compute Global Effective Dimension\n", |
|
|
283 |
"Let's now calculate the effective dimension of our network for the previously defined set of input samples, weights, and a dataset size of 5000." |
|
|
284 |
] |
|
|
285 |
}, |
|
|
286 |
{ |
|
|
287 |
"cell_type": "code", |
|
|
288 |
"execution_count": 8, |
|
|
289 |
"metadata": { |
|
|
290 |
"pycharm": { |
|
|
291 |
"name": "#%%\n" |
|
|
292 |
} |
|
|
293 |
}, |
|
|
294 |
"outputs": [], |
|
|
295 |
"source": [ |
|
|
296 |
"global_eff_dim_0 = global_ed.get_effective_dimension(dataset_size=n[0])" |
|
|
297 |
] |
|
|
298 |
}, |
|
|
299 |
{ |
|
|
300 |
"cell_type": "markdown", |
|
|
301 |
"metadata": {}, |
|
|
302 |
"source": [ |
|
|
303 |
"The effective dimension values will range between 0 and `d`, where `d` represents the dimension of the model, and it's practically obtained from the number of weights of the QNN. By dividing the result by `d`, we can obtain the normalized effective dimension, which correlates directly with the capacity of the model." |
|
|
304 |
] |
|
|
305 |
}, |
|
|
306 |
{ |
|
|
307 |
"cell_type": "code", |
|
|
308 |
"execution_count": 9, |
|
|
309 |
"metadata": { |
|
|
310 |
"pycharm": { |
|
|
311 |
"name": "#%%\n" |
|
|
312 |
} |
|
|
313 |
}, |
|
|
314 |
"outputs": [ |
|
|
315 |
{ |
|
|
316 |
"name": "stdout", |
|
|
317 |
"output_type": "stream", |
|
|
318 |
"text": [ |
|
|
319 |
"Data size: 5000, global effective dimension: 5.2939\n", |
|
|
320 |
"Number of weights: 6, normalized effective dimension: 0.8823\n" |
|
|
321 |
] |
|
|
322 |
} |
|
|
323 |
], |
|
|
324 |
"source": [ |
|
|
325 |
"d = qnn.num_weights\n", |
|
|
326 |
"\n", |
|
|
327 |
"print(\"Data size: {}, global effective dimension: {:.4f}\".format(n[0], global_eff_dim_0))\n", |
|
|
328 |
"print(\n", |
|
|
329 |
" \"Number of weights: {}, normalized effective dimension: {:.4f}\".format(d, global_eff_dim_0 / d)\n", |
|
|
330 |
")" |
|
|
331 |
] |
|
|
332 |
}, |
|
|
333 |
{ |
|
|
334 |
"cell_type": "markdown", |
|
|
335 |
"metadata": {}, |
|
|
336 |
"source": [ |
|
|
337 |
"By calling the `EffectiveDimension` class with an array if input sizes `n`, we can monitor how the effective dimension changes with the dataset size." |
|
|
338 |
] |
|
|
339 |
}, |
|
|
340 |
{ |
|
|
341 |
"cell_type": "code", |
|
|
342 |
"execution_count": 10, |
|
|
343 |
"metadata": { |
|
|
344 |
"pycharm": { |
|
|
345 |
"name": "#%%\n" |
|
|
346 |
}, |
|
|
347 |
"slideshow": { |
|
|
348 |
"slide_type": "-" |
|
|
349 |
} |
|
|
350 |
}, |
|
|
351 |
"outputs": [], |
|
|
352 |
"source": [ |
|
|
353 |
"global_eff_dim_1 = global_ed.get_effective_dimension(dataset_size=n)" |
|
|
354 |
] |
|
|
355 |
}, |
|
|
356 |
{ |
|
|
357 |
"cell_type": "code", |
|
|
358 |
"execution_count": 11, |
|
|
359 |
"metadata": { |
|
|
360 |
"pycharm": { |
|
|
361 |
"name": "#%%\n" |
|
|
362 |
} |
|
|
363 |
}, |
|
|
364 |
"outputs": [ |
|
|
365 |
{ |
|
|
366 |
"name": "stdout", |
|
|
367 |
"output_type": "stream", |
|
|
368 |
"text": [ |
|
|
369 |
"Effective dimension: [5.29390229 5.33597126 5.35545289 5.46354885 5.49042841 5.52135717\n", |
|
|
370 |
" 5.54374079 5.55854944 5.60045031 5.62756494]\n", |
|
|
371 |
"Number of weights: 6\n" |
|
|
372 |
] |
|
|
373 |
} |
|
|
374 |
], |
|
|
375 |
"source": [ |
|
|
376 |
"print(\"Effective dimension: {}\".format(global_eff_dim_1))\n", |
|
|
377 |
"print(\"Number of weights: {}\".format(d))" |
|
|
378 |
] |
|
|
379 |
}, |
|
|
380 |
{ |
|
|
381 |
"cell_type": "code", |
|
|
382 |
"execution_count": 12, |
|
|
383 |
"metadata": { |
|
|
384 |
"pycharm": { |
|
|
385 |
"name": "#%%\n" |
|
|
386 |
}, |
|
|
387 |
"slideshow": { |
|
|
388 |
"slide_type": "slide" |
|
|
389 |
} |
|
|
390 |
}, |
|
|
391 |
"outputs": [ |
|
|
392 |
{ |
|
|
393 |
"data": { |
|
|
394 |
"image/png": "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+sEEzgEiIo3NnTsXW7duxZEjR9TamzZtivT0dLUkSJu1e/7++2/Vz2VlZYiPj1f9X1+XLl1w9uxZuLm5oXXr1movMUmPtbU1nJ2dcejQIbX2Q4cOPbZH5lHu7u4wMzPD0aNHVW137txR/ZIGyid137p1C3PnzkWfPn3g6elZqder4ik1hUKhart16xaSkpIQGRmJ559/Hu3atcOdO3c0jo3I0PLz83Hy5EnV74crV67g5MmTSElJQdu2bTF8+HAEBwcjNjYWV65cwbFjxxAdHY3t27cDKH8oo0uXLnj33XeRkJCA+Ph4fPDBB3jhhRfUeoU0wQSIiDTWqVMnDB8+HN9++61a+7PPPousrCx88cUXuHz5MhYvXow///xTa9+7ePFibNq0CYmJiQgLC8OdO3fw7rvvAgDCwsJw+/ZtvP322/jnn39w+fJl7Ny5E6GhoWrJgyYmTpyIefPmYf369UhKSkJERAROnjyJ8ePHa3wMS0tLvPfee5g4cSL27NmDf//9FyNHjlQb+mvevDnMzc2xcOFCJCcn4/fff8esWbPUjtOiRQtIJBJs27YNWVlZyM/PR6NGjdCkSRN8//33uHTpEvbs2YPw8HBR50hkSMePH4ePjw98fHwAAOHh4fDx8cH06dMBAMuXL0dwcDA++eQTeHh4YODAgfjnn3/QvHlzAOW9zVu3boWdnR369u2LV155Be3atcO6devEB6OFeUxEVE89PAm6wpUrVwRzc3Ph0V8fS5YsEVxdXYWGDRsKwcHBwuzZsytNgn70WP369as0MbhFixbCN998o/ouAMKaNWsEX19fwdzcXGjfvr2wZ88etX0uXLggDBo0SLC1tRXkcrng6ekpTJgwQVAqldV+T1UUCoUwY8YMwcXFRTAzMxO8vLyEP//8U22bJ02CFoTyidDvvPOO0KBBA8HBwUH44osvKsWwZs0awc3NTbCwsBB69Ogh/P777wIAISEhQbXNzJkzBUdHR0EikQghISGCIAjC7t27hXbt2gkWFhZC586dhX379lWaTEpETyYRhEcG7omIiIjqOQ6BERERkdFhAkRERERGhwkQERERGR0mQERERGR0mAARERGR0WECREREREaHCRAREREZHSZAREREZHSYABEREZHRYQJERERERocJEBERERkdJkBERERkdP4fzksyO9XWIyMAAAAASUVORK5CYII=\n", |
|
|
395 |
"text/plain": [ |
|
|
396 |
"<Figure size 640x480 with 1 Axes>" |
|
|
397 |
] |
|
|
398 |
}, |
|
|
399 |
"metadata": {}, |
|
|
400 |
"output_type": "display_data" |
|
|
401 |
} |
|
|
402 |
], |
|
|
403 |
"source": [ |
|
|
404 |
"# plot the normalized effective dimension for the model\n", |
|
|
405 |
"plt.plot(n, np.array(global_eff_dim_1) / d)\n", |
|
|
406 |
"plt.xlabel(\"Number of data\")\n", |
|
|
407 |
"plt.ylabel(\"Normalized GLOBAL effective dimension\")\n", |
|
|
408 |
"plt.show()" |
|
|
409 |
] |
|
|
410 |
}, |
|
|
411 |
{ |
|
|
412 |
"cell_type": "markdown", |
|
|
413 |
"metadata": { |
|
|
414 |
"pycharm": { |
|
|
415 |
"name": "#%% md\n" |
|
|
416 |
} |
|
|
417 |
}, |
|
|
418 |
"source": [ |
|
|
419 |
"## 4. Local Effective Dimension Example\n", |
|
|
420 |
"As explained in the introduction, the local effective dimension algorithm only uses **one** set of weights, and it can be used to monitor how training affects the expressiveness of a neural network. The `LocalEffectiveDimension` class enforces this constraint to ensure that these calculations are conceptually separate, but the rest of the implementation is shared with `EffectiveDimension`.\n", |
|
|
421 |
"\n", |
|
|
422 |
"This example shows how to leverage the `LocalEffectiveDimension` class to analyze the effect of training on QNN expressiveness." |
|
|
423 |
] |
|
|
424 |
}, |
|
|
425 |
{ |
|
|
426 |
"cell_type": "markdown", |
|
|
427 |
"metadata": {}, |
|
|
428 |
"source": [ |
|
|
429 |
"### 4.1 Define Dataset and QNN\n", |
|
|
430 |
"\n", |
|
|
431 |
"We start by creating a 3D binary classification dataset using `make_classification` function from scikit-learn." |
|
|
432 |
] |
|
|
433 |
}, |
|
|
434 |
{ |
|
|
435 |
"cell_type": "code", |
|
|
436 |
"execution_count": 13, |
|
|
437 |
"metadata": { |
|
|
438 |
"pycharm": { |
|
|
439 |
"name": "#%%\n" |
|
|
440 |
} |
|
|
441 |
}, |
|
|
442 |
"outputs": [], |
|
|
443 |
"source": [ |
|
|
444 |
"num_inputs = 3\n", |
|
|
445 |
"num_samples = 50\n", |
|
|
446 |
"\n", |
|
|
447 |
"X, y = make_classification(\n", |
|
|
448 |
" n_samples=num_samples,\n", |
|
|
449 |
" n_features=num_inputs,\n", |
|
|
450 |
" n_informative=3,\n", |
|
|
451 |
" n_redundant=0,\n", |
|
|
452 |
" n_clusters_per_class=1,\n", |
|
|
453 |
" class_sep=2.0,\n", |
|
|
454 |
")\n", |
|
|
455 |
"X = MinMaxScaler().fit_transform(X)\n", |
|
|
456 |
"y = 2 * y - 1 # labels in {-1, 1}" |
|
|
457 |
] |
|
|
458 |
}, |
|
|
459 |
{ |
|
|
460 |
"cell_type": "markdown", |
|
|
461 |
"metadata": {}, |
|
|
462 |
"source": [ |
|
|
463 |
"The next step is to create a QNN, an instance of `EstimatorQNN` in our case in the same fashion we created an instance of `SamplerQNN`." |
|
|
464 |
] |
|
|
465 |
}, |
|
|
466 |
{ |
|
|
467 |
"cell_type": "code", |
|
|
468 |
"execution_count": 14, |
|
|
469 |
"metadata": { |
|
|
470 |
"pycharm": { |
|
|
471 |
"name": "#%%\n" |
|
|
472 |
} |
|
|
473 |
}, |
|
|
474 |
"outputs": [], |
|
|
475 |
"source": [ |
|
|
476 |
"estimator_qnn = EstimatorQNN(\n", |
|
|
477 |
" circuit=qc, input_params=feature_map.parameters, weight_params=ansatz.parameters\n", |
|
|
478 |
")" |
|
|
479 |
] |
|
|
480 |
}, |
|
|
481 |
{ |
|
|
482 |
"cell_type": "markdown", |
|
|
483 |
"metadata": {}, |
|
|
484 |
"source": [ |
|
|
485 |
"### 4.2 Train QNN\n", |
|
|
486 |
"\n", |
|
|
487 |
"We can now proceed to train the QNN. The training step may take some time, be patient. You can pass a callback to the classifier to observe how the training process is going on. We fix `initial_point` for reproducibility purposes as usual." |
|
|
488 |
] |
|
|
489 |
}, |
|
|
490 |
{ |
|
|
491 |
"cell_type": "code", |
|
|
492 |
"execution_count": 15, |
|
|
493 |
"metadata": { |
|
|
494 |
"pycharm": { |
|
|
495 |
"name": "#%%\n" |
|
|
496 |
} |
|
|
497 |
}, |
|
|
498 |
"outputs": [], |
|
|
499 |
"source": [ |
|
|
500 |
"# callback function that draws a live plot when the .fit() method is called\n", |
|
|
501 |
"def callback_graph(weights, obj_func_eval):\n", |
|
|
502 |
" clear_output(wait=True)\n", |
|
|
503 |
" objective_func_vals.append(obj_func_eval)\n", |
|
|
504 |
" plt.title(\"Objective function value against iteration\")\n", |
|
|
505 |
" plt.xlabel(\"Iteration\")\n", |
|
|
506 |
" plt.ylabel(\"Objective function value\")\n", |
|
|
507 |
" plt.plot(range(len(objective_func_vals)), objective_func_vals)\n", |
|
|
508 |
" plt.show()" |
|
|
509 |
] |
|
|
510 |
}, |
|
|
511 |
{ |
|
|
512 |
"cell_type": "code", |
|
|
513 |
"execution_count": 16, |
|
|
514 |
"metadata": { |
|
|
515 |
"pycharm": { |
|
|
516 |
"name": "#%%\n" |
|
|
517 |
} |
|
|
518 |
}, |
|
|
519 |
"outputs": [], |
|
|
520 |
"source": [ |
|
|
521 |
"# construct classifier\n", |
|
|
522 |
"initial_point = algorithm_globals.random.random(estimator_qnn.num_weights)\n", |
|
|
523 |
"\n", |
|
|
524 |
"estimator_classifier = NeuralNetworkClassifier(\n", |
|
|
525 |
" neural_network=estimator_qnn,\n", |
|
|
526 |
" optimizer=COBYLA(maxiter=80, rhobeg=1.14),\n", |
|
|
527 |
" initial_point=initial_point,\n", |
|
|
528 |
" callback=callback_graph,\n", |
|
|
529 |
")" |
|
|
530 |
] |
|
|
531 |
}, |
|
|
532 |
{ |
|
|
533 |
"cell_type": "code", |
|
|
534 |
"execution_count": 17, |
|
|
535 |
"metadata": { |
|
|
536 |
"pycharm": { |
|
|
537 |
"name": "#%%\n" |
|
|
538 |
} |
|
|
539 |
}, |
|
|
540 |
"outputs": [ |
|
|
541 |
{ |
|
|
542 |
"data": { |
|
|
543 |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA+kAAAIjCAYAAAB/OVoZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAACasUlEQVR4nOzdd3hUZfrG8Xtmkpn0hBRCCySE3pEmCGJBUUTXjmUVsbt2LCtr11VW3bXt4mLHtaLYfvaCBVCKgvReQg2ppPeZ8/sjmYGQQiZMMiXfz3XlIjk5c84zk6Dc877v85oMwzAEAAAAAAC8zuztAgAAAAAAQDVCOgAAAAAAPoKQDgAAAACAjyCkAwAAAADgIwjpAAAAAAD4CEI6AAAAAAA+gpAOAAAAAICPIKQDAAAAAOAjCOkAAAAAAPgIQjoA+KmHHnpIJpNJ2dnZRzw3OTlZV1xxRcsXdZg5c+bIZDIpLS2t1e/922+/acyYMQoPD5fJZNLKlStbvYam8NbPxtO8+bP2JpPJpIceesjbZUjyz5+B879jAICDCOkA4EPWrVunP//5z+rcubNsNps6deqkSy+9VOvWrfN2aY16/PHH9cknn3i7DJfKykpdcMEFys3N1TPPPKM333xT3bp181o9v/76qx566CHl5eV5rQb4n3379umhhx46qjeYXnjhBc2ZM8djNTVHSUmJHnroIf30009erQMA/IXJMAzD20UAAKSPPvpIF198sWJjY3XVVVcpJSVFaWlpevXVV5WTk6P33ntP55xzjuv8hx56SA8//LCysrIUHx/f6LXLy8tlNpsVHBzcIrVHRETo/PPPrxMG7Ha7KisrZbPZWnW0bOPGjerbt69efvllXX311a1234b885//1F133aUdO3YoOTm51vda+mfTWubMmaNp06bV+xwDWVlZmYKCghQUFOTxa//+++8aMWKEXn/99SbNtqjv79uAAQMUHx/v1YCcnZ2thIQEPfjgg3VmHVRVVamqqkohISHeKQ4AfJDn/48CAHDbtm3bdNlll6l79+5asGCBEhISXN+79dZbNW7cOF122WVavXq1unfv7vb1bTabJ8ttMovFIovF0ur3zczMlCTFxMS0+r3d5a2fDTzDl8Jla/19q6qqksPhkNVqPeprtdQbHADgz5juDgA+4KmnnlJJSYleeumlWgFdkuLj4/Xiiy+quLhYTz75ZJ3HZmdn68ILL1RUVJTi4uJ06623qqysrNY59a17zsvL02233aakpCTZbDb16NFDTzzxhBwOR63zHA6HnnvuOQ0cOFAhISFKSEjQaaedpt9//11S9Zrc4uJivfHGGzKZTDKZTK57Hb5GdvLkyQ2+yTB69GgNHz681rG33npLw4YNU2hoqGJjY3XRRRdp9+7djb6WV1xxhcaPHy9JuuCCC2QymXTCCSdIkk444QTX54c/5tDR37S0NJlMJv3zn//USy+9pNTUVNlsNo0YMUK//fZbncdv3LhRF154oRISEhQaGqrevXvr3nvvlVQ94+Guu+6SJKWkpLheI+drUt/PZvv27brgggsUGxursLAwHXvssfriiy9qnfPTTz/JZDLp/fff12OPPaYuXbooJCREJ598srZu3droazRv3jyZTCb9/PPPdb734osvymQyae3atZKk1atX64orrlD37t0VEhKiDh066Morr1ROTk6j95AaXq99NL+P9fn00091xhlnqFOnTrLZbEpNTdWjjz4qu91e59xZs2ape/fuCg0N1ciRI7Vw4cI6vxcVFRV64IEHNGzYMEVHRys8PFzjxo3Tjz/+eMTn6FxjvXXrVl1xxRWKiYlRdHS0pk2bppKSklqP/e677zR27FjFxMQoIiJCvXv31t/+9jdJ1T/fESNGSJKmTZvm+r1pbOr64X/fkpOTtW7dOv3888+uxx/6PJvymh/6d+HZZ591/V1Yv359k16ntLQ013/THn74YVcdztesvjXpVVVVevTRR133Sk5O1t/+9jeVl5fXOi85OVmTJ0/WokWLNHLkSIWEhKh79+763//+1+BrBAD+gLcuAcAHfPbZZ0pOTta4cePq/f7xxx+v5OTkOkFNki688EIlJydr5syZWrJkiZ5//nkdOHCg0X+olpSUaPz48dq7d6+uu+46de3aVb/++qtmzJih9PR0Pfvss65zr7rqKs2ZM0enn366rr76alVVVWnhwoVasmSJhg8frjfffFNXX321Ro4cqWuvvVaSlJqaWu99p0yZossvv1y//fabK4BI0s6dO7VkyRI99dRTrmOPPfaY7r//fl144YW6+uqrlZWVpX//+986/vjj9ccffzQ4Sn7dddepc+fOevzxx3XLLbdoxIgRSkxMbPC1aMw777yjwsJCXXfddTKZTHryySd17rnn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iomJcf0cnQ5/naXq1/pIv/8A4MsI6QDgZdHR0erYsaNWr17d6HmrV69W586dFRUV1eh5TRnBdTgcOuWUU3T33XfX+/1DQ5qnnXnmmQoLC9P777+vMWPG6P3335fZbNYFF1xQqz6TyaSvvvqq3m7VERERzbq3yWSqNYLvVF+DMUkNdsqu7xre0twabTabzj77bH388cd64YUXlJGRoV9++UWPP/54rfMuvPBC/frrr7rrrrs0ZMgQRUREyOFw6LTTTmv2CPDhr/fR/D7m5eVp/PjxioqK0iOPPKLU1FSFhIRoxYoV+utf/9qsGt966y1dccUVOvvss3XXXXepffv2slgsmjlzprZt29akaxzp5xIaGqoFCxboxx9/1BdffKGvv/5ac+fO1UknnaRvv/22xbu0u/uaHzpbwckTr1NDmjoTxR/+jgKAuwjpAOADJk+erJdfflmLFi2qNc3ZaeHChUpLS9N1111X53tbtmypNWq1detWORyORveqTk1NVVFRkSZMmNBoXampqfrmm2+Um5vb6Gi6O1O7w8PDNXnyZH3wwQd6+umnNXfuXI0bN06dOnWqdV/DMJSSkuLRNwzatWtX7zTYw0fnmsrZqd7ZCb0h7rw+3bp106ZNm+ocd07b7tatmxsVNm7KlCl64403NH/+fG3YsEGGYdSa6n7gwAHNnz9fDz/8sB544AHX8S1btjTp+u3atVNeXl6tYxUVFUpPT691rKm/j/X56aeflJOTo48++kjHH3+86/iOHTtqned83bZu3aoTTzzRdbyqqkppaWm1GpnNmzdP3bt310cffVTrZ1ffso+jYTabdfLJJ+vkk0/W008/rccff1z33nuvfvzxR02YMMEjTfkausbRvOZOTX2d3P39dzgc2rJli2v2iFTdUDEvL8+jv/8A4KtYkw4APuCuu+5SaGiorrvuujpbW+Xm5ur6669XWFiYayuvQ82aNavW1//+978lSaeffnqD97vwwgu1ePFiffPNN3W+l5eXp6qqKknV61ANw9DDDz9c57xDR6rCw8PrhLHGTJkyRfv27dMrr7yiVatW1QqGknTuuefKYrHo4YcfrjMiZhhGk7b/qk9qaqo2btyorKws17FVq1a5Omq7KyEhQccff7xee+017dq1q06dTuHh4ZLUpNdo0qRJWrZsmRYvXuw6VlxcrJdeeknJycnq169fs2qtz4QJExQbG6u5c+dq7ty5GjlyZK03fJyjlIf/DI7Ubd0pNTW1ztrml156qc5IelN/H+tTX40VFRV64YUXap03fPhwxcXF6eWXX651vbfffrvO1Oj6rrl06dJaP5OjlZubW+eYs2u8c6sxd35vGtLQ382jec2dmvo6hYWFua57JJMmTZJU93fs6aefllS9MwEABDpG0gHAB/Ts2VNvvPGGLr30Ug0cOFBXXXWVUlJSlJaWpldffVXZ2dl69913693abMeOHTrrrLN02mmnafHixXrrrbd0ySWXaPDgwQ3e76677tL//d//afLkya7tioqLi7VmzRrNmzdPaWlpio+P14knnqjLLrtMzz//vLZs2eKa4rxw4UKdeOKJuummmyRJw4YN0/fff6+nn35anTp1UkpKSr3rqp0mTZqkyMhI3XnnnbJYLDrvvPNqfT81NVV///vfNWPGDNc2WZGRkdqxY4c+/vhjXXvttbrzzjvdfp2vvPJKPf3005o4caKuuuoqZWZmavbs2erfv3+dtcxN9fzzz2vs2LE65phjdO2117p+bl988YVWrlwpqfr1kaR7771XF110kYKDg3XmmWe6Qtih7rnnHr377rs6/fTTdcsttyg2NlZvvPGGduzYoQ8//NCj65WDg4N17rnn6r333lNxcbH++c9/1vp+VFSUjj/+eD355JOqrKxU586d9e2339YZpW7I1Vdfreuvv17nnXeeTjnlFK1atUrffPONaxs6p6b+PtZnzJgxateunaZOnapbbrlFJpNJb775Zp03FqxWqx566CHdfPPNOumkk3ThhRcqLS1Nc+bMUWpqaq3R3smTJ+ujjz7SOeecozPOOEM7duzQ7Nmz1a9fPxUVFTXpuR/JI488ogULFuiMM85Qt27dlJmZqRdeeEFdunRxzaZJTU1VTEyMZs+ercjISIWHh2vUqFFurfceNmyY/vvf/+rvf/+7evToofbt2+ukk046qtfcqamvU2hoqPr166e5c+eqV69eio2N1YABA+rt5TB48GBNnTpVL730kmspw7Jly/TGG2/o7LPPrjULAgACVit3kwcANGL16tXGxRdfbHTs2NEIDg42OnToYFx88cX1bqfl3Lpo/fr1xvnnn29ERkYa7dq1M2666SajtLS01rmHb3llGNXbes2YMcPo0aOHYbVajfj4eGPMmDHGP//5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n+5+6tQpjRs3Tu3bt1dsbKzuvfdelZaWBuZnz56tm266Sa+99prS09MVFxen++67T9XV1d/umwYAgANRpAMAcA1YvHixsrKy9NBDD6mkpEQlJSVKTU1VRUWFbr/9dg0ePFg7duzQu+++q9LSUt17771Bz3/11Vfl9Xq1ZcsWLV++XJLkcrm0ZMkS7du3T6+++qo2bNigxx9/XJI0YsQILVq0SLGxsYHjPfbYY63ism1b48aN02effabCwkKtX79ex44d0/jx44P2O3r0qNauXat169Zp3bp1Kiws1Lx5876ldwsAAOfidHcAAK4BcXFx8nq9iomJUVJSUmD8hRde0ODBgzV37tzA2Msvv6zU1FQdOnRIN954oyTphhtu0IIFC4L+zYu/356enq5f//rXmjp1qn7729/K6/UqLi5OlmUFHe+LCgoKtGfPHh0/flypqamSpD/96U/q16+fioqKdPPNN0vyF/MrVqxQhw4dJEkTJ05UQUGB5syZ883eGAAAwgyddAAArmEffvihNm7cqPbt2wduffr0keTvXrfIzMxs9dz3339fo0aNUpcuXdShQwdNnDhR//nPf3Tu3LmvfPwDBw4oNTU1UKBLUkZGhuLj43XgwIHAWHp6eqBAl6Tk5GSVlZV9rdcKAMC1gE46AADXsJqaGt15552aP39+q7nk5OTA43bt2gXNnThxQt///vf18MMPa86cObruuuu0efNm/eQnP1FDQ4NiYmKuaJwejydo27Is2bZ9RY8BAEA4oEgHAOAa4fV65fP5gsaGDBmiv/3tb0pPT1dExFf/335xcbFs29bzzz8vl8t/4t3q1au/9Hhf1LdvX50+fVqnT58OdNP379+viooKZWRkfOV4AABoKzjdHQCAa0R6erq2bdumEydOqLy8XLZtKzc3V5999pl+9KMfqaioSEePHtV7772nBx544LIFdq9evdTY2KilS5fq2LFjeu211wIXlLv4eDU1NSooKFB5efklT4PPzs7WgAEDNGHCBO3cuVPbt2/X/fffr1tvvVVDhw694u8BAADhjiIdAIBrxGOPPSa3262MjAx16tRJp06dUkpKirZs2SKfz6c77rhDAwYMUF5enuLj4wMd8ksZNGiQFi5cqPnz56t///5auXKl8vPzg/YZMWKEpk6dqvHjx6tTp06tLjwn+U9bf+utt5SQkKBbbrlF2dnZ6tGjh954440r/voBALgWWMYYE+ogAAAAAAAAnXQAAAAAAByDIh0AAAAAAIegSAcAAAAAwCEo0gEAAAAAcAiKdAAAAAAAHIIiHQAAAAAAh6BIBwAAAADAISjSAQAAAABwCIp0AAAAAAAcgiIdAAAAAACHoEgHAAAAAMAh/h8rqrZ5BG0yVAAAAABJRU5ErkJggg==\n", |
|
|
544 |
"text/plain": [ |
|
|
545 |
"<Figure size 1200x600 with 1 Axes>" |
|
|
546 |
] |
|
|
547 |
}, |
|
|
548 |
"metadata": {}, |
|
|
549 |
"output_type": "display_data" |
|
|
550 |
} |
|
|
551 |
], |
|
|
552 |
"source": [ |
|
|
553 |
"# create empty array for callback to store evaluations of the objective function (callback)\n", |
|
|
554 |
"objective_func_vals = []\n", |
|
|
555 |
"plt.rcParams[\"figure.figsize\"] = (12, 6)\n", |
|
|
556 |
"\n", |
|
|
557 |
"# fit classifier to data\n", |
|
|
558 |
"estimator_classifier.fit(X, y)\n", |
|
|
559 |
"\n", |
|
|
560 |
"# return to default figsize\n", |
|
|
561 |
"plt.rcParams[\"figure.figsize\"] = (6, 4)" |
|
|
562 |
] |
|
|
563 |
}, |
|
|
564 |
{ |
|
|
565 |
"cell_type": "markdown", |
|
|
566 |
"metadata": {}, |
|
|
567 |
"source": [ |
|
|
568 |
"The classifier can now differentiate between classes with an accuracy of:" |
|
|
569 |
] |
|
|
570 |
}, |
|
|
571 |
{ |
|
|
572 |
"cell_type": "code", |
|
|
573 |
"execution_count": 18, |
|
|
574 |
"metadata": {}, |
|
|
575 |
"outputs": [ |
|
|
576 |
{ |
|
|
577 |
"data": { |
|
|
578 |
"text/plain": [ |
|
|
579 |
"0.92" |
|
|
580 |
] |
|
|
581 |
}, |
|
|
582 |
"execution_count": 18, |
|
|
583 |
"metadata": {}, |
|
|
584 |
"output_type": "execute_result" |
|
|
585 |
} |
|
|
586 |
], |
|
|
587 |
"source": [ |
|
|
588 |
"# score classifier\n", |
|
|
589 |
"estimator_classifier.score(X, y)" |
|
|
590 |
] |
|
|
591 |
}, |
|
|
592 |
{ |
|
|
593 |
"cell_type": "markdown", |
|
|
594 |
"metadata": {}, |
|
|
595 |
"source": [ |
|
|
596 |
"### 4.3 Compute Local Effective Dimension of trained QNN\n", |
|
|
597 |
"\n", |
|
|
598 |
"Now that we have trained our network, let's evaluate the local effective dimension based on the trained weights. To do that we access the trained weights directly from the classifier." |
|
|
599 |
] |
|
|
600 |
}, |
|
|
601 |
{ |
|
|
602 |
"cell_type": "code", |
|
|
603 |
"execution_count": 19, |
|
|
604 |
"metadata": { |
|
|
605 |
"pycharm": { |
|
|
606 |
"name": "#%%\n" |
|
|
607 |
} |
|
|
608 |
}, |
|
|
609 |
"outputs": [ |
|
|
610 |
{ |
|
|
611 |
"name": "stdout", |
|
|
612 |
"output_type": "stream", |
|
|
613 |
"text": [ |
|
|
614 |
"normalized local effective dimensions for trained QNN: [0.95278883 0.95560153 0.95692356 0.9642895 0.96611037 0.9681968\n", |
|
|
615 |
" 0.96970102 0.97069368 0.97349292 0.97529831]\n" |
|
|
616 |
] |
|
|
617 |
} |
|
|
618 |
], |
|
|
619 |
"source": [ |
|
|
620 |
"trained_weights = estimator_classifier.weights\n", |
|
|
621 |
"\n", |
|
|
622 |
"# get Local Effective Dimension for set of trained weights\n", |
|
|
623 |
"local_ed_trained = LocalEffectiveDimension(\n", |
|
|
624 |
" qnn=estimator_qnn, weight_samples=trained_weights, input_samples=X\n", |
|
|
625 |
")\n", |
|
|
626 |
"\n", |
|
|
627 |
"local_eff_dim_trained = local_ed_trained.get_effective_dimension(dataset_size=n)\n", |
|
|
628 |
"\n", |
|
|
629 |
"print(\n", |
|
|
630 |
" \"normalized local effective dimensions for trained QNN: \",\n", |
|
|
631 |
" local_eff_dim_trained / estimator_qnn.num_weights,\n", |
|
|
632 |
")" |
|
|
633 |
] |
|
|
634 |
}, |
|
|
635 |
{ |
|
|
636 |
"cell_type": "markdown", |
|
|
637 |
"metadata": {}, |
|
|
638 |
"source": [ |
|
|
639 |
"### 4.4 Compute Local Effective Dimension of untrained QNN\n", |
|
|
640 |
"\n", |
|
|
641 |
"We can compare this result with the effective dimension of the untrained network, using the `initial_point` as our weight sample:" |
|
|
642 |
] |
|
|
643 |
}, |
|
|
644 |
{ |
|
|
645 |
"cell_type": "code", |
|
|
646 |
"execution_count": 20, |
|
|
647 |
"metadata": {}, |
|
|
648 |
"outputs": [ |
|
|
649 |
{ |
|
|
650 |
"name": "stdout", |
|
|
651 |
"output_type": "stream", |
|
|
652 |
"text": [ |
|
|
653 |
"normalized local effective dimensions for untrained QNN: [0.97019742 0.97173693 0.97250146 0.97700455 0.97815438 0.97948161\n", |
|
|
654 |
" 0.98044331 0.98107966 0.98287941 0.98404302]\n" |
|
|
655 |
] |
|
|
656 |
} |
|
|
657 |
], |
|
|
658 |
"source": [ |
|
|
659 |
"# get Local Effective Dimension for set of untrained weights\n", |
|
|
660 |
"local_ed_untrained = LocalEffectiveDimension(\n", |
|
|
661 |
" qnn=estimator_qnn, weight_samples=initial_point, input_samples=X\n", |
|
|
662 |
")\n", |
|
|
663 |
"\n", |
|
|
664 |
"local_eff_dim_untrained = local_ed_untrained.get_effective_dimension(dataset_size=n)\n", |
|
|
665 |
"\n", |
|
|
666 |
"print(\n", |
|
|
667 |
" \"normalized local effective dimensions for untrained QNN: \",\n", |
|
|
668 |
" local_eff_dim_untrained / estimator_qnn.num_weights,\n", |
|
|
669 |
")" |
|
|
670 |
] |
|
|
671 |
}, |
|
|
672 |
{ |
|
|
673 |
"cell_type": "markdown", |
|
|
674 |
"metadata": { |
|
|
675 |
"pycharm": { |
|
|
676 |
"name": "#%% md\n" |
|
|
677 |
} |
|
|
678 |
}, |
|
|
679 |
"source": [ |
|
|
680 |
"### 4.5 Plot and analyze results\n", |
|
|
681 |
"\n", |
|
|
682 |
"If we plot the effective dimension values before and after training, we can see the following result:" |
|
|
683 |
] |
|
|
684 |
}, |
|
|
685 |
{ |
|
|
686 |
"cell_type": "code", |
|
|
687 |
"execution_count": 21, |
|
|
688 |
"metadata": { |
|
|
689 |
"pycharm": { |
|
|
690 |
"name": "#%%\n" |
|
|
691 |
}, |
|
|
692 |
"tags": [ |
|
|
693 |
"nbsphinx-thumbnail" |
|
|
694 |
] |
|
|
695 |
}, |
|
|
696 |
"outputs": [ |
|
|
697 |
{ |
|
|
698 |
"data": { |
|
|
699 |
"image/png": "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+Z4nNTWV3r174+DggKenJ7NmzcpTZtWqVTRq1AhHR0c8PDx44403uH79OpDTzNWqVSsAKlSogEqlom/fvgBs376dZ599FhcXFypVqkTHjh2JiYnJNw4hStqQIUPYt28f3377LUePHuXVV1+lXbt2nD17FoAff/yRqlWrsm3bNvz9/fHz8+Ptt9/m9u3bBl1HkhQhBJCzfP3UqVNZsGABly9ffqxz/f7771y5coU//viD2bNnM378eDp27EiFChXYv38/gwYN4p133slznREjRvDRRx9x6NAhmjZtSqdOnbh16xYACQkJtG7dmpCQEA4ePMj27du5du0a3bt31znHypUrsbKyYu/evSxevDjf+ObNm8esWbOYOXMmR48eJSwsjJdeekn7H+zVq1epU6cOH330EVevXmX48OH5nmfEiBHs3r2bH374gf/973/s2rWLf//9V6dMVlYWkydP5siRI2zZsoULFy5oExEfHx82btwIQHR0NFevXmXevHlATgIUHh7OwYMHiYyMxMzMjK5du6LRaAz4mxDC+GJjY1m+fDkbNmzgueeeIyAggOHDh/Pss89qf/k4d+4cFy9eZMOGDXzzzTesWLGCqKgoXnnlFcMuVmxLFwohyowHVzB++umnlbfeektRFEXZvHmz8uB/E+PHj1fq16+vc+ycOXMUX19fnXP5+voqarVau61mzZrKc889p/2cnZ2t2NvbK+vWrVMURVHOnz+vAMq0adO0ZbKyspSnnnpKmT59uqIoijJ58mTlhRde0Ln2pUuXFECJjo5WFCVnBdyQkJBH3q+Xl5cyZcoUnW2NGzdW3nvvPe3n+vXrF7pKdnJysmJlZaV899132m23bt1SbG1tlQ8++KDA4/755x8FUJKTkxVFub8K7aNW5b1x44YCKMeOHSu0nBDGBiibN2/Wft62bZsCKPb29jovCwsLpXv37oqiKMqAAQN0/m0qiqJERUUpgHL69Gm9ry19UoQQOqZPn07r1q0LrD3QR506dTAzu19R6+7uTt26dbWfzc3NqVSpkrbZI1fTpk217y0sLGjUqBGnTp0C4MiRI+zcuRMHB4c814uJiaFGjRoANGzYsNDYkpKSuHLlCs2aNdPZ3qxZM44cOaLnHeZcMzMzk9DQUO22ihUratvfc0VFRTFhwgSOHDnCnTt3tDUhsbGx1K5du8Dznz17lnHjxrF//35u3rypc9yDz1KIkpaSkoK5uTlRUVGYm5vr7Mv99+np6YmFhYX23yVArVq1gJyf4Yf/nRREkhQhhI7mzZsTFhbG6NGjtc0SuczMzMj5xeq+rKysPOewtLTU+axSqfLdZkjTRUpKCp06dWL69Ol59nl6emrf29vb633O4paamkpYWBhhYWGsWbOGypUrExsbS1hYGJmZmYUe26lTJ3x9ffnqq6/w8vJCo9FQt27dRx4nRHELCQlBrVZz/fp1nnvuuXzLNGvWjOzsbGJiYggICADgzJkzAAZ1Rpc+KUKIPKZNm8aPP/7Ivn37dLZXrlyZ+Ph4nUTFmHOb/P3339r32dnZREVFaX/7atCgASdOnMDPz49q1arpvAxJTJycnPDy8mLv3r062/fu3VtozcbDAgICsLS0ZP/+/dptd+7c0f5HDDkdgW/dusW0adN47rnnCAwMzFN7lDv6SK1Wa7fdunWL6Ohoxo4dy/PPP0+tWrW4c+eO3rEJ8bhSUlI4fPiw9t/3+fPnOXz4MLGxsdSoUYOePXvSu3dvNm3axPnz5zlw4AARERH89NNPQE5H/AYNGvDWW29x6NAhoqKieOedd2jbtq1O7cqjSJIihMgjKCiInj17Mn/+fJ3tLVu25MaNG8yYMYOYmBgWLVrEL7/8YrTrLlq0iM2bN3P69GkGDx7MnTt3eOuttwAYPHgwt2/f5vXXX+eff/4hJiaGX3/9lX79+ul8wetjxIgRTJ8+nfXr1xMdHc2oUaM4fPgwH3zwgd7ncHBwoH///owYMYLff/+d48eP07dvX51mripVqmBlZcWCBQs4d+4cW7duZfLkyTrn8fX1RaVSsW3bNm7cuEFKSgoVKlSgUqVKLFmyhP/++4/ff/+d8PBwg+5RiMdx8OBBQkJCCAkJASA8PJyQkBDGjRsHwPLly+nduzcfffQRNWvWpEuXLvzzzz9UqVIFyKl1/fHHH3F1daV58+a8+OKL1KpVi2+//dawQIzUr0YIUYY92HE21/nz5xUrKyvl4f8mvvjiC8XHx0ext7dXevfurUyZMiVPx9mHz9WiRYs8nUl9fX2VOXPmaK8FKGvXrlWaNGmiWFlZKbVr11Z+//13nWPOnDmjdO3aVXFxcVFsbW2VwMBAZdiwYYpGoynwOvlRq9XKhAkTFG9vb8XS0lKpX7++8ssvv+iUeVTHWUXJ6Tzbq1cvxc7OTnF3d1dmzJiRJ4a1a9cqfn5+irW1tdK0aVNl69atCqAcOnRIW2bSpEmKh4eHolKplD59+iiKoii//fabUqtWLcXa2lqpV6+esmvXrjwdGIV40qkU5aEGZiGEEEKIUkCae4QQQghRKkmSIoQQQohSSZIUIYQQQpRKkqQIIYQQolSSJEUIIYQQpZIkKUIIIYQolSRJEUIIIUSpJEmKEEIIIUolSVKEEEIIUSpJkiKEEEKIUkmSFCGEEEKUSpKkCCGEEKJU+n/HGmO5IsFXowAAAABJRU5ErkJggg==\n", |
|
|
700 |
"text/plain": [ |
|
|
701 |
"<Figure size 600x400 with 1 Axes>" |
|
|
702 |
] |
|
|
703 |
}, |
|
|
704 |
"metadata": {}, |
|
|
705 |
"output_type": "display_data" |
|
|
706 |
} |
|
|
707 |
], |
|
|
708 |
"source": [ |
|
|
709 |
"# plot the normalized effective dimension for the model\n", |
|
|
710 |
"plt.plot(n, np.array(local_eff_dim_trained) / estimator_qnn.num_weights, label=\"trained weights\")\n", |
|
|
711 |
"plt.plot(\n", |
|
|
712 |
" n, np.array(local_eff_dim_untrained) / estimator_qnn.num_weights, label=\"untrained weights\"\n", |
|
|
713 |
")\n", |
|
|
714 |
"\n", |
|
|
715 |
"plt.xlabel(\"Number of data\")\n", |
|
|
716 |
"plt.ylabel(\"Normalized LOCAL effective dimension\")\n", |
|
|
717 |
"plt.legend()\n", |
|
|
718 |
"plt.show()" |
|
|
719 |
] |
|
|
720 |
}, |
|
|
721 |
{ |
|
|
722 |
"cell_type": "markdown", |
|
|
723 |
"metadata": {}, |
|
|
724 |
"source": [ |
|
|
725 |
"In general, we should expect the value of the local effective dimension to decrease after training. This can be understood by looking back into the main goal of machine learning, which is to pick a model that is expressive enough to fit your data, but not too expressive that it overfits and performs badly on new data samples. \n", |
|
|
726 |
"\n", |
|
|
727 |
"Certain optimizers help regularize the overfitting of a model by learning parameters, and this action of learning inherently reduces a model’s expressiveness, as measured by the local effective dimension. Following this logic, a randomly initialized parameter set will most likely produce a higher effective dimension that the final set of trained weights, because that model with that particular parameterization is “using more parameters” unnecessarily to fit the data. After training (with the implicit regularization), a trained model will not need to use so many parameters and thus have more “inactive parameters” and a lower effective dimension. \n", |
|
|
728 |
"\n", |
|
|
729 |
"We must keep in mind though that this is the general intuition, and there might be cases where a randomly selected set of weights happens to provide a lower effective dimension than the trained weights for a specific model. " |
|
|
730 |
] |
|
|
731 |
}, |
|
|
732 |
{ |
|
|
733 |
"cell_type": "code", |
|
|
734 |
"execution_count": 22, |
|
|
735 |
"metadata": { |
|
|
736 |
"pycharm": { |
|
|
737 |
"name": "#%%\n" |
|
|
738 |
}, |
|
|
739 |
"tags": [] |
|
|
740 |
}, |
|
|
741 |
"outputs": [ |
|
|
742 |
{ |
|
|
743 |
"data": { |
|
|
744 |
"text/html": [ |
|
|
745 |
"<h3>Version Information</h3><table><tr><th>Software</th><th>Version</th></tr><tr><td><code>qiskit</code></td><td>0.44.1</td></tr><tr><td><code>qiskit-terra</code></td><td>0.25.1</td></tr><tr><td><code>qiskit_machine_learning</code></td><td>0.6.1</td></tr><tr><th colspan='2'>System information</th></tr><tr><td>Python version</td><td>3.10.8</td></tr><tr><td>Python compiler</td><td>GCC 10.4.0</td></tr><tr><td>Python build</td><td>main, Nov 22 2022 08:26:04</td></tr><tr><td>OS</td><td>Linux</td></tr><tr><td>CPUs</td><td>8</td></tr><tr><td>Memory (Gb)</td><td>31.142810821533203</td></tr><tr><td colspan='2'>Wed Nov 22 16:38:24 2023 UTC</td></tr></table>" |
|
|
746 |
], |
|
|
747 |
"text/plain": [ |
|
|
748 |
"<IPython.core.display.HTML object>" |
|
|
749 |
] |
|
|
750 |
}, |
|
|
751 |
"metadata": {}, |
|
|
752 |
"output_type": "display_data" |
|
|
753 |
}, |
|
|
754 |
{ |
|
|
755 |
"data": { |
|
|
756 |
"text/html": [ |
|
|
757 |
"<div style='width: 100%; background-color:#d5d9e0;padding-left: 10px; padding-bottom: 10px; padding-right: 10px; padding-top: 5px'><h3>This code is a part of Qiskit</h3><p>© Copyright IBM 2017, 2023.</p><p>This code is licensed under the Apache License, Version 2.0. You may<br>obtain a copy of this license in the LICENSE.txt file in the root directory<br> of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.<p>Any modifications or derivative works of this code must retain this<br>copyright notice, and modified files need to carry a notice indicating<br>that they have been altered from the originals.</p></div>" |
|
|
758 |
], |
|
|
759 |
"text/plain": [ |
|
|
760 |
"<IPython.core.display.HTML object>" |
|
|
761 |
] |
|
|
762 |
}, |
|
|
763 |
"metadata": {}, |
|
|
764 |
"output_type": "display_data" |
|
|
765 |
} |
|
|
766 |
], |
|
|
767 |
"source": [ |
|
|
768 |
"import qiskit.tools.jupyter\n", |
|
|
769 |
"\n", |
|
|
770 |
"%qiskit_version_table\n", |
|
|
771 |
"%qiskit_copyright" |
|
|
772 |
] |
|
|
773 |
} |
|
|
774 |
], |
|
|
775 |
"metadata": { |
|
|
776 |
"celltoolbar": "Tags", |
|
|
777 |
"kernelspec": { |
|
|
778 |
"display_name": "Python 3 (ipykernel)", |
|
|
779 |
"language": "python", |
|
|
780 |
"name": "python3" |
|
|
781 |
}, |
|
|
782 |
"language_info": { |
|
|
783 |
"codemirror_mode": { |
|
|
784 |
"name": "ipython", |
|
|
785 |
"version": 3 |
|
|
786 |
}, |
|
|
787 |
"file_extension": ".py", |
|
|
788 |
"mimetype": "text/x-python", |
|
|
789 |
"name": "python", |
|
|
790 |
"nbconvert_exporter": "python", |
|
|
791 |
"pygments_lexer": "ipython3", |
|
|
792 |
"version": "3.10.8" |
|
|
793 |
}, |
|
|
794 |
"widgets": { |
|
|
795 |
"application/vnd.jupyter.widget-state+json": { |
|
|
796 |
"state": { |
|
|
797 |
"09a6e6ed5c084398858c5392b360efb2": { |
|
|
798 |
"model_module": "@jupyter-widgets/controls", |
|
|
799 |
"model_module_version": "2.0.0", |
|
|
800 |
"model_name": "ButtonModel", |
|
|
801 |
"state": { |
|
|
802 |
"button_style": "primary", |
|
|
803 |
"description": "Clear", |
|
|
804 |
"layout": "IPY_MODEL_3eab0af23cfe45f59a7ca663e9193530", |
|
|
805 |
"style": "IPY_MODEL_f37ee516540f4a7f8f55f461382d4236", |
|
|
806 |
"tooltip": null |
|
|
807 |
} |
|
|
808 |
}, |
|
|
809 |
"109b9f59d0d24b529db36b0e6805e936": { |
|
|
810 |
"model_module": "@jupyter-widgets/controls", |
|
|
811 |
"model_module_version": "2.0.0", |
|
|
812 |
"model_name": "HTMLModel", |
|
|
813 |
"state": { |
|
|
814 |
"layout": "IPY_MODEL_184977444faa47f18953316e63e08a00", |
|
|
815 |
"style": "IPY_MODEL_288c2166e6df4a3eb4f23a2f0e1c1dfb", |
|
|
816 |
"value": "<h5>Job ID</h5>" |
|
|
817 |
} |
|
|
818 |
}, |
|
|
819 |
"114f81fe630f4ba29aa399e4755e41c7": { |
|
|
820 |
"model_module": "@jupyter-widgets/controls", |
|
|
821 |
"model_module_version": "2.0.0", |
|
|
822 |
"model_name": "HTMLModel", |
|
|
823 |
"state": { |
|
|
824 |
"layout": "IPY_MODEL_322c2200dc974686b1724a637dd45f48", |
|
|
825 |
"style": "IPY_MODEL_2fe1ade89712448b93da39a2accd25c7", |
|
|
826 |
"value": "<h5>Queue</h5>" |
|
|
827 |
} |
|
|
828 |
}, |
|
|
829 |
"184977444faa47f18953316e63e08a00": { |
|
|
830 |
"model_module": "@jupyter-widgets/base", |
|
|
831 |
"model_module_version": "2.0.0", |
|
|
832 |
"model_name": "LayoutModel", |
|
|
833 |
"state": { |
|
|
834 |
"width": "190px" |
|
|
835 |
} |
|
|
836 |
}, |
|
|
837 |
"288c2166e6df4a3eb4f23a2f0e1c1dfb": { |
|
|
838 |
"model_module": "@jupyter-widgets/controls", |
|
|
839 |
"model_module_version": "2.0.0", |
|
|
840 |
"model_name": "HTMLStyleModel", |
|
|
841 |
"state": { |
|
|
842 |
"description_width": "", |
|
|
843 |
"font_size": null, |
|
|
844 |
"text_color": null |
|
|
845 |
} |
|
|
846 |
}, |
|
|
847 |
"2fe1ade89712448b93da39a2accd25c7": { |
|
|
848 |
"model_module": "@jupyter-widgets/controls", |
|
|
849 |
"model_module_version": "2.0.0", |
|
|
850 |
"model_name": "HTMLStyleModel", |
|
|
851 |
"state": { |
|
|
852 |
"description_width": "", |
|
|
853 |
"font_size": null, |
|
|
854 |
"text_color": null |
|
|
855 |
} |
|
|
856 |
}, |
|
|
857 |
"322c2200dc974686b1724a637dd45f48": { |
|
|
858 |
"model_module": "@jupyter-widgets/base", |
|
|
859 |
"model_module_version": "2.0.0", |
|
|
860 |
"model_name": "LayoutModel", |
|
|
861 |
"state": { |
|
|
862 |
"width": "70px" |
|
|
863 |
} |
|
|
864 |
}, |
|
|
865 |
"3eab0af23cfe45f59a7ca663e9193530": { |
|
|
866 |
"model_module": "@jupyter-widgets/base", |
|
|
867 |
"model_module_version": "2.0.0", |
|
|
868 |
"model_name": "LayoutModel", |
|
|
869 |
"state": { |
|
|
870 |
"grid_area": "right", |
|
|
871 |
"padding": "0px 0px 0px 0px", |
|
|
872 |
"width": "70px" |
|
|
873 |
} |
|
|
874 |
}, |
|
|
875 |
"4e1b4f52a31a4476b5d22a926be150f6": { |
|
|
876 |
"model_module": "@jupyter-widgets/controls", |
|
|
877 |
"model_module_version": "2.0.0", |
|
|
878 |
"model_name": "HTMLStyleModel", |
|
|
879 |
"state": { |
|
|
880 |
"description_width": "", |
|
|
881 |
"font_size": null, |
|
|
882 |
"text_color": null |
|
|
883 |
} |
|
|
884 |
}, |
|
|
885 |
"51411fe9aa834996ac19de03b757810a": { |
|
|
886 |
"model_module": "@jupyter-widgets/controls", |
|
|
887 |
"model_module_version": "2.0.0", |
|
|
888 |
"model_name": "HTMLStyleModel", |
|
|
889 |
"state": { |
|
|
890 |
"description_width": "", |
|
|
891 |
"font_size": null, |
|
|
892 |
"text_color": null |
|
|
893 |
} |
|
|
894 |
}, |
|
|
895 |
"57a1c62e69534db1895ca78e45e04122": { |
|
|
896 |
"model_module": "@jupyter-widgets/base", |
|
|
897 |
"model_module_version": "2.0.0", |
|
|
898 |
"model_name": "LayoutModel", |
|
|
899 |
"state": {} |
|
|
900 |
}, |
|
|
901 |
"5c19a819cf2b418393df54e67a12e824": { |
|
|
902 |
"model_module": "@jupyter-widgets/base", |
|
|
903 |
"model_module_version": "2.0.0", |
|
|
904 |
"model_name": "LayoutModel", |
|
|
905 |
"state": { |
|
|
906 |
"margin": "0px 0px 0px 37px", |
|
|
907 |
"width": "600px" |
|
|
908 |
} |
|
|
909 |
}, |
|
|
910 |
"6901d98c37dd414a918fad31d6ec664e": { |
|
|
911 |
"model_module": "@jupyter-widgets/base", |
|
|
912 |
"model_module_version": "2.0.0", |
|
|
913 |
"model_name": "LayoutModel", |
|
|
914 |
"state": { |
|
|
915 |
"margin": "0px 0px 10px 0px" |
|
|
916 |
} |
|
|
917 |
}, |
|
|
918 |
"6ceb8eeb5f87486087c589a1968b8148": { |
|
|
919 |
"model_module": "@jupyter-widgets/controls", |
|
|
920 |
"model_module_version": "2.0.0", |
|
|
921 |
"model_name": "HTMLModel", |
|
|
922 |
"state": { |
|
|
923 |
"layout": "IPY_MODEL_fd1035ffd0544addbc61bc26f9795e81", |
|
|
924 |
"style": "IPY_MODEL_51411fe9aa834996ac19de03b757810a", |
|
|
925 |
"value": "<h5>Status</h5>" |
|
|
926 |
} |
|
|
927 |
}, |
|
|
928 |
"84334bcf0cd8479c943df057062df9bb": { |
|
|
929 |
"model_module": "@jupyter-widgets/controls", |
|
|
930 |
"model_module_version": "2.0.0", |
|
|
931 |
"model_name": "HTMLModel", |
|
|
932 |
"state": { |
|
|
933 |
"layout": "IPY_MODEL_f70ec821d24f46a9b6a491f26dfe317a", |
|
|
934 |
"style": "IPY_MODEL_d28424781ca64f139fef57d2ebc26c95", |
|
|
935 |
"value": "<h5>Backend</h5>" |
|
|
936 |
} |
|
|
937 |
}, |
|
|
938 |
"905890c9d2b64231a89de9cd622a4fdb": { |
|
|
939 |
"model_module": "@jupyter-widgets/controls", |
|
|
940 |
"model_module_version": "2.0.0", |
|
|
941 |
"model_name": "HBoxModel", |
|
|
942 |
"state": { |
|
|
943 |
"children": [ |
|
|
944 |
"IPY_MODEL_109b9f59d0d24b529db36b0e6805e936", |
|
|
945 |
"IPY_MODEL_84334bcf0cd8479c943df057062df9bb", |
|
|
946 |
"IPY_MODEL_6ceb8eeb5f87486087c589a1968b8148", |
|
|
947 |
"IPY_MODEL_114f81fe630f4ba29aa399e4755e41c7", |
|
|
948 |
"IPY_MODEL_a292b3cecf514dca849103f26baf07fe" |
|
|
949 |
], |
|
|
950 |
"layout": "IPY_MODEL_5c19a819cf2b418393df54e67a12e824" |
|
|
951 |
} |
|
|
952 |
}, |
|
|
953 |
"a292b3cecf514dca849103f26baf07fe": { |
|
|
954 |
"model_module": "@jupyter-widgets/controls", |
|
|
955 |
"model_module_version": "2.0.0", |
|
|
956 |
"model_name": "HTMLModel", |
|
|
957 |
"state": { |
|
|
958 |
"layout": "IPY_MODEL_57a1c62e69534db1895ca78e45e04122", |
|
|
959 |
"style": "IPY_MODEL_4e1b4f52a31a4476b5d22a926be150f6", |
|
|
960 |
"value": "<h5>Message</h5>" |
|
|
961 |
} |
|
|
962 |
}, |
|
|
963 |
"acce221590a84fe485e562cc8e4b8bb2": { |
|
|
964 |
"model_module": "@jupyter-widgets/base", |
|
|
965 |
"model_module_version": "2.0.0", |
|
|
966 |
"model_name": "LayoutModel", |
|
|
967 |
"state": { |
|
|
968 |
"grid_template_areas": "\n \". . . . right \"\n ", |
|
|
969 |
"grid_template_columns": "20% 20% 20% 20% 20%", |
|
|
970 |
"width": "100%" |
|
|
971 |
} |
|
|
972 |
}, |
|
|
973 |
"b645ba3fb5a54cd38ef777530a32f160": { |
|
|
974 |
"model_module": "@jupyter-widgets/controls", |
|
|
975 |
"model_module_version": "2.0.0", |
|
|
976 |
"model_name": "HTMLModel", |
|
|
977 |
"state": { |
|
|
978 |
"layout": "IPY_MODEL_6901d98c37dd414a918fad31d6ec664e", |
|
|
979 |
"style": "IPY_MODEL_e4167e8bf5db43639de8052259390077", |
|
|
980 |
"value": "<p style='font-family: IBM Plex Sans, Arial, Helvetica, sans-serif; font-size: 20px; font-weight: medium;'>Circuit Properties</p>" |
|
|
981 |
} |
|
|
982 |
}, |
|
|
983 |
"d28424781ca64f139fef57d2ebc26c95": { |
|
|
984 |
"model_module": "@jupyter-widgets/controls", |
|
|
985 |
"model_module_version": "2.0.0", |
|
|
986 |
"model_name": "HTMLStyleModel", |
|
|
987 |
"state": { |
|
|
988 |
"description_width": "", |
|
|
989 |
"font_size": null, |
|
|
990 |
"text_color": null |
|
|
991 |
} |
|
|
992 |
}, |
|
|
993 |
"e4167e8bf5db43639de8052259390077": { |
|
|
994 |
"model_module": "@jupyter-widgets/controls", |
|
|
995 |
"model_module_version": "2.0.0", |
|
|
996 |
"model_name": "HTMLStyleModel", |
|
|
997 |
"state": { |
|
|
998 |
"description_width": "", |
|
|
999 |
"font_size": null, |
|
|
1000 |
"text_color": null |
|
|
1001 |
} |
|
|
1002 |
}, |
|
|
1003 |
"f37ee516540f4a7f8f55f461382d4236": { |
|
|
1004 |
"model_module": "@jupyter-widgets/controls", |
|
|
1005 |
"model_module_version": "2.0.0", |
|
|
1006 |
"model_name": "ButtonStyleModel", |
|
|
1007 |
"state": { |
|
|
1008 |
"font_family": null, |
|
|
1009 |
"font_size": null, |
|
|
1010 |
"font_style": null, |
|
|
1011 |
"font_variant": null, |
|
|
1012 |
"font_weight": null, |
|
|
1013 |
"text_color": null, |
|
|
1014 |
"text_decoration": null |
|
|
1015 |
} |
|
|
1016 |
}, |
|
|
1017 |
"f70ec821d24f46a9b6a491f26dfe317a": { |
|
|
1018 |
"model_module": "@jupyter-widgets/base", |
|
|
1019 |
"model_module_version": "2.0.0", |
|
|
1020 |
"model_name": "LayoutModel", |
|
|
1021 |
"state": { |
|
|
1022 |
"width": "145px" |
|
|
1023 |
} |
|
|
1024 |
}, |
|
|
1025 |
"fd1035ffd0544addbc61bc26f9795e81": { |
|
|
1026 |
"model_module": "@jupyter-widgets/base", |
|
|
1027 |
"model_module_version": "2.0.0", |
|
|
1028 |
"model_name": "LayoutModel", |
|
|
1029 |
"state": { |
|
|
1030 |
"width": "95px" |
|
|
1031 |
} |
|
|
1032 |
}, |
|
|
1033 |
"ff1ac22249024665aa3136985f58f27f": { |
|
|
1034 |
"model_module": "@jupyter-widgets/controls", |
|
|
1035 |
"model_module_version": "2.0.0", |
|
|
1036 |
"model_name": "GridBoxModel", |
|
|
1037 |
"state": { |
|
|
1038 |
"children": [ |
|
|
1039 |
"IPY_MODEL_09a6e6ed5c084398858c5392b360efb2" |
|
|
1040 |
], |
|
|
1041 |
"layout": "IPY_MODEL_acce221590a84fe485e562cc8e4b8bb2" |
|
|
1042 |
} |
|
|
1043 |
} |
|
|
1044 |
}, |
|
|
1045 |
"version_major": 2, |
|
|
1046 |
"version_minor": 0 |
|
|
1047 |
} |
|
|
1048 |
} |
|
|
1049 |
}, |
|
|
1050 |
"nbformat": 4, |
|
|
1051 |
"nbformat_minor": 4 |
|
|
1052 |
} |