|
a |
|
b/Code/All Qiskit, PennyLane QML Nov 23/08a3 Kernel 8.5Loss 90% kkawchak.ipynb |
|
|
1 |
{ |
|
|
2 |
"cells": [ |
|
|
3 |
{ |
|
|
4 |
"cell_type": "markdown", |
|
|
5 |
"id": "38df9aa0", |
|
|
6 |
"metadata": {}, |
|
|
7 |
"source": [ |
|
|
8 |
"# Quantum Kernel Training for Machine Learning Applications\n", |
|
|
9 |
"\n", |
|
|
10 |
"In this tutorial, we will train a quantum kernel on a labeled dataset for a machine learning application. To illustrate the basic steps, we will use Quantum Kernel Alignment (QKA) for a binary classification task. QKA is a technique that iteratively adapts a parametrized quantum kernel to a dataset while converging to the maximum SVM margin. More information about QKA can be found in the preprint, [\"Covariant quantum kernels for data with group structure.\"](https://arxiv.org/abs/2105.03406)\n", |
|
|
11 |
"\n", |
|
|
12 |
"\n", |
|
|
13 |
"The entry point to training a quantum kernel is the `QuantumKernelTrainer` class. The basic steps are:\n", |
|
|
14 |
"\n", |
|
|
15 |
"1. Prepare the dataset\n", |
|
|
16 |
"2. Define the quantum feature map\n", |
|
|
17 |
"3. Set up an instance of `TrainableKernel` and `QuantumKernelTrainer` objects\n", |
|
|
18 |
"4. Use the `QuantumKernelTrainer.fit` method to train the kernel parameters on the dataset\n", |
|
|
19 |
"5. Pass the trained quantum kernel to a machine learning model" |
|
|
20 |
] |
|
|
21 |
}, |
|
|
22 |
{ |
|
|
23 |
"cell_type": "markdown", |
|
|
24 |
"id": "ed6aafa9", |
|
|
25 |
"metadata": {}, |
|
|
26 |
"source": [ |
|
|
27 |
"### Import Local, External, and Qiskit Packages and define a callback class for our optimizer" |
|
|
28 |
] |
|
|
29 |
}, |
|
|
30 |
{ |
|
|
31 |
"cell_type": "code", |
|
|
32 |
"execution_count": 1, |
|
|
33 |
"id": "1a646351", |
|
|
34 |
"metadata": {}, |
|
|
35 |
"outputs": [ |
|
|
36 |
{ |
|
|
37 |
"name": "stderr", |
|
|
38 |
"output_type": "stream", |
|
|
39 |
"text": [ |
|
|
40 |
"/tmp/ipykernel_191979/3710893010.py:12: 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", |
|
|
41 |
" from qiskit.algorithms.optimizers import SPSA\n" |
|
|
42 |
] |
|
|
43 |
} |
|
|
44 |
], |
|
|
45 |
"source": [ |
|
|
46 |
"# External imports\n", |
|
|
47 |
"from pylab import cm\n", |
|
|
48 |
"from sklearn import metrics\n", |
|
|
49 |
"import numpy as np\n", |
|
|
50 |
"import matplotlib\n", |
|
|
51 |
"import matplotlib.pyplot as plt\n", |
|
|
52 |
"\n", |
|
|
53 |
"# Qiskit imports\n", |
|
|
54 |
"from qiskit import QuantumCircuit\n", |
|
|
55 |
"from qiskit.circuit import ParameterVector\n", |
|
|
56 |
"from qiskit.visualization import circuit_drawer\n", |
|
|
57 |
"from qiskit.algorithms.optimizers import SPSA\n", |
|
|
58 |
"from qiskit.circuit.library import ZZFeatureMap, ZFeatureMap\n", |
|
|
59 |
"from qiskit_machine_learning.kernels import TrainableFidelityQuantumKernel\n", |
|
|
60 |
"from qiskit_machine_learning.kernels.algorithms import QuantumKernelTrainer\n", |
|
|
61 |
"from qiskit_machine_learning.algorithms import QSVC\n", |
|
|
62 |
"from qiskit_machine_learning.datasets import ad_hoc_data\n", |
|
|
63 |
"\n", |
|
|
64 |
"\n", |
|
|
65 |
"class QKTCallback:\n", |
|
|
66 |
" \"\"\"Callback wrapper class.\"\"\"\n", |
|
|
67 |
"\n", |
|
|
68 |
" def __init__(self) -> None:\n", |
|
|
69 |
" self._data = [[] for i in range(5)]\n", |
|
|
70 |
"\n", |
|
|
71 |
" def callback(self, x0, x1=None, x2=None, x3=None, x4=None):\n", |
|
|
72 |
" \"\"\"\n", |
|
|
73 |
" Args:\n", |
|
|
74 |
" x0: number of function evaluations\n", |
|
|
75 |
" x1: the parameters\n", |
|
|
76 |
" x2: the function value\n", |
|
|
77 |
" x3: the stepsize\n", |
|
|
78 |
" x4: whether the step was accepted\n", |
|
|
79 |
" \"\"\"\n", |
|
|
80 |
" self._data[0].append(x0)\n", |
|
|
81 |
" self._data[1].append(x1)\n", |
|
|
82 |
" self._data[2].append(x2)\n", |
|
|
83 |
" self._data[3].append(x3)\n", |
|
|
84 |
" self._data[4].append(x4)\n", |
|
|
85 |
"\n", |
|
|
86 |
" def get_callback_data(self):\n", |
|
|
87 |
" return self._data\n", |
|
|
88 |
"\n", |
|
|
89 |
" def clear_callback_data(self):\n", |
|
|
90 |
" self._data = [[] for i in range(5)]" |
|
|
91 |
] |
|
|
92 |
}, |
|
|
93 |
{ |
|
|
94 |
"cell_type": "markdown", |
|
|
95 |
"id": "39535c04", |
|
|
96 |
"metadata": {}, |
|
|
97 |
"source": [ |
|
|
98 |
"### Prepare the Dataset\n", |
|
|
99 |
"\n", |
|
|
100 |
"In this guide, we will use Qiskit Machine Learning's `ad_hoc.py` dataset to demonstrate the kernel training process. See the documentation [here](https://qiskit.org/ecosystem/machine-learning/stubs/qiskit_machine_learning.datasets.ad_hoc_data.html)." |
|
|
101 |
] |
|
|
102 |
}, |
|
|
103 |
{ |
|
|
104 |
"cell_type": "code", |
|
|
105 |
"execution_count": 2, |
|
|
106 |
"id": "2311cff1", |
|
|
107 |
"metadata": {}, |
|
|
108 |
"outputs": [ |
|
|
109 |
{ |
|
|
110 |
"data": { |
|
|
111 |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAhsAAAHDCAYAAACNothiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAABkK0lEQVR4nO3deVxU9f4/8NdhkAFEEBQEU8EEFcN9I82tNDU3LKO8elNbrvW1zNR7E7m/UlOpW1bWLdtMKzUzcwtubte0MtwyVJIUvW6ZpOYyuA3CfH5/DIwMDDMcZs6cMzOv5+PBQzmcOedzziy8+Xzen/dHEkIIEBERESnET+0GEBERkXdjsEFERESKYrBBREREimKwQURERIpisEFERESKYrBBREREimKwQURERIpisEFERESKYrBBREREimKw4SEWL14MSZJw/Phxu/uNHTsWISEh7mlUDY0dOxZxcXFqN0MV69evR7t27RAYGAhJknDp0iVV27N161ZIkoStW7eq1gZJkjBjxgyrbbt370a3bt1Qu3ZtSJKEnJwczJgxA5Ikub19x48fhyRJWLx4sdvPTeQtGGy42bvvvgtJktC1a1e1m+KR5s6dizVr1qjdDADAwYMHMWPGDIcBYJk///wTqampCAoKwjvvvIPPPvsMtWvXVraRHujmzZt48MEHceHCBbzxxhv47LPPEBsbq/h5ly1bhjfffFPx8xD5In+1G+Brli5diri4OOzatQtHjhxBfHy82k3yKHPnzsWIESOQkpKidlNw8OBBzJw5E717965WT83u3btRWFiIl156CX379lW+gR7i+vXr8Pe/9VF09OhRnDhxAh9++CEef/xxy/Z//vOfmDZtmmLtWLZsGXJzczFp0iSr7bGxsbh+/Tpq1aql2LmJvB17Ntzo2LFj+PHHH/H6668jMjISS5cuVbtJ5EZnz54FANStW9dlx7x69arLjqWWwMBAq2Cjqvvk7++PwMBAdzYNgHmYJzAwEDqdzu3nJvIWDDbcaOnSpQgPD8egQYMwYsSIKoONX375BXfffTeCgoLQqFEjzJ49GyaTSda5Tp8+jZSUFISEhCAyMhJTp05FSUmJ1T5Xr17FlClT0LhxY+j1erRo0QKvvfYabC0EvGTJEnTp0gXBwcEIDw9Hz549sXHjRoftWLNmDZKSkhAYGIikpCSsXr3a5n6vvfYaunXrhnr16iEoKAgdO3bEypUrrfaRJAlXr17FJ598AkmSIEkSxo4dCwA4ceIE/u///g8tWrRAUFAQ6tWrhwcffLDSEMfNmzcxc+ZMJCQkIDAwEPXq1cNdd92FTZs2We3366+/YsSIEYiIiEBgYCA6deqEdevWWX6+ePFiPPjggwCAPn36WNpTVe5D7969MWbMGABA586drdoOAF9++SU6duyIoKAg1K9fH6NHj8bp06etjlGWj3P06FHcd999qFOnDkaNGmXzfGVOnz6Nxx57DA0bNoRer0fTpk3x1FNPoaioqMrHfP/993jwwQfRpEkT6PV6NG7cGM899xyuX79utV9BQQHGjRuHRo0aQa/XIyYmBsOGDbO653v27EH//v1Rv359BAUFoWnTpnj00UetjlM+Z2Ps2LHo1asXAODBBx+EJEno3bs3AFSZs+Hotbl27VoMGjTIcg+aNWuGl156yer90Lt3b2RlZeHEiROW57Kst6qqnI0tW7agR48eqF27NurWrYthw4YhLy/Pap+yNh85cgRjx45F3bp1ERYWhnHjxuHatWtVPgdE3obDKG60dOlS3H///QgICMDIkSOxYMEC7N69G507d7bsU1BQgD59+qC4uBjTpk1D7dq18cEHHyAoKKja5ykpKUH//v3RtWtXvPbaa9i8eTPmzZuHZs2a4amnngIACCEwdOhQfPvtt3jsscfQrl07bNiwAX//+99x+vRpvPHGG5bjzZw5EzNmzEC3bt0wa9YsBAQEYOfOndiyZQvuvffeKtuxceNGPPDAA2jVqhUyMjLw559/Wn45VTR//nwMHToUo0aNQlFREZYvX44HH3wQmZmZGDRoEADgs88+w+OPP44uXbrgb3/7GwCgWbNmAMxDFD/++CMefvhhNGrUCMePH8eCBQvQu3dvHDx4EMHBwQDMH/4ZGRmW4xgMBuzZswd79+5Fv379AJiDve7du+O2226zPAcrVqxASkoKvvrqKwwfPhw9e/bExIkT8dZbb2H69OlITEwEAMu/FaWnp6NFixb44IMPMGvWLDRt2tTS9sWLF2PcuHHo3LkzMjIy8Mcff2D+/PnYvn07fv75Z6u/8IuLi9G/f3/cddddeO211yzXZcvvv/+OLl264NKlS/jb3/6Gli1b4vTp01i5ciWuXbuGgIAAm4/78ssvce3aNTz11FOoV68edu3a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QyveitfsG3zxmgHfvG5eM5E8smajEBEREcklK2eDiIiISC4GG0RERKQoBhtERESkKAYbREREpCi3BhvvvPMO4uLiEBgYiK5du2LXrl3uPL3bfffddxgyZAgaNmwISZKwZs0atZukuIyMDHTu3Bl16tRBVFQUUlJScOjQIbWbpagFCxagTZs2lmJHd955J7755hu1m+VWL7/8MiRJwqRJk9RuiqJmzJgBSZKsvlq2bKl2sxR3+vRpjB49GvXq1UNQUBBat26NPXv2qN0s8iBuCzbKlqZ/8cUXsXfvXrRt2xb9+/fH2bNn3dUEt7t69Sratm2Ld955R+2muM22bdswYcIE7NixA5s2bcLNmzdx77334urVq2o3TTGNGjXCyy+/jJ9++gl79uzB3XffjWHDhuGXX35Ru2lusXv3brz//vto06aN2k1xizvuuANnzpyxfP3www9qN0lRFy9eRPfu3VGrVi188803OHjwIObNm4fw8HC1m0aeRLhJly5dxIQJEyzfl5SUiIYNG4qMjAx3NUFVAMTq1avVbobbnT17VgAQ27ZtU7spbhUeHi4++ugjtZuhuMLCQpGQkCA2bdokevXqJZ599lm1m6SoF198UbRt21btZrjV888/L+666y61m0Eezi09G2VL0/ft29eyzdHS9OQdLl++DACIiIhQuSXuUVJSguXLl+Pq1as+UcJ/woQJGDRokNV729vl5+ejYcOGuP322zFq1CicPHlS7SYpat26dejUqRMefPBBREVFoX379vjwww/VbhZ5GLcEG+fPn0dJSUmlKqMNGjRAQUGBO5pAKjCZTJg0aRK6d++OpKQktZujqAMHDiAkJAR6vR5PPvkkVq9ejVatWqndLEUtX74ce/fuRUZGhtpNcZuuXbti8eLFWL9+PRYsWIBjx46hR48eKCwsVLtpivnf//6HBQsWICEhARs2bMBTTz2FiRMn4pNPPlG7aeRBFF9innzXhAkTkJub6/Vj2gDQokUL5OTk4PLly1i5ciXGjBmDbdu2eW3AcerUKTz77LPYtGkTAgMD1W6O2wwcONDy/zZt2qBr166IjY3FihUr8Nhjj6nYMuWYTCZ06tQJc+fOBQC0b98eubm5eO+99zBmzBiVW0eewi09GzVZmp4829NPP43MzEx8++23aNSokdrNUVxAQADi4+PRsWNHZGRkoG3btpg/f77azVLMTz/9hLNnz6JDhw7w9/eHv78/tm3bhrfeegv+/v4oKSlRu4luUbduXTRv3hxHjhxRuymKiYmJqRQ0JyYmev3wEbmWW4INLk3vO4QQePrpp7F69Wps2bIFTZs2VbtJqjCZTDAajWo3QzH33HMPDhw4gJycHMtXp06dMGrUKOTk5ECn06ndRLe4cuUKjh49ipiYGLWbopju3btXmr5++PBhxMbGqtQi8kRuG0bxxaXpr1y5YvUXz7Fjx5CTk4OIiAg0adJExZYpZ8KECVi2bBnWrl2LOnXqWHJywsLCEBQUpHLrlJGWloaBAweiSZMmKCwsxLJly7B161Zs2LBB7aYppk6dOpXycGrXro169ep5dX7O1KlTMWTIEMTGxuL333/Hiy++CJ1Oh5EjR6rdNMU899xz6NatG+bOnYvU1FTs2rULH3zwAT744AO1m0aexJ1TX95++23RpEkTERAQILp06SJ27NjhztO73bfffisAVPoaM2aM2k1TjK3rBSAWLVqkdtMU8+ijj4rY2FgREBAgIiMjxT333CM2btyodrPczhemvj700EMiJiZGBAQEiNtuu0089NBD4siRI2o3S3Fff/21SEpKEnq9XrRs2VJ88MEHajeJPAyXmCciIiJFcW0UIiIiUhSDDSIiIlIUgw0iIiJSFIMNIiIiUhSDDSIiIlIUgw0iIiJSFIMNIiIiUhSDDSIiIlIUgw0iIiJSFIMNIiIiUhSDDSIiIlIUgw0iIiJS1P8HiC5TVfg3CyIAAAAASUVORK5CYII=\n", |
|
|
112 |
"text/plain": [ |
|
|
113 |
"<Figure size 500x500 with 1 Axes>" |
|
|
114 |
] |
|
|
115 |
}, |
|
|
116 |
"metadata": {}, |
|
|
117 |
"output_type": "display_data" |
|
|
118 |
} |
|
|
119 |
], |
|
|
120 |
"source": [ |
|
|
121 |
"adhoc_dimension = 2\n", |
|
|
122 |
"X_train, y_train, X_test, y_test, adhoc_total = ad_hoc_data(\n", |
|
|
123 |
" training_size=20,\n", |
|
|
124 |
" test_size=5,\n", |
|
|
125 |
" n=adhoc_dimension,\n", |
|
|
126 |
" gap=0.3,\n", |
|
|
127 |
" plot_data=False,\n", |
|
|
128 |
" one_hot=False,\n", |
|
|
129 |
" include_sample_total=True,\n", |
|
|
130 |
")\n", |
|
|
131 |
"\n", |
|
|
132 |
"plt.figure(figsize=(5, 5))\n", |
|
|
133 |
"plt.ylim(0, 2 * np.pi)\n", |
|
|
134 |
"plt.xlim(0, 2 * np.pi)\n", |
|
|
135 |
"plt.imshow(\n", |
|
|
136 |
" np.asmatrix(adhoc_total).T,\n", |
|
|
137 |
" interpolation=\"nearest\",\n", |
|
|
138 |
" origin=\"lower\",\n", |
|
|
139 |
" cmap=\"RdBu\",\n", |
|
|
140 |
" extent=[0, 2 * np.pi, 0, 2 * np.pi],\n", |
|
|
141 |
")\n", |
|
|
142 |
"\n", |
|
|
143 |
"plt.scatter(\n", |
|
|
144 |
" X_train[np.where(y_train[:] == 0), 0],\n", |
|
|
145 |
" X_train[np.where(y_train[:] == 0), 1],\n", |
|
|
146 |
" marker=\"s\",\n", |
|
|
147 |
" facecolors=\"w\",\n", |
|
|
148 |
" edgecolors=\"b\",\n", |
|
|
149 |
" label=\"A train\",\n", |
|
|
150 |
")\n", |
|
|
151 |
"plt.scatter(\n", |
|
|
152 |
" X_train[np.where(y_train[:] == 1), 0],\n", |
|
|
153 |
" X_train[np.where(y_train[:] == 1), 1],\n", |
|
|
154 |
" marker=\"o\",\n", |
|
|
155 |
" facecolors=\"w\",\n", |
|
|
156 |
" edgecolors=\"r\",\n", |
|
|
157 |
" label=\"B train\",\n", |
|
|
158 |
")\n", |
|
|
159 |
"plt.scatter(\n", |
|
|
160 |
" X_test[np.where(y_test[:] == 0), 0],\n", |
|
|
161 |
" X_test[np.where(y_test[:] == 0), 1],\n", |
|
|
162 |
" marker=\"s\",\n", |
|
|
163 |
" facecolors=\"b\",\n", |
|
|
164 |
" edgecolors=\"w\",\n", |
|
|
165 |
" label=\"A test\",\n", |
|
|
166 |
")\n", |
|
|
167 |
"plt.scatter(\n", |
|
|
168 |
" X_test[np.where(y_test[:] == 1), 0],\n", |
|
|
169 |
" X_test[np.where(y_test[:] == 1), 1],\n", |
|
|
170 |
" marker=\"o\",\n", |
|
|
171 |
" facecolors=\"r\",\n", |
|
|
172 |
" edgecolors=\"w\",\n", |
|
|
173 |
" label=\"B test\",\n", |
|
|
174 |
")\n", |
|
|
175 |
"\n", |
|
|
176 |
"plt.legend(bbox_to_anchor=(1.05, 1), loc=\"upper left\", borderaxespad=0.0)\n", |
|
|
177 |
"plt.title(\"Ad hoc dataset for classification\")\n", |
|
|
178 |
"\n", |
|
|
179 |
"plt.show()" |
|
|
180 |
] |
|
|
181 |
}, |
|
|
182 |
{ |
|
|
183 |
"cell_type": "markdown", |
|
|
184 |
"id": "41a439be", |
|
|
185 |
"metadata": {}, |
|
|
186 |
"source": [ |
|
|
187 |
"### Define the Quantum Feature Map\n", |
|
|
188 |
"\n", |
|
|
189 |
"Next, we set up the quantum feature map, which encodes classical data into the quantum state space. Here, we use a `QuantumCircuit` to set up a trainable rotation layer and a `ZZFeatureMap` from `Qiskit` to represent the input data." |
|
|
190 |
] |
|
|
191 |
}, |
|
|
192 |
{ |
|
|
193 |
"cell_type": "code", |
|
|
194 |
"execution_count": 3, |
|
|
195 |
"id": "60b58ede", |
|
|
196 |
"metadata": {}, |
|
|
197 |
"outputs": [ |
|
|
198 |
{ |
|
|
199 |
"name": "stdout", |
|
|
200 |
"output_type": "stream", |
|
|
201 |
"text": [ |
|
|
202 |
"Figure(454.517x200.667)\n", |
|
|
203 |
"Trainable parameters: θ, ['θ[0]']\n" |
|
|
204 |
] |
|
|
205 |
} |
|
|
206 |
], |
|
|
207 |
"source": [ |
|
|
208 |
"# Create a rotational layer to train. We will rotate each qubit the same amount.\n", |
|
|
209 |
"training_params = ParameterVector(\"θ\", 1)\n", |
|
|
210 |
"fm0 = QuantumCircuit(2)\n", |
|
|
211 |
"fm0.ry(training_params[0], 0)\n", |
|
|
212 |
"fm0.ry(training_params[0], 1)\n", |
|
|
213 |
"\n", |
|
|
214 |
"# Use ZZFeatureMap to represent input data\n", |
|
|
215 |
"fm1 = ZZFeatureMap(2)\n", |
|
|
216 |
"\n", |
|
|
217 |
"# Create the feature map, composed of our two circuits\n", |
|
|
218 |
"fm = fm0.compose(fm1)\n", |
|
|
219 |
"\n", |
|
|
220 |
"print(circuit_drawer(fm))\n", |
|
|
221 |
"print(f\"Trainable parameters: {training_params}\")" |
|
|
222 |
] |
|
|
223 |
}, |
|
|
224 |
{ |
|
|
225 |
"cell_type": "markdown", |
|
|
226 |
"id": "54ae41ca", |
|
|
227 |
"metadata": {}, |
|
|
228 |
"source": [ |
|
|
229 |
"### Set Up the Quantum Kernel and Quantum Kernel Trainer\n", |
|
|
230 |
"\n", |
|
|
231 |
"To train the quantum kernel, we will use an instance of `TrainableFidelityQuantumKernel` (holds the feature map and its parameters) and `QuantumKernelTrainer` (manages the training process).\n", |
|
|
232 |
"\n", |
|
|
233 |
"We will train using the Quantum Kernel Alignment technique by selecting the kernel loss function, `SVCLoss`, as input to the `QuantumKernelTrainer`. Since this is a Qiskit-supported loss, we can use the string, `\"svc_loss\"`; however, note that default settings are used when passing the loss as a string. For custom settings, instantiate explicitly with the desired options, and pass the `KernelLoss` object to the `QuantumKernelTrainer`.\n", |
|
|
234 |
"\n", |
|
|
235 |
"We will select SPSA as the optimizer and initialize the trainable parameter with the `initial_point` argument. Note: The length of the list passed as the `initial_point` argument must equal the number of trainable parameters in the feature map." |
|
|
236 |
] |
|
|
237 |
}, |
|
|
238 |
{ |
|
|
239 |
"cell_type": "code", |
|
|
240 |
"execution_count": 4, |
|
|
241 |
"id": "a190efef", |
|
|
242 |
"metadata": {}, |
|
|
243 |
"outputs": [], |
|
|
244 |
"source": [ |
|
|
245 |
"# Instantiate quantum kernel\n", |
|
|
246 |
"quant_kernel = TrainableFidelityQuantumKernel(feature_map=fm, training_parameters=training_params)\n", |
|
|
247 |
"\n", |
|
|
248 |
"# Set up the optimizer\n", |
|
|
249 |
"cb_qkt = QKTCallback()\n", |
|
|
250 |
"spsa_opt = SPSA(maxiter=10, callback=cb_qkt.callback, learning_rate=0.048, perturbation=0.05, regularization=0.001)\n", |
|
|
251 |
"\n", |
|
|
252 |
"# Instantiate a quantum kernel trainer.\n", |
|
|
253 |
"qkt = QuantumKernelTrainer(\n", |
|
|
254 |
" quantum_kernel=quant_kernel, loss=\"svc_loss\", optimizer=spsa_opt, initial_point=[np.pi / 2]\n", |
|
|
255 |
")" |
|
|
256 |
] |
|
|
257 |
}, |
|
|
258 |
{ |
|
|
259 |
"cell_type": "markdown", |
|
|
260 |
"id": "b6f4fd48", |
|
|
261 |
"metadata": {}, |
|
|
262 |
"source": [ |
|
|
263 |
"### Train the Quantum Kernel\n", |
|
|
264 |
"\n", |
|
|
265 |
"To train the quantum kernel on the dataset (samples and labels), we call the `fit` method of `QuantumKernelTrainer`.\n", |
|
|
266 |
"\n", |
|
|
267 |
"The output of `QuantumKernelTrainer.fit` is a `QuantumKernelTrainerResult` object. The results object contains the following class fields:\n", |
|
|
268 |
"\n", |
|
|
269 |
" - `optimal_parameters`: A dictionary containing {parameter: optimal value} pairs\n", |
|
|
270 |
" - `optimal_point`: The optimal parameter value found in training\n", |
|
|
271 |
" - `optimal_value`: The value of the loss function at the optimal point\n", |
|
|
272 |
" - `optimizer_evals`: The number of evaluations performed by the optimizer\n", |
|
|
273 |
" - `optimizer_time`: The amount of time taken to perform optimization\n", |
|
|
274 |
" - `quantum_kernel`: A `TrainableKernel` object with optimal values bound to the feature map" |
|
|
275 |
] |
|
|
276 |
}, |
|
|
277 |
{ |
|
|
278 |
"cell_type": "code", |
|
|
279 |
"execution_count": 5, |
|
|
280 |
"id": "9d26212c", |
|
|
281 |
"metadata": {}, |
|
|
282 |
"outputs": [ |
|
|
283 |
{ |
|
|
284 |
"name": "stdout", |
|
|
285 |
"output_type": "stream", |
|
|
286 |
"text": [ |
|
|
287 |
"{ 'optimal_circuit': None,\n", |
|
|
288 |
" 'optimal_parameters': {ParameterVectorElement(θ[0]): 2.509048532039944},\n", |
|
|
289 |
" 'optimal_point': array([2.50904853]),\n", |
|
|
290 |
" 'optimal_value': 8.418674037699619,\n", |
|
|
291 |
" 'optimizer_evals': 30,\n", |
|
|
292 |
" 'optimizer_result': None,\n", |
|
|
293 |
" 'optimizer_time': None,\n", |
|
|
294 |
" 'quantum_kernel': <qiskit_machine_learning.kernels.trainable_fidelity_quantum_kernel.TrainableFidelityQuantumKernel object at 0x7f55ade9a6e0>}\n" |
|
|
295 |
] |
|
|
296 |
} |
|
|
297 |
], |
|
|
298 |
"source": [ |
|
|
299 |
"# Train the kernel using QKT directly\n", |
|
|
300 |
"qka_results = qkt.fit(X_train, y_train)\n", |
|
|
301 |
"optimized_kernel = qka_results.quantum_kernel\n", |
|
|
302 |
"print(qka_results)" |
|
|
303 |
] |
|
|
304 |
}, |
|
|
305 |
{ |
|
|
306 |
"cell_type": "markdown", |
|
|
307 |
"id": "5455be3c", |
|
|
308 |
"metadata": {}, |
|
|
309 |
"source": [ |
|
|
310 |
"### Fit and Test the Model\n", |
|
|
311 |
"\n", |
|
|
312 |
"We can pass the trained quantum kernel to a machine learning model, then fit the model and test on new data. Here, we will use Qiskit's `QSVC` for classification." |
|
|
313 |
] |
|
|
314 |
}, |
|
|
315 |
{ |
|
|
316 |
"cell_type": "code", |
|
|
317 |
"execution_count": 6, |
|
|
318 |
"id": "e716655f", |
|
|
319 |
"metadata": {}, |
|
|
320 |
"outputs": [ |
|
|
321 |
{ |
|
|
322 |
"name": "stdout", |
|
|
323 |
"output_type": "stream", |
|
|
324 |
"text": [ |
|
|
325 |
"accuracy test: 0.9\n" |
|
|
326 |
] |
|
|
327 |
} |
|
|
328 |
], |
|
|
329 |
"source": [ |
|
|
330 |
"# Use QSVC for classification\n", |
|
|
331 |
"qsvc = QSVC(quantum_kernel=optimized_kernel)\n", |
|
|
332 |
"\n", |
|
|
333 |
"# Fit the QSVC\n", |
|
|
334 |
"qsvc.fit(X_train, y_train)\n", |
|
|
335 |
"\n", |
|
|
336 |
"# Predict the labels\n", |
|
|
337 |
"labels_test = qsvc.predict(X_test)\n", |
|
|
338 |
"\n", |
|
|
339 |
"# Evalaute the test accuracy\n", |
|
|
340 |
"accuracy_test = metrics.balanced_accuracy_score(y_true=y_test, y_pred=labels_test)\n", |
|
|
341 |
"print(f\"accuracy test: {accuracy_test}\")" |
|
|
342 |
] |
|
|
343 |
}, |
|
|
344 |
{ |
|
|
345 |
"cell_type": "markdown", |
|
|
346 |
"id": "9cd4cbf2", |
|
|
347 |
"metadata": {}, |
|
|
348 |
"source": [ |
|
|
349 |
"### Visualize the Kernel Training Process\n", |
|
|
350 |
"\n", |
|
|
351 |
"From the callback data, we can plot how the loss evolves during the training process. We see it converges rapidly and reaches high test accuracy on this dataset with our choice of inputs.\n", |
|
|
352 |
"\n", |
|
|
353 |
"We can also display the final kernel matrix, which is a measure of similarity between the training samples." |
|
|
354 |
] |
|
|
355 |
}, |
|
|
356 |
{ |
|
|
357 |
"cell_type": "code", |
|
|
358 |
"execution_count": 7, |
|
|
359 |
"id": "0cb85c46", |
|
|
360 |
"metadata": {}, |
|
|
361 |
"outputs": [ |
|
|
362 |
{ |
|
|
363 |
"data": { |
|
|
364 |
"image/png": "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fTVr1qxEv4+IiFBERISWLFmi3r17a9q0aXJx5tEBACTJ1dVV8+fPV7169fT777+rTZs22rhxo/I48y4UAAAAACyQap2g3377TTabTQ0bNrxr2ey/v+Lw9fXVH3/8oe+//1579uxR5cqVJUkzZ8781+svXbq0mjdvfl/Xfe+99xyNsxo1aigwMFBhYWEKDAxUjRo1HDW+//77/7pOAMju8ubNq2XLlqlo0aLatWuXunTpori4OKvLAgAAAIAkpVrz7Pz585KkChUqJPp9fHy81qxZI5vNptdee0158+aVJHl7e+vVV1+V3W7Xli1b7mudw4YN07Jly3T27FkdP35c06ZNu+cxDh48qE8//VSSVKtWLW3atEmdO3dW7dq11blzZ23cuFG1/p53OW7cOB12Zl41ACBFZcqU0dKlS+Xp6ally5bp7bfftrokAAAAAEhSqjXPLl68KEnKmTPxPus7d+5UVFSUJKlVq1aJllWtWlWSdPLkyfta58iRI9W6det/tfvmxIkTFRsbK0n64osv7qo/V65cjhMbxMbGasKECfe9LgDA/3vsscf09ddfS/rrWGjTp0+3uCIAQGaxbds2jRo1Ss2bN5ePj488PDyUJ08e+fr6qmfPntq4ceM9jbdixQq1b9/eMZaPj4/at2+vFStWpNEtAABkJqnWPEs4zllCEy3Bzz//LEny8fFRmTJlEi1LmIVm1e46drtdS5culSRVqlRJjz/+eJK5xx9/XBUrVpQkLV261HHSAwDAv/Pcc8/pww8/lPTX2ThXr15tcUUAgIzuySefVO3atTV8+HD973//U0REhGJiYnT9+nUdOnRIAQEBatCggbp3766YmJgUx4qPj1fv3r3VsmVLLVmyxDFWwnGPW7ZsqT59+ij+Xo4qDQDIclKteZbQGPvll18S/X7ZsmWy2Wx68skn77rO5b9PsVC4cOHUKuOeHDt2TKdPn5akJI/VdqeE5REREQoPD0/r0gAg23jvvffUtWtXxcXFqWPHjtq3b5/VJQEAMrCE9+8lSpTQwIEDFRQUpLCwMG3ZskXjx49XyZIlJUlz585Vjx49UhyLYx8DAJyRas2zxo0by26364svvnB88Pnhhx+0fv16SVLLli3vus6ePXskScWLF0+tMu7J3r17HZcrVaqUYvbO5XywA4DUY7PZNHPmTNWrV0+RkZFq3br1XbOYAQBIUKlSJS1YsEAnTpzQxIkT1aFDB9WuXVuPP/643njjDe3cuVO+vr6SpMDAQMeeMP/EsY8BAM5KtebZa6+9Jnd3d50/f15Vq1ZVoUKF1L59e9ntdpUsWVIdOnS46zqrVq2SzWZTtWrVUquMe3Lq1CnHZR8fnxSzpUqVclxO6Rht0dHRioqKSvQDAEiZh4eHFi9erPLly+vo0aNq3769oqOjrS4LAJABhYSE6LnnnpOrq2uSywsVKqTPPvvM8f+goKAkcxz7GADgLLfUGujBBx/UN998o5deeknXr1937JKZL18+BQYGyt3dPVH+7Nmz+t///idJatKkSWqVcU+uXr3quJwnT54Us7lz53ZcvnbtWrK50aNHa+TIkf++OADIZgoXLqyQkBA98cQT2rhxo/r06aOvv/5aNpvN6tIAAJlM48aNHZePHDly1/J7PfbxgQMHtHTpUk2ePPmeX5cKF5bcUvjU5cw5CdasMWeKFDFnnnvOnHnzTXNm1ChzRpImTzZn/j6HXIq2bDFnChQwZ+bONWf+3is4Rc7MjyhUKHUydeuaM+XLmzO9epkzIWXNx/Zu3ca57f/nn81jNR7W3pj5exJpigzzYCRJznwnGxFhznz0kTnz+uvmTN++5swnn5gzxYqZM6tWmTN/7zBodOZWfmNmXuk/jZmyZc3rev+7ysZMr4PmvQJdUpgydvWq9OCD5lqkVJx5JkmdOnXSkSNHNGvWLH388ceaPXu2Dh8+rHr16t2V3b17t7p06aJu3boluUtnerh165bj8j+be/+UcEIESbp582ayuaFDhyoyMtLxc79nEgWA7Khy5coKCgqSq6urvvnmG/33v/+1uiQAQCZ05+zlpGaocexjAMC9SLWZZwmKFCminj17GnPNmzdX8+bNU3v198TT09Nx2XQmnjtfgP85pftOHh4eiRptAIB707RpU3355Zfq37+/3n//fT344IN6zpmvygEA+NuGDRsclytXvnv2wr859nG5cuVSoUIAQGaSqjPPMpu8efM6Lqe0K6YkXb9+3XHZtIsnAODf6devn9544w1JUvfu3fXLL78oLi5O69evV2BgoNavX6+4uDiLqwQAZETx8fEaM2aM4/9JfQGTFsc+BgBkXak+8+xO586d0549exzHPytQoICqVq2qokWLpuVqnXbnC+WdL6BJufOF8s4XUABA2hg3bpwOHTqkkJAQtWjRQrly5dKZM2ccy318fDRp0iT5+flZWCUAIKOZMGGCwsLCJEl+fn569NFH78qkxbGPo6OjE+2twonDACDrSPXmmd1u1/Tp0zV58uRE06HvVKVKFb322mvq06ePpQeCrlKliuPy/v37U8zeuTypqd8AgNTl6uqqefPm6eGHH9bx48cVGRmZaHlERIQ6duyooKAgGmgAAEl/7a45ZMgQSX8dTmbKlClJ5tLi2MecOAwAsq5U3W3zzz//1JNPPqmXX35Ze/fuld1uT/Jn7969GjBggJ588klduXIlNUu4J+XKlVOJEiUkJT4uQlJ+/vlnSVLJkiVV1plTQwAA/rVcuXIle0xKu/2vszgNGjSIXTgBAPrjjz/Uvn17xcbGytPTU4sWLVKRZE5BmRbHPubEYQCQdaVa88xut6tt27batGmT7Ha7ChQooAEDBiggIEA//fSTfvrpJwUEBOjll19WwYIFZbfbtXnzZrVt2za1SrhnNpvNsf79+/dr69atSea2bt3qmHnWtm1bS2fLAUB2EhoammhXzX+y2+06efKkQkND07EqAEBGc+zYMTVv3lx//vmnXF1dNX/+fD355JPJ5tPi2MceHh7y8vJK9AMAyBpSrXk2b948bdy4UTabTS+88IKOHj2qL7/8Ut26dXOcWbNbt26aPHmyjh49qhdffFF2u10bN25UYGBgapVxzwYNGuQ4ffVrr71211Tsmzdv6rXXXpMkubm5adCgQeldIgBkWyk1zu4nBwDIek6fPq2mTZvq9OnTstlsmj17tvELeo59DAC4F6l2zLN58+ZJkho2bKhvvvkmxWyePHn09ddf68SJE9qwYYO+/fZb+fv73/M6N27cqMOHDzv+f/HiRcflw4cPKyAgIFG+R48ed43h6+urt956S2PGjNG2bdtUr149vfPOO3rggQd05MgRjR07Vjt27JAkvfXWW3rwwQfvuU4AwP0pXrx4quYAAFnLxYsX1axZMx09elSS9MUXX6hbt27G63HsYwDAvbDZEw4a8y8VL15c58+f16JFi5w+cHNwcLA6duyoYsWK6fTp0/e8zh49eujrr792Op/cTY2Pj1efPn00e/bsZK/bq1cvTZ8+XS4u9zZZLyoqSt7e3oqMjGTqNgDco7i4OJUtW1YRERFJPofbbDb5+Pjo2LFjjlnEAHCveL+WOUVGRqpJkyb67bffJEljxozRO++849R17Xa7fHx8dPr0aVWqVEn79u1LNlu5cmXt379fJUuW1MmTJ50+hEvCdvXMM5HKkSP57eqnn8xjPf20OfP33ZCiZs3MmV9+MWdu3DBnJMlwIlNJUq1a5sy335ozt7duN2Zc69x95tV/6tvXvK4lS8wZZ0622rq1OfPDD+bMokXmjDPnsti2zZz5+1DgRg2eNP+dvPmGuRWxYoV5XXec/yNZyRz+MJGzZ82Z4xvNxzKs8ax5huqOmebttd908/bavLkxou+/N2fmTThnDklSoULGyIOVzO/JQ0LMqzp/3pxp0NeJLzReeCHZRVG3bsn744+dev1Ptd02L1++LOmvg/A7KyGbcF2ruLi4aNasWVq+fLnatm2rEiVKyN3dXSVKlFDbtm31448/aubMmffcOAMA/Duurq6aNGmSJCX7YWXixIk0zgAgm7lx44ZatWrlaJy99957TjfOJI59DAC4N6nWDfL29pake5pBlnCMmvv9hi8gICDZM3om9WPSsmVLLVmyRBEREYqOjlZERISWLFmiZ5555r7qAwD8e35+fgoKClLJkiUT/d7d3V1BQUFOz3YGAGQNMTExat++vTZt2iRJGjhwoD766KN7HodjHwMAnJVqzbOqVatKkubMmeP0dRKyCdcFACApfn5+Cg8P17p16zR16lS5ubkpJiZGZcqUsbo0AEA68/f316pVqyRJTZo0Ua9evbRnz55kfw4ePJjkOAnHPpbkOPbxggULtG3bNi1YsED16tXTtr/3Y+PYxwCQvaXaCQM6duyo9evXa/HixRoxYoSGDx+e4rTmDz/8UN9//71sNps6deqUWmUAALIoV1dXNWrUSI0aNVJoaKi+++47TZ06VTNmzLC6NABAOgoODnZcXrt2rapVq5ZivkyZMgoPD09y2ccff6zz589r9uzZ2rFjhzp37nxXplevXvc1sw0AkHWk2syzPn36qGLFirLb7frwww/1yCOPaPz48dq0aZMOHTqkw4cPa9OmTRo/frweeeQRjRgxQpJUqVIl9enTJ7XKAABkA/3795f015meIyMjLa4GAJBZcexjAIAzUm3mWY4cObRixQo99dRTOnbsmP744w/HNOik2O12lS9fXj/++KPc3FKtDABANlCvXj1VrVpVe/bs0TfffKNXX33V6pIAAOnEmWMZ36uW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uCKkhpiYGPXt21d2u11vvPGGqlatanVJSGPXr193XL5165Zy5cqldevW6YUXXlD+/PmVM2dOPfnkk1q7dq0eeeQRSdLixYv1yy+/WFUyUklMTIzmzp2b7EGEz507p2+//VarV6+2oDqktzsPlpzSsV0kycPDw3H55s2baVYTYHIv2630/9su223q4znk33P28xX39b1p166dfv/9d/3+++8KCwtTYGCg2rdvr507d8rf318hISF3XYf72Fo0z5Bl/PHHH2rfvr1iY2Pl6empRYsWqUiRIlaXhVTw3//+V/v371fp0qU1fPhwq8tBOvD09Ez0/969eyc6mHyCnDlz6uOPP3b8f8GCBWleG9LO9evX1bRpU40ePVqXL1/W22+/rX379ik6OlqRkZFatWqV6tevr23btqldu3YaP3681SUjjd35XGA6s+qdxz7MmTNnmtUEmNzLdiv9/7bLdpv6eA75d+7l8xX39b3Jly+fqlatqqpVq6p27drq3LmzgoODNXfuXB09elRt27ZVQEBAoutwH1uL5hmyhGPHjql58+b6888/5erqqvnz5+vJJ5+0uiykgv3792v06NGSpC+++CLRFGRkXQmn6E7QvHnzZLNPPfWU42DMv/76a5rWhbQ1YsQIhYaGSpJmzZqlsWPHqlKlSnJ3d5eXl5eaNWumdevWqXHjxrLb7Xrrrbe0a9cui6tGWrrzucC028mdM1ad2VUOSCv3st1K/7/tst2mPp5D7t+9fr7ivk4dL774ojp16qT4+Hi9+uqric4uz31sLU4YgEzv9OnTatq0qU6fPi2bzabZs2erbdu2VpeFVDJhwgTFxMSofPnyunHjhubPn39XZs+ePY7La9eu1dmzZyVJbdq0odmWSXl4eKhw4cK6cOGCpMQHPf0nT09PFSpUSGfPnnXkkfnY7XbNnj1bkuTr66vu3bsnmXNzc9OHH36o+vXrKz4+XgEBAZowYUJ6lop0dOcBke88UHJS7jwgckrPGUBa8/T0VMGCBXXp0iXjdvvnn386PuSy3aY+nkPuz/18vuK+Tj1t27bVwoULdf36df3000+OEwdwH1uL5hkytYsXL6pZs2Y6evSopL9mJnXr1s3iqpCaEqYcHz16VP7+/sb8hx9+6Lh87NgxmmeZ2EMPPaT169dLkuO03MlJWJ4wAw2Zz7lz5xzfrtaoUSPF7J0HKk44KyuypipVqjgumx7rO5dXrlw5zWoCnFGlShWFhobq8OHDio2NTfb1ie02bfEccu/u9/MV93XqKVy4sOPy8ePHHZd9fX3l6uqquLg47mMLsNsmMq3IyEi1aNFCe/fulSSNGTNGr7zyisVVAUgtd+4akPAGLilRUVG6ePGiJKlkyZJpXhfSxp0fLGNjY1PM3r59O8nrIespV66cSpQoIemvg1an5Oeff5b01/NA2bJl07o0IEX169eX9NeuU9u3b082d+d2Xa9evTSvK7vhOeTe/JvPV9zXqSciIsJx+c5dLt3d3VWnTh1J0pYtW1I87lnCY+Dh4aFatWqlUaXZC80zZEo3btxQq1at9Ntvv0mS3nvvPb3zzjsWV4W0EBAQILvdnuLPnScRWLduneP3vBhnbh06dHBcXrx4cbK5xYsXO87K2KBBgzSvC2mjQIEC8vLykvTXG8KUGmh3vikvV65cmtcG69hsNseuQvv379fWrVuTzG3dutXxLXvbtm1ls9nSrUYgKe3atXNcnjNnTpKZ+Ph4zZ07V9JfBw9v3LhxepSWrfAc4rx/+/mK+zr1LFq0yHH54YcfTrQs4bklKipKwcHBSV7/1KlTjrOSP/XUU3cdSxj3yQ5kMtHR0fbmzZvbJdkl2QcOHGh1SbDY8OHDHdvDunXrrC4HqeiZZ56xS7K7uLjYV69efdfyM2fO2H18fOyS7O7u7vZTp05ZUCVSi7+/v+NvecSIEUlmLl++bK9SpYojt3LlynSuEv/GsWPHHI9d9+7dnbrOgQMH7K6urnZJ9lq1atlv3LiRaPmNGzfstWrVskuyu7m52Q8ePJgGlQP3rkGDBo7tcvPmzXct/+STTxx/D8OHD0//AjMhnkPSRmp9vuK+TtmcOXPsN2/eTDEz/v/au/fgGK8/juOfJYmQuERcQ5pE2pC6pUWpmErj0g6jKlGtoKEJZeho69IqRaYl9GZnXFoGoXVrzbiEtCNo3KUZt4prhKIGJcFIG8LK8/vDz440nk1CYpX3a8bM7p7vOc/3PGRjv3ue83zzjf3vISAgwLDZbAXas7OzjapVqxqSDD8/PyMrK6tAu81mM7p168ZnozJgMYz/f10P/EdERkbaq+zh4eGyWq0Ov7Fwc3NTUFDQw0oPTjBx4kTFxcVJur3yLCwszLkJodRkZGSodevWunLlitzd3fX++++rS5cuqlixotLS0hQfH2/fMHXq1KkaPXq0kzPGgzhy5IhatGih3NxcSbdv+hEdHa0GDRro+vXrSk1NldVq1enTpyXd/jb1zjereDRt27ZNmZmZ9udZWVkaNWqUpNuXqMXGxhaI79+//z3HGTNmjKZMmSLp9p54H330kQIDA3X8+HFNnTpVe/futcdNnjy5DGYClNzevXsVGhqqa9euydPTU5988olefvllXbt2TcuWLdOcOXMk3d7HaNeuXawOuQfeQx6O0vx8xbk25+/vr5ycHEVGRqpdu3YKDAyUp6encnJylJ6ersWLF2v79u2Sbp/jpKQkdezYsdA4s2fP1uDBgyVJgYGBGjt2rJo2baqzZ8/KarUqJSVFktS7d28tWbLk4U3wcefs6h1QUvp/Fb24f/z8/JydMsoYK88eb1u3bjVq165t+jNusViMcePGOTtNlJL169cbNWrUKPK9PTw83Lh06ZKz00URoqOjS/Q728ytW7eMd955x2HfmJgY49atWw9xdkDREhMTjSpVqpj+uw0KCjKOHTvm7DQfWbyHPByl+fmKc23Oz8+vWOe3fv36RnJyssOxxo8fb1gsFtMxunTpUuQqN5QMe54BAB5p7dq108GDBzVhwgQ1b95cVapUkbu7uwICAjRgwADt3r27wF1W8d/WsWNHHTlyRFOnTlVYWJhq1qwpV1dXVaxYUQEBAerVq5dWrVqlDRs2yMvLy9np4iEpV66c5s2bp6SkJHXv3l0+Pj5yc3OTj4+Punfvrp9//llz585VuXL81xaPlm7dumn//v364IMPFBQUpEqVKqlatWpq2bKlfRXO008/7ew0H3u8hzw8nGtz69at09dff62IiAg1a9ZMtWvXlouLiypXrqzAwEBFRkYqISFBR48eVadOnRyOFRcXp23btikqKkq+vr5yc3NTrVq11KlTJy1ZskRJSUlyd3d/SDN7MnDZJgAAAAAAAGDiySv3AgAAAAAAAMVE8QwAAAAAAAAwQfEMAAAAAAAAMEHxDAAAAAAAADBB8QwAAAAAAAAwQfEMAAAAAAAAMEHxDAAAAAAAADBB8QwAAAAAAAAwQfEMAAAAAAAAMEHxDAAAAAAAADBB8QwAUKb8/f1lsVjUv39/Z6cCAAAAACVG8QwA7sOmTZtksVhksVg0ceJEZ6cDAAAAACgjFM8AoJSdPHnSXlhbsGCBs9MpE2FhYbJYLAoLC3N2KgAAAABQplycnQAA4PF28uRJZ6cAAAAAAPeNlWcAAAAAAACACYpnAAAAAAAAgAmKZwBQiiwWiwICAuzPBwwYYN//rKgbDOzZs0eDBw9Ww4YN5enpKQ8PDzVs2FBDhgxRRkaG6TEXLFhgH/vkyZPKy8uT1WpVmzZtVKNGjULHvHHjhtasWaNhw4apVatW8vLykqurq7y9vdW6dWtNnDhRWVlZ9zxW//79ZbFYtHnzZknS5s2bC83P39+/QJ/i3m1zzZo16tmzp+rXr68KFSrI29tbL774oqZMmaK///672PPPz8/XnDlz1LZtW3l5ecnDw0PNmjXTpEmTlJub6zCH3bt3KyYmRkFBQfLw8JC7u7t8fX3VokULDR06VImJiTIMw+EYAAAAAB4v7HkGAE6Wn5+vkSNHymq1FirMZGRkKCMjQ3PnztXMmTM1aNAgh2NlZWWpR48e2rdvn2nMoEGDtHDhwkKvX7p0SWlpaUpLS9OMGTO0evVqhYaG3tecSuL69euKiorSypUrC+WTmpqq1NRUTZ8+XUlJSQoJCXE4Vm5urjp37qyNGzcWeD09PV3p6elKTEzUr7/+Kg8Pj0J9p02bppEjRyo/P7/A62fOnNGZM2e0Z88ezZo1Szk5OfL09Ly/yQIAAAD4z6F4BgClKD09XWfPntUrr7wiSfr888/VvXv3AjG1atUq8Py9997TrFmzJEkvvfSS+vfvrwYNGqhSpUr6/fffZbVadfDgQb377ruqU6eOXnvtNdPjx8TEKD09XW+//bbefPNN1alTR6dPn1aFChXsMTabTQ0aNFCPHj30wgsv6KmnnpKLi4tOnTqlDRs2aP78+crOzlaPHj104MCBAvlOmjRJI0eO1IABA7Rr1y61bNlSCQkJBXJwc3Mr0TmLjo62F86aN2+uESNGKDg4WJcuXdKyZcu0YMECnT17Vh06dND+/ftVr14907EGDhyo1NRURUdHq1evXvb5f/HFF9q5c6fS0tL0+eefKz4+vkC//fv32wtnAQEBGjZsmEJCQlS9enXl5OTo6NGjSklJ0erVq0s0NwAAAACPAQMAUGIpKSmGJEOSMWHChAJtf/zxh70tISHB4TjJycn22Llz594z5tq1a0Z4eLghyfDz8zNu3rxZoD0hIcE+hqNx7sjMzDTy8/NN2/fv3294enoakoxx48bdM6Z9+/aGJKN9+/YOj2UYhuHn52dIMqKjowu1rV271p53hw4djLy8vEIxc+bMscf06tWrUPu/5//DDz8Uirl+/brRpEkTQ5Lh7e1d6Bx++umnhiTDw8PDOH/+vOlcrly5Yty6davIOQMAAAB4fLDnGQA40ZQpUyRJkZGRiomJuWeMu7u7ZsyYIUk6deqUUlJSTMcLDw83HeeOwMBAWSwW0/amTZsqNjZWkrRq1SqHYz2omTNnSpJcXV2VkJBwz1VrAwcOVMeOHSVJK1as0Llz50zHi4iIUN++fQu9XqFCBQ0bNkySlJ2drUOHDhVoP3/+vCQpKChItWvXNh2/atWqKleOX50AAADAk4RPAADgJFevXtWmTZskST179nQYGxwcrBo1akiSdu7caRrXp0+fEudx+fJlHT9+XAcPHtSBAwd04MABVatWTZJ06NAh3bx5s8RjFofNZrPfeKBz587y9fU1jR04cKC9z51zdi+O5t+iRQv74xMnThRoq1u3rqTb801LSysydwAAAABPDvY8AwAn2bt3r31z+t69e6t3797F6ndnldS9NGvWrFhjpKena9q0afrll18cjpefn6/Lly8X2qetNJw4ccJ+98vWrVs7jL27/cCBA6ZxjRo1Mm2rXr26/XFOTk6Btt69eys+Pl55eXkKDQ3Vq6++qq5du6pdu3Zq3Lixw5V6AAAAAB5vrDwDACe5cOHCffW7U3C6Fy8vryL7z5s3T88//7wSEhIcFs7uuHbtWonyK65Lly7ZHxdVnKtTp849+/1bpUqVTNvuvtzy1q1bBdoaNWqkpUuXysvLSzabTWvXrtWQIUPUtGlT1apVS/369dPWrVsd5ggAAADg8cTKMwBwkrsLOLNnz1bbtm2L1c9Rgax8+fIO+x45ckSDBw+WzWZTrVq1NGrUKIWHh8vf31+VK1eWq6urJGn+/Pn2vdMMwyhWXg/iUVjZFRkZqY4dO+rHH3/UunXrtHXrVl28eFFZWVlatGiRFi1apOjoaM2fP599zwAAAIAnCMUzAHASb29v++NKlSqpSZMmZX7MBQsWyGazqXz58tq8ebPpZY6OVneVlrsvo/zrr78cxt69Qu7ufqWtatWqGjRokAYNGiRJOnz4sFavXq3p06fr7NmzWrhwoZ577jkNHz68zHIAAAAA8Gjhq3MAKGXFXUUVEhJij92+fXtZpmR38OBBSVLz5s0d7g+2a9cuh+OUxkqxBg0a2C+z/O233xzG3r2J/8MoMt4RHBysjz/+WKmpqfLw8JAk/fTTTw/t+AAAAACcj+IZAJQyd3d3++O8vDzTuJo1a6pNmzaSpCVLlujixYtlnpvNZpMk/fPPP6Yx586dU2JiosNx7szR0fyK4uLiovbt20uS1q9frzNnzpjGzp07194nLCzsvo95v3x9fRUUFCRJysrKeujHBwAAAOA8FM8AoJR5e3vLzc1NknT8+HGHsePGjZMkXb16VT179tSVK1dMY/Py8jRz5kxdv379vnN75plnJEnHjh3Tjh07CrXn5uYqKiqqyJsE1K1bV9LtO2Y+yJ5oQ4cOlSTduHFDMTExunnzZqGY+fPnKzk5WZIUERFhP3ZpWrVqlcNz/+eff+rIkSOSpICAgFI/PgAAAIBHF8UzAChlLi4uatWqlaTbhZ+lS5fq8OHDyszMVGZmZoH9xLp06WLfP2vLli0KDg5WXFycNm7cqH379mn79u1auHChYmNjVbduXQ0bNsy+eux+9OvXT5KUn5+vrl27avLkydqyZYvS0tL07bffKiQkRJs2bVJoaKjDce7c3ODChQv68MMPtXv3bvv8Tp06Vex8unbtqjfeeEOSlJycrDZt2mjx4sXavXu3NmzYoNjYWMXGxkq6vdfZN998cz/TLpLValW9evXUq1cvfffdd9q8ebP27dunlJQUffnllwoNDbUXFAcPHlwmOQAAAAB4NHHDAAAoA2PGjFG3bt2UnZ2tqKioAm0TJkzQxIkT7c+nTZum6tWr67PPPtP58+cLtP2bh4dHkXfUdKRVq1aKi4vThAkTdOXKFY0dO7ZQzIgRI9SkSROH+7C99dZbio+P14kTJ2S1WmW1Wu1tfn5+OnnyZLFz+v7772Wz2bRy5Urt2bNHffv2LRTj4+OjpKQk1atXr9jjllRubq6WL1+u5cuX37O9XLlyiouL0+uvv15mOQAAAAB49LDyDADKQNeuXbVx40Z1795dPj4+cnV1NY21WCwaP368MjIyNHr0aLVs2VLVq1dX+fLlVblyZT377LPq06ePFi5cqHPnzqlixYoPlNv48eOVlJSkzp07y8vLS25ubqpfv74iIiKUnJysr776qsgxPD09tWPHDg0fPlzBwcH2jf/vh7u7u1asWKHExERFRETIx8dHbm5u8vLyUuvWrRUfH6+jR48qJCTkvo9RlKVLl2rOnDmKiopSSEiI6tSpIxcXF3l6eqpx48YaMmSI9u7da7/MFgAAAMCTw2I8yGY1AAAAAAAAwGOMlWcAAAAAAACACYpnAAAAAAAAgAmKZwAAAAAAAIAJimcAAAAAAACACYpnAAAAAAAAgAmKZwAAAAAAAIAJimcAAAAAAACACYpnAAAAAAAAgAmKZwAAAAAAAIAJimcAAAAAAACACYpnAAAAAAAAgAmKZwAAAAAAAIAJimcAAAAAAACACYpnAAAAAAAAgAmKZwAAAAAAAICJ/wFZ0I7dxAq1HgAAAABJRU5ErkJggg==\n", |
|
|
365 |
"text/plain": [ |
|
|
366 |
"<Figure size 1400x500 with 2 Axes>" |
|
|
367 |
] |
|
|
368 |
}, |
|
|
369 |
"metadata": {}, |
|
|
370 |
"output_type": "display_data" |
|
|
371 |
} |
|
|
372 |
], |
|
|
373 |
"source": [ |
|
|
374 |
"plot_data = cb_qkt.get_callback_data() # callback data\n", |
|
|
375 |
"K = optimized_kernel.evaluate(X_train) # kernel matrix evaluated on the training samples\n", |
|
|
376 |
"\n", |
|
|
377 |
"plt.rcParams[\"font.size\"] = 20\n", |
|
|
378 |
"fig, ax = plt.subplots(1, 2, figsize=(14, 5))\n", |
|
|
379 |
"ax[0].plot([i + 1 for i in range(len(plot_data[0]))], np.array(plot_data[2]), c=\"k\", marker=\"o\")\n", |
|
|
380 |
"ax[0].set_xlabel(\"Iterations\")\n", |
|
|
381 |
"ax[0].set_ylabel(\"Loss\")\n", |
|
|
382 |
"ax[1].imshow(K, cmap=matplotlib.colormaps[\"bwr\"])\n", |
|
|
383 |
"fig.tight_layout()\n", |
|
|
384 |
"plt.show()" |
|
|
385 |
] |
|
|
386 |
}, |
|
|
387 |
{ |
|
|
388 |
"cell_type": "code", |
|
|
389 |
"execution_count": 8, |
|
|
390 |
"id": "aa6e50bc", |
|
|
391 |
"metadata": { |
|
|
392 |
"tags": [] |
|
|
393 |
}, |
|
|
394 |
"outputs": [ |
|
|
395 |
{ |
|
|
396 |
"data": { |
|
|
397 |
"text/html": [ |
|
|
398 |
"<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 08:28:50 2023 UTC</td></tr></table>" |
|
|
399 |
], |
|
|
400 |
"text/plain": [ |
|
|
401 |
"<IPython.core.display.HTML object>" |
|
|
402 |
] |
|
|
403 |
}, |
|
|
404 |
"metadata": {}, |
|
|
405 |
"output_type": "display_data" |
|
|
406 |
}, |
|
|
407 |
{ |
|
|
408 |
"data": { |
|
|
409 |
"text/html": [ |
|
|
410 |
"<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>" |
|
|
411 |
], |
|
|
412 |
"text/plain": [ |
|
|
413 |
"<IPython.core.display.HTML object>" |
|
|
414 |
] |
|
|
415 |
}, |
|
|
416 |
"metadata": {}, |
|
|
417 |
"output_type": "display_data" |
|
|
418 |
} |
|
|
419 |
], |
|
|
420 |
"source": [ |
|
|
421 |
"import qiskit.tools.jupyter\n", |
|
|
422 |
"\n", |
|
|
423 |
"%qiskit_version_table\n", |
|
|
424 |
"%qiskit_copyright" |
|
|
425 |
] |
|
|
426 |
} |
|
|
427 |
], |
|
|
428 |
"metadata": { |
|
|
429 |
"kernelspec": { |
|
|
430 |
"display_name": "Python 3 (ipykernel)", |
|
|
431 |
"language": "python", |
|
|
432 |
"name": "python3" |
|
|
433 |
}, |
|
|
434 |
"language_info": { |
|
|
435 |
"codemirror_mode": { |
|
|
436 |
"name": "ipython", |
|
|
437 |
"version": 3 |
|
|
438 |
}, |
|
|
439 |
"file_extension": ".py", |
|
|
440 |
"mimetype": "text/x-python", |
|
|
441 |
"name": "python", |
|
|
442 |
"nbconvert_exporter": "python", |
|
|
443 |
"pygments_lexer": "ipython3", |
|
|
444 |
"version": "3.10.8" |
|
|
445 |
}, |
|
|
446 |
"rise": { |
|
|
447 |
"height": "90%", |
|
|
448 |
"scroll": true, |
|
|
449 |
"start_slideshow_at": "beginning", |
|
|
450 |
"theme": "white", |
|
|
451 |
"transition": "zoom", |
|
|
452 |
"width": "90%" |
|
|
453 |
}, |
|
|
454 |
"widgets": { |
|
|
455 |
"application/vnd.jupyter.widget-state+json": { |
|
|
456 |
"state": { |
|
|
457 |
"0ddabc5f36a24b2db8e8c97db1ff9edb": { |
|
|
458 |
"model_module": "@jupyter-widgets/base", |
|
|
459 |
"model_module_version": "2.0.0", |
|
|
460 |
"model_name": "LayoutModel", |
|
|
461 |
"state": { |
|
|
462 |
"grid_template_areas": "\n \". . . . right \"\n ", |
|
|
463 |
"grid_template_columns": "20% 20% 20% 20% 20%", |
|
|
464 |
"width": "100%" |
|
|
465 |
} |
|
|
466 |
}, |
|
|
467 |
"152ce061bd5049b5be73c101946cd5db": { |
|
|
468 |
"model_module": "@jupyter-widgets/controls", |
|
|
469 |
"model_module_version": "2.0.0", |
|
|
470 |
"model_name": "HTMLModel", |
|
|
471 |
"state": { |
|
|
472 |
"layout": "IPY_MODEL_7d639f7226ee4436b745b2c22c788f80", |
|
|
473 |
"style": "IPY_MODEL_8f31f43955174b908554eb76859ff3cd", |
|
|
474 |
"value": "<p style='font-family: IBM Plex Sans, Arial, Helvetica, sans-serif; font-size: 20px; font-weight: medium;'>Circuit Properties</p>" |
|
|
475 |
} |
|
|
476 |
}, |
|
|
477 |
"1d515778942042e8bfb09161993956c8": { |
|
|
478 |
"model_module": "@jupyter-widgets/controls", |
|
|
479 |
"model_module_version": "2.0.0", |
|
|
480 |
"model_name": "HTMLStyleModel", |
|
|
481 |
"state": { |
|
|
482 |
"description_width": "", |
|
|
483 |
"font_size": null, |
|
|
484 |
"text_color": null |
|
|
485 |
} |
|
|
486 |
}, |
|
|
487 |
"2d6fd40fe43a4a0ba10ce0d399e56443": { |
|
|
488 |
"model_module": "@jupyter-widgets/base", |
|
|
489 |
"model_module_version": "2.0.0", |
|
|
490 |
"model_name": "LayoutModel", |
|
|
491 |
"state": { |
|
|
492 |
"width": "190px" |
|
|
493 |
} |
|
|
494 |
}, |
|
|
495 |
"31a3b56189fe4cfaa46478b8bcde8242": { |
|
|
496 |
"model_module": "@jupyter-widgets/controls", |
|
|
497 |
"model_module_version": "2.0.0", |
|
|
498 |
"model_name": "GridBoxModel", |
|
|
499 |
"state": { |
|
|
500 |
"children": [ |
|
|
501 |
"IPY_MODEL_7c86be1d272c437f9021f8c1f299dd5b" |
|
|
502 |
], |
|
|
503 |
"layout": "IPY_MODEL_0ddabc5f36a24b2db8e8c97db1ff9edb" |
|
|
504 |
} |
|
|
505 |
}, |
|
|
506 |
"31fea3fb86c64ec7a1e02aef942a33bd": { |
|
|
507 |
"model_module": "@jupyter-widgets/base", |
|
|
508 |
"model_module_version": "2.0.0", |
|
|
509 |
"model_name": "LayoutModel", |
|
|
510 |
"state": { |
|
|
511 |
"width": "70px" |
|
|
512 |
} |
|
|
513 |
}, |
|
|
514 |
"5c77f96cfdf341e9b4c74ea108c22214": { |
|
|
515 |
"model_module": "@jupyter-widgets/controls", |
|
|
516 |
"model_module_version": "2.0.0", |
|
|
517 |
"model_name": "HTMLModel", |
|
|
518 |
"state": { |
|
|
519 |
"layout": "IPY_MODEL_a493c91690414022a797a6fae7090f89", |
|
|
520 |
"style": "IPY_MODEL_76f92c0b32364f1582e3b304378c2e3b", |
|
|
521 |
"value": "<h5>Status</h5>" |
|
|
522 |
} |
|
|
523 |
}, |
|
|
524 |
"63226da20f7e49ccace2d7445f22578d": { |
|
|
525 |
"model_module": "@jupyter-widgets/controls", |
|
|
526 |
"model_module_version": "2.0.0", |
|
|
527 |
"model_name": "HTMLModel", |
|
|
528 |
"state": { |
|
|
529 |
"layout": "IPY_MODEL_69aca109df3742d0ac2143a2fc79d32e", |
|
|
530 |
"style": "IPY_MODEL_949ce409d1084f4a97a20b666338472d", |
|
|
531 |
"value": "<h5>Backend</h5>" |
|
|
532 |
} |
|
|
533 |
}, |
|
|
534 |
"67a2eb2582de4e258a3e03e630c63469": { |
|
|
535 |
"model_module": "@jupyter-widgets/base", |
|
|
536 |
"model_module_version": "2.0.0", |
|
|
537 |
"model_name": "LayoutModel", |
|
|
538 |
"state": { |
|
|
539 |
"grid_area": "right", |
|
|
540 |
"padding": "0px 0px 0px 0px", |
|
|
541 |
"width": "70px" |
|
|
542 |
} |
|
|
543 |
}, |
|
|
544 |
"69aca109df3742d0ac2143a2fc79d32e": { |
|
|
545 |
"model_module": "@jupyter-widgets/base", |
|
|
546 |
"model_module_version": "2.0.0", |
|
|
547 |
"model_name": "LayoutModel", |
|
|
548 |
"state": { |
|
|
549 |
"width": "145px" |
|
|
550 |
} |
|
|
551 |
}, |
|
|
552 |
"757939026786467585ff0bc99fb71a72": { |
|
|
553 |
"model_module": "@jupyter-widgets/controls", |
|
|
554 |
"model_module_version": "2.0.0", |
|
|
555 |
"model_name": "HBoxModel", |
|
|
556 |
"state": { |
|
|
557 |
"children": [ |
|
|
558 |
"IPY_MODEL_cf891045c4b34c79a31a5626dc2cfe89", |
|
|
559 |
"IPY_MODEL_63226da20f7e49ccace2d7445f22578d", |
|
|
560 |
"IPY_MODEL_5c77f96cfdf341e9b4c74ea108c22214", |
|
|
561 |
"IPY_MODEL_a32ed34b86994385be9d919ce4f460ac", |
|
|
562 |
"IPY_MODEL_d39061026fca4577aba22bc4af0c0096" |
|
|
563 |
], |
|
|
564 |
"layout": "IPY_MODEL_980951fe17714e65bfddab2a1859c2f0" |
|
|
565 |
} |
|
|
566 |
}, |
|
|
567 |
"76f92c0b32364f1582e3b304378c2e3b": { |
|
|
568 |
"model_module": "@jupyter-widgets/controls", |
|
|
569 |
"model_module_version": "2.0.0", |
|
|
570 |
"model_name": "HTMLStyleModel", |
|
|
571 |
"state": { |
|
|
572 |
"description_width": "", |
|
|
573 |
"font_size": null, |
|
|
574 |
"text_color": null |
|
|
575 |
} |
|
|
576 |
}, |
|
|
577 |
"7c86be1d272c437f9021f8c1f299dd5b": { |
|
|
578 |
"model_module": "@jupyter-widgets/controls", |
|
|
579 |
"model_module_version": "2.0.0", |
|
|
580 |
"model_name": "ButtonModel", |
|
|
581 |
"state": { |
|
|
582 |
"button_style": "primary", |
|
|
583 |
"description": "Clear", |
|
|
584 |
"layout": "IPY_MODEL_67a2eb2582de4e258a3e03e630c63469", |
|
|
585 |
"style": "IPY_MODEL_a4ddacc99bf94949a47bfa4d924bec87", |
|
|
586 |
"tooltip": null |
|
|
587 |
} |
|
|
588 |
}, |
|
|
589 |
"7d639f7226ee4436b745b2c22c788f80": { |
|
|
590 |
"model_module": "@jupyter-widgets/base", |
|
|
591 |
"model_module_version": "2.0.0", |
|
|
592 |
"model_name": "LayoutModel", |
|
|
593 |
"state": { |
|
|
594 |
"margin": "0px 0px 10px 0px" |
|
|
595 |
} |
|
|
596 |
}, |
|
|
597 |
"8f31f43955174b908554eb76859ff3cd": { |
|
|
598 |
"model_module": "@jupyter-widgets/controls", |
|
|
599 |
"model_module_version": "2.0.0", |
|
|
600 |
"model_name": "HTMLStyleModel", |
|
|
601 |
"state": { |
|
|
602 |
"description_width": "", |
|
|
603 |
"font_size": null, |
|
|
604 |
"text_color": null |
|
|
605 |
} |
|
|
606 |
}, |
|
|
607 |
"9415a17eaa8942a992456eaf6b510780": { |
|
|
608 |
"model_module": "@jupyter-widgets/controls", |
|
|
609 |
"model_module_version": "2.0.0", |
|
|
610 |
"model_name": "HTMLStyleModel", |
|
|
611 |
"state": { |
|
|
612 |
"description_width": "", |
|
|
613 |
"font_size": null, |
|
|
614 |
"text_color": null |
|
|
615 |
} |
|
|
616 |
}, |
|
|
617 |
"949ce409d1084f4a97a20b666338472d": { |
|
|
618 |
"model_module": "@jupyter-widgets/controls", |
|
|
619 |
"model_module_version": "2.0.0", |
|
|
620 |
"model_name": "HTMLStyleModel", |
|
|
621 |
"state": { |
|
|
622 |
"description_width": "", |
|
|
623 |
"font_size": null, |
|
|
624 |
"text_color": null |
|
|
625 |
} |
|
|
626 |
}, |
|
|
627 |
"980951fe17714e65bfddab2a1859c2f0": { |
|
|
628 |
"model_module": "@jupyter-widgets/base", |
|
|
629 |
"model_module_version": "2.0.0", |
|
|
630 |
"model_name": "LayoutModel", |
|
|
631 |
"state": { |
|
|
632 |
"margin": "0px 0px 0px 37px", |
|
|
633 |
"width": "600px" |
|
|
634 |
} |
|
|
635 |
}, |
|
|
636 |
"9ace0ccec278431e90d9980238c2dcc8": { |
|
|
637 |
"model_module": "@jupyter-widgets/controls", |
|
|
638 |
"model_module_version": "2.0.0", |
|
|
639 |
"model_name": "HTMLStyleModel", |
|
|
640 |
"state": { |
|
|
641 |
"description_width": "", |
|
|
642 |
"font_size": null, |
|
|
643 |
"text_color": null |
|
|
644 |
} |
|
|
645 |
}, |
|
|
646 |
"a32ed34b86994385be9d919ce4f460ac": { |
|
|
647 |
"model_module": "@jupyter-widgets/controls", |
|
|
648 |
"model_module_version": "2.0.0", |
|
|
649 |
"model_name": "HTMLModel", |
|
|
650 |
"state": { |
|
|
651 |
"layout": "IPY_MODEL_31fea3fb86c64ec7a1e02aef942a33bd", |
|
|
652 |
"style": "IPY_MODEL_9415a17eaa8942a992456eaf6b510780", |
|
|
653 |
"value": "<h5>Queue</h5>" |
|
|
654 |
} |
|
|
655 |
}, |
|
|
656 |
"a493c91690414022a797a6fae7090f89": { |
|
|
657 |
"model_module": "@jupyter-widgets/base", |
|
|
658 |
"model_module_version": "2.0.0", |
|
|
659 |
"model_name": "LayoutModel", |
|
|
660 |
"state": { |
|
|
661 |
"width": "95px" |
|
|
662 |
} |
|
|
663 |
}, |
|
|
664 |
"a4ddacc99bf94949a47bfa4d924bec87": { |
|
|
665 |
"model_module": "@jupyter-widgets/controls", |
|
|
666 |
"model_module_version": "2.0.0", |
|
|
667 |
"model_name": "ButtonStyleModel", |
|
|
668 |
"state": { |
|
|
669 |
"font_family": null, |
|
|
670 |
"font_size": null, |
|
|
671 |
"font_style": null, |
|
|
672 |
"font_variant": null, |
|
|
673 |
"font_weight": null, |
|
|
674 |
"text_color": null, |
|
|
675 |
"text_decoration": null |
|
|
676 |
} |
|
|
677 |
}, |
|
|
678 |
"cf891045c4b34c79a31a5626dc2cfe89": { |
|
|
679 |
"model_module": "@jupyter-widgets/controls", |
|
|
680 |
"model_module_version": "2.0.0", |
|
|
681 |
"model_name": "HTMLModel", |
|
|
682 |
"state": { |
|
|
683 |
"layout": "IPY_MODEL_2d6fd40fe43a4a0ba10ce0d399e56443", |
|
|
684 |
"style": "IPY_MODEL_1d515778942042e8bfb09161993956c8", |
|
|
685 |
"value": "<h5>Job ID</h5>" |
|
|
686 |
} |
|
|
687 |
}, |
|
|
688 |
"d39061026fca4577aba22bc4af0c0096": { |
|
|
689 |
"model_module": "@jupyter-widgets/controls", |
|
|
690 |
"model_module_version": "2.0.0", |
|
|
691 |
"model_name": "HTMLModel", |
|
|
692 |
"state": { |
|
|
693 |
"layout": "IPY_MODEL_feb276a2daac487da0330a9a9d0481fb", |
|
|
694 |
"style": "IPY_MODEL_9ace0ccec278431e90d9980238c2dcc8", |
|
|
695 |
"value": "<h5>Message</h5>" |
|
|
696 |
} |
|
|
697 |
}, |
|
|
698 |
"feb276a2daac487da0330a9a9d0481fb": { |
|
|
699 |
"model_module": "@jupyter-widgets/base", |
|
|
700 |
"model_module_version": "2.0.0", |
|
|
701 |
"model_name": "LayoutModel", |
|
|
702 |
"state": {} |
|
|
703 |
} |
|
|
704 |
}, |
|
|
705 |
"version_major": 2, |
|
|
706 |
"version_minor": 0 |
|
|
707 |
} |
|
|
708 |
} |
|
|
709 |
}, |
|
|
710 |
"nbformat": 4, |
|
|
711 |
"nbformat_minor": 5 |
|
|
712 |
} |