Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb

410 lines
55 KiB
Plaintext
Raw Normal View History

2022-06-25 10:11:35 +02:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Algorytm najszybszego spadku dla regresji wielomianowej\n",
"\n",
"Algorytm przyjmuje zbiór danych - x oraz y i próbuje wyzaczyć funkcję wilomianową, która najlepiej przewiduje wartości y na podstawie x. Wynikiem jest wyznaczenie współczynników wielomianu.\n",
"\n",
"### Importy"
]
},
{
"cell_type": "code",
2022-06-26 22:20:00 +02:00
"execution_count": 55,
2022-06-25 10:11:35 +02:00
"metadata": {},
"outputs": [],
"source": [
"from matplotlib import pyplot as plt\n",
"import numpy as np\n",
"import random"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Początkowe współczynniki\n",
"Tworzymy losowe początkowe współczynniki wielomianu - od nich algorytm rozpocznie dopasowanie. Oraz oryginalne współczynniki na podstawie których zostanie wyznaczony zbiór danych. Aby zmienić generowany zbiór danych należy zmienić tablicę coeffs."
]
},
{
"cell_type": "code",
2022-06-26 22:20:00 +02:00
"execution_count": 56,
2022-06-25 10:11:35 +02:00
"metadata": {},
2022-06-26 16:38:17 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2022-06-26 22:20:00 +02:00
"Stopień: 2\n",
"[1, 2, 3]\n"
2022-06-26 16:38:17 +02:00
]
}
],
2022-06-25 10:11:35 +02:00
"source": [
"rand_coeffs = (random.randrange(-10, 10), random.randrange(-10, 10), random.randrange(-10,10))\n",
2022-06-26 22:20:00 +02:00
"coeffs = []\n",
"#coeffs = [2, -5, 4] # a, b, c\n",
2022-06-26 16:38:17 +02:00
"#coeffs = [17, -8, 4] # a, b, c\n",
"\n",
2022-06-26 22:20:00 +02:00
"k = int(input(\"Podaj stopień wielomianu: \"))\n",
"print('Stopień: {}'.format(k))\n",
"\n",
"for i in range(k+1):\n",
" a = int(input('Podaj {} współczynnik wielomianu: '.format(i+1)))\n",
" coeffs.append(a)\n",
"\n",
"print(coeffs)"
2022-06-25 10:11:35 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Wyznaczenie wartości wielomianu\n",
"Funkcja na podstawie współczynników oraz x wyznacza wartość y wielomianu."
]
},
{
"cell_type": "code",
2022-06-26 22:20:00 +02:00
"execution_count": 57,
2022-06-25 10:11:35 +02:00
"metadata": {},
"outputs": [],
"source": [
2022-06-26 16:38:17 +02:00
"def eval_2nd_degree(coeffs, x, k):\n",
2022-06-26 22:20:00 +02:00
" y = 0\n",
2022-06-26 16:38:17 +02:00
"\n",
2022-06-26 22:20:00 +02:00
" for i in range(len(coeffs)):\n",
" a = coeffs[i]*x**(k-i)\n",
" y += a\n",
2022-06-25 10:11:35 +02:00
" return y\n",
2022-06-26 16:38:17 +02:00
"\n",
2022-06-26 22:20:00 +02:00
"#eval_2nd_degree(coeffs, 2, k)\n",
2022-06-25 10:11:35 +02:00
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Wartości wielomianu z szumem\n",
"Funkcja jest analogiczna do poprzedniej - wyznacza wartość wielomianu na podstawie wpółczynników oraz x, ale dodatkowo dodaje szum do wyjściowych wartości - funkcja zostanie użyta przy generowaniu danych."
]
},
{
"cell_type": "code",
2022-06-26 22:20:00 +02:00
"execution_count": 58,
2022-06-25 10:11:35 +02:00
"metadata": {},
"outputs": [],
"source": [
"def eval_2nd_degree_jitter(coeffs, x, j):\n",
2022-06-26 16:38:17 +02:00
" y = eval_2nd_degree(coeffs, x, k)\n",
2022-06-25 10:11:35 +02:00
" \n",
" interval_min = y-j\n",
" interval_max = y+j\n",
" \n",
" return random.uniform(interval_min, interval_max)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Wygenerowanie danych\n",
"Kod generuje zbiór danych. Na podstawie wartości x od -10 do 10 i losowych współczynników wielomianu generuje wartości y z szumem. Parametr j określa jak moco dane będą zaszumione"
]
},
{
"cell_type": "code",
2022-06-26 22:20:00 +02:00
"execution_count": 59,
2022-06-25 10:11:35 +02:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2022-06-26 22:20:00 +02:00
"[-3.97652539 5.12289902 0.81603889 -4.21468549 7.29999822 6.80214713\n",
" 5.12999406 -2.53404436 -5.49920761 8.378254 -7.46372758 9.86734656\n",
" 4.8149328 6.19203961 -6.38598843 6.71630077 1.01277528 9.94551208\n",
" 0.43640911 0.97816101 -1.16523849 2.44180092 -8.97602849 2.82340563\n",
" -7.02243684 -6.05657589 -6.7288575 1.22080707 8.1319712 -9.53796227\n",
" -2.7554347 -6.77738836 2.37331025 -6.13297674 9.17486304 2.5028872\n",
" 6.24318809 0.77218811 -9.98325959 -5.63262972 6.25902107 5.51014874\n",
" 6.1640148 4.72398673 -4.78847828 8.68457944 -9.88763602 6.27522868\n",
" -3.68361737 0.38206885 5.92106547 1.95099718 2.29306717 7.99642986\n",
" -1.45767721 -3.62004766 -9.65908783 2.18931831 -6.10757568 5.65887017\n",
" -3.93428386 -5.92527032 -5.28481895 1.2284518 -0.25110658 -5.26058855\n",
" -7.89031713 6.18149346 5.79201652 -8.15007796 0.68707937 5.4565716\n",
" 9.46307956 9.90004237 -9.24364221 4.70422637 -4.13537182 2.25176354\n",
" 4.15610024 -0.3163456 1.17286334 -2.64623937 -9.99866372 1.52434893\n",
" -8.11925897 0.39344416 -3.51950194 2.25860641 0.32732711 -6.46956416\n",
" -0.80515794 -4.11088739 -6.31912324 8.8255148 -4.82190706 -7.29749101\n",
" 0.65692064 9.14346455 -5.09824179 2.9668068 ]\n"
2022-06-25 10:11:35 +02:00
]
},
{
"data": {
2022-06-26 22:20:00 +02:00
"image/png": "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
2022-06-25 10:11:35 +02:00
"text/plain": [
"<Figure size 1440x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"hundred_xs=np.random.uniform(-10,10,100)\n",
"print(hundred_xs)\n",
"\n",
"j=50\n",
"x_y_pairs = []\n",
"for x in hundred_xs:\n",
" y = eval_2nd_degree_jitter(coeffs, x, j)\n",
" x_y_pairs.append((x,y))\n",
" \n",
"xs = []\n",
"ys = []\n",
"for a,b in x_y_pairs:\n",
" xs.append(a)\n",
" ys.append(b)\n",
" \n",
"plt.figure(figsize=(20,10))\n",
"plt.plot(xs, ys, 'g+')\n",
"plt.title('Original data')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Funkcja straty\n",
"Do określenia jak mocno przewidziane wartości y są różne zostanie użyta kwadratowa funkcja straty."
]
},
{
"cell_type": "code",
2022-06-26 22:20:00 +02:00
"execution_count": 60,
2022-06-25 10:11:35 +02:00
"metadata": {},
"outputs": [],
"source": [
"def loss_mse(ys, y_bar):\n",
2022-06-26 16:38:17 +02:00
" return sum((ys - y_bar)*(ys - y_bar)) / len(ys)"
2022-06-25 10:11:35 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Gradient\n",
"Funkcja przyjmuje współczynniki wielomianu, x, y oraz parametr prękości uczenia i wylicza za pomocą gradientu nowe wartości współczynników wielomianu."
]
},
{
"cell_type": "code",
2022-06-26 22:20:00 +02:00
"execution_count": 62,
2022-06-25 10:11:35 +02:00
"metadata": {},
"outputs": [],
"source": [
2022-06-26 16:38:17 +02:00
"def calc_gradient_2nd_poly_for_GD(coeffs, inputs_x, outputs_y, lr, k): \n",
2022-06-25 10:11:35 +02:00
" a_s = []\n",
" b_s = []\n",
" c_s = []\n",
" \n",
2022-06-26 16:38:17 +02:00
" y_bars = eval_2nd_degree(coeffs, inputs_x, k)\n",
2022-06-25 10:11:35 +02:00
"\n",
2022-06-26 16:38:17 +02:00
"\n",
" # tu zamiast 2 dodałem k i w potencial_b k-1, czy tylko to powinno byś zmiaenione?\n",
2022-06-25 10:11:35 +02:00
" for x,y,y_bar in list(zip(inputs_x, outputs_y, y_bars)): # take tuple of (x datapoint, actual y label, predicted y label)\n",
2022-06-26 16:38:17 +02:00
" x_squared = x**k \n",
2022-06-25 10:11:35 +02:00
" partial_a = x_squared * (y - y_bar)\n",
" a_s.append(partial_a)\n",
2022-06-26 16:38:17 +02:00
" partial_b = x**(k-1) * (y-y_bar)\n",
2022-06-25 10:11:35 +02:00
" b_s.append(partial_b)\n",
" partial_c = (y-y_bar)\n",
" c_s.append(partial_c)\n",
" \n",
" num = [i for i in y_bars]\n",
" n = len(num)\n",
" \n",
" gradient_a = (-2 / n) * sum(a_s)\n",
" gradient_b = (-2 / n) * sum(b_s)\n",
" gradient_c = (-2 / n) * sum(c_s)\n",
"\n",
"\n",
" a_new = coeffs[0] - lr * gradient_a\n",
" b_new = coeffs[1] - lr * gradient_b\n",
" c_new = coeffs[2] - lr * gradient_c\n",
" \n",
" new_model_coeffs = (a_new, b_new, c_new)\n",
" \n",
" #update with these new coeffs:\n",
2022-06-26 16:38:17 +02:00
" new_y_bar = eval_2nd_degree(new_model_coeffs, inputs_x, k)\n",
2022-06-25 10:11:35 +02:00
" \n",
" updated_model_loss = loss_mse(outputs_y, new_y_bar)\n",
2022-06-26 16:38:17 +02:00
" return updated_model_loss, new_model_coeffs, new_y_bar"
2022-06-25 10:11:35 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Minimalizacja\n",
"Funkcja powtarza proces wyznaczenia nowych współczynników wielomianu zadaną ilość razy - epoch."
]
},
{
"cell_type": "code",
2022-06-26 22:20:00 +02:00
"execution_count": 63,
2022-06-25 10:11:35 +02:00
"metadata": {},
"outputs": [],
"source": [
"def gradient_descent(epochs, lr):\n",
" losses = []\n",
" rand_coeffs_to_test = rand_coeffs\n",
" for i in range(epochs):\n",
2022-06-26 16:38:17 +02:00
" loss = calc_gradient_2nd_poly_for_GD(rand_coeffs_to_test, hundred_xs, ys, lr, k)\n",
2022-06-25 10:11:35 +02:00
" rand_coeffs_to_test = loss[1]\n",
" losses.append(loss[0])\n",
" #print(losses)\n",
" return loss[0], loss[1], loss[2], losses #(updated_model_loss, new_model_coeffs, new_y_bar, saved loss updates)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Uruchomienie\n",
"Wartości wyznaczonego wielomionu zostają wyświetlone na wykresie z porównaniem do zbioru danych."
]
},
{
"cell_type": "code",
2022-06-26 22:20:00 +02:00
"execution_count": 64,
2022-06-25 10:11:35 +02:00
"metadata": {},
"outputs": [
{
2022-06-26 22:20:00 +02:00
"ename": "TypeError",
"evalue": "'list' object is not callable",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32mc:\\DATA\\#Mike\\#Studia\\Magisterka\\Magisterka\\MATAM\\Matma_AI_cyber\\Projekt_2\\fixed\\algorytm.ipynb Cell 19'\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000017?line=0'>1</a>\u001b[0m GD \u001b[39m=\u001b[39m gradient_descent(\u001b[39m1500\u001b[39;49m, \u001b[39m0.0001\u001b[39;49m)\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000017?line=2'>3</a>\u001b[0m plt\u001b[39m.\u001b[39mfigure(figsize\u001b[39m=\u001b[39m(\u001b[39m20\u001b[39m,\u001b[39m10\u001b[39m))\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000017?line=3'>4</a>\u001b[0m plt\u001b[39m.\u001b[39mplot(xs, ys, \u001b[39m'\u001b[39m\u001b[39mg+\u001b[39m\u001b[39m'\u001b[39m, label \u001b[39m=\u001b[39m \u001b[39m'\u001b[39m\u001b[39moriginal\u001b[39m\u001b[39m'\u001b[39m)\n",
"\u001b[1;32mc:\\DATA\\#Mike\\#Studia\\Magisterka\\Magisterka\\MATAM\\Matma_AI_cyber\\Projekt_2\\fixed\\algorytm.ipynb Cell 17'\u001b[0m in \u001b[0;36mgradient_descent\u001b[1;34m(epochs, lr)\u001b[0m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000015?line=2'>3</a>\u001b[0m rand_coeffs_to_test \u001b[39m=\u001b[39m rand_coeffs\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000015?line=3'>4</a>\u001b[0m \u001b[39mfor\u001b[39;00m i \u001b[39min\u001b[39;00m \u001b[39mrange\u001b[39m(epochs):\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000015?line=4'>5</a>\u001b[0m loss \u001b[39m=\u001b[39m calc_gradient_2nd_poly_for_GD(rand_coeffs_to_test, hundred_xs, ys, lr, k)\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000015?line=5'>6</a>\u001b[0m rand_coeffs_to_test \u001b[39m=\u001b[39m loss[\u001b[39m1\u001b[39m]\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000015?line=6'>7</a>\u001b[0m losses\u001b[39m.\u001b[39mappend(loss[\u001b[39m0\u001b[39m])\n",
"\u001b[1;32mc:\\DATA\\#Mike\\#Studia\\Magisterka\\Magisterka\\MATAM\\Matma_AI_cyber\\Projekt_2\\fixed\\algorytm.ipynb Cell 15'\u001b[0m in \u001b[0;36mcalc_gradient_2nd_poly_for_GD\u001b[1;34m(coeffs, inputs_x, outputs_y, lr, k)\u001b[0m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000013?line=7'>8</a>\u001b[0m \u001b[39mglobals\u001b[39m()[\u001b[39m'\u001b[39m\u001b[39m%s\u001b[39;00m\u001b[39m_s\u001b[39m\u001b[39m'\u001b[39m \u001b[39m%\u001b[39m i] \u001b[39m=\u001b[39m []\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000013?line=9'>10</a>\u001b[0m y_bars \u001b[39m=\u001b[39m eval_2nd_degree(coeffs, inputs_x, k)\n\u001b[1;32m---> <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000013?line=12'>13</a>\u001b[0m \u001b[39mfor\u001b[39;00m x,y,y_bar \u001b[39min\u001b[39;00m \u001b[39mlist\u001b[39;49m(\u001b[39mzip\u001b[39;49m(inputs_x, outputs_y, y_bars)): \u001b[39m# take tuple of (x datapoint, actual y label, predicted y label)\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000013?line=13'>14</a>\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000013?line=14'>15</a>\u001b[0m \u001b[39m x_squared = x**k \u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000013?line=15'>16</a>\u001b[0m \u001b[39m partial_a = x_squared * (y - y_bar)\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000013?line=20'>21</a>\u001b[0m \u001b[39m c_s.append(partial_c)\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000013?line=21'>22</a>\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/DATA/%23Mike/%23Studia/Magisterka/Magisterka/MATAM/Matma_AI_cyber/Projekt_2/fixed/algorytm.ipynb#ch0000013?line=22'>23</a>\u001b[0m \u001b[39mfor\u001b[39;00m i \u001b[39min\u001b[39;00m \u001b[39mrange\u001b[39m(\u001b[39mlen\u001b[39m(coeffs)):\n",
"\u001b[1;31mTypeError\u001b[0m: 'list' object is not callable"
]
2022-06-25 10:11:35 +02:00
}
],
"source": [
"GD = gradient_descent(1500, 0.0001)\n",
"\n",
"plt.figure(figsize=(20,10))\n",
"plt.plot(xs, ys, 'g+', label = 'original')\n",
"plt.plot(xs, GD[2], 'b.', label = 'final_prediction')\n",
"plt.title('Original vs Final prediction after Gradient Descent')\n",
"plt.legend(loc=\"lower right\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Wyznaczone współczynniki wielomianu"
]
},
{
"cell_type": "code",
2022-06-26 22:20:00 +02:00
"execution_count": null,
2022-06-25 10:11:35 +02:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2022-06-26 16:38:17 +02:00
"Początkowe współczynniki (7, 5, -6)\n",
"Wyznaczone współczynniki (2.1546532016162714, -4.490001059494276, -5.122120484596819)\n",
2022-06-25 10:11:35 +02:00
"Oryginalne współczynniki [2, -5, 4]\n"
]
}
],
"source": [
"print(\"Początkowe współczynniki {}\".format(rand_coeffs))\n",
"print(\"Wyznaczone współczynniki {}\".format(GD[1]))\n",
"print(\"Oryginalne współczynniki {}\".format(coeffs))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Funkcja straty\n",
"Wykres przedstawia jak zmianiała się wartość funkcji straty w kolejnych krokach algorytmu."
]
},
{
"cell_type": "code",
2022-06-26 22:20:00 +02:00
"execution_count": null,
2022-06-25 10:11:35 +02:00
"metadata": {},
"outputs": [
{
"data": {
2022-06-26 16:38:17 +02:00
"image/png": "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
2022-06-25 10:11:35 +02:00
"text/plain": [
"<Figure size 1440x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(20,10))\n",
"plt.plot(GD[3], 'b-', label = 'loss')\n",
"plt.title('Loss over 1500 iterations')\n",
"plt.legend(loc=\"lower right\")\n",
"plt.xlabel('Iterations')\n",
"plt.ylabel('MSE')\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
2022-06-26 22:20:00 +02:00
"display_name": "Python 3.9.1 64-bit (system)",
2022-06-25 10:11:35 +02:00
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
2022-06-26 22:20:00 +02:00
"version": "3.9.1"
2022-06-25 10:11:35 +02:00
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
2022-06-26 22:20:00 +02:00
"hash": "a8ea2fdcb542f7ad5e541ceaa4e664e5167814f5e1f9d57a269097b55ff58c8d"
2022-06-25 10:11:35 +02:00
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}