Newer
Older
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<img width=\"800px\" src=\"../fidle/img/00-Fidle-header-01.svg\"></img>\n",
"# <!-- TITLE --> [POLR1] - Complexity Syndrome\n",
"<!-- DESC --> Illustration of the problem of complexity with the polynomial regression\n",
"<!-- AUTHOR : Jean-Luc Parouty (CNRS/SIMaP) -->\n",
" - Visualizing and understanding under and overfitting\n",
"## What we're going to do :\n",
"\n",
"We are looking for a polynomial function to approximate the observed series : \n",
"$ y = a_n\\cdot x^n + \\dots + a_i\\cdot x^i + \\dots + a_1\\cdot x + b $ \n",
"\n",
"\n",
"## Step 1 - Import and init"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>\n",
"\n",
"div.warn { \n",
" background-color: #fcf2f2;\n",
" border-color: #dFb5b4;\n",
" border-left: 5px solid #dfb5b4;\n",
" padding: 0.5em;\n",
" font-weight: bold;\n",
" font-size: 1.1em;;\n",
" }\n",
"\n",
"\n",
"\n",
"div.nota { \n",
" background-color: #DAFFDE;\n",
" border-left: 5px solid #92CC99;\n",
" padding: 0.5em;\n",
" }\n",
"\n",
"div.todo:before { content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1My44OTEyIiBoZWlnaHQ9IjE0My4zOTAyIiB2aWV3Qm94PSIwIDAgNTMuODkxMiAxNDMuMzkwMiI+PHRpdGxlPjAwLUJvYi10b2RvPC90aXRsZT48cGF0aCBkPSJNMjMuNDU2OCwxMTQuMzAxNmExLjgwNjMsMS44MDYzLDAsMSwxLDEuODE1NywxLjgyNEExLjgyMDksMS44MjA5LDAsMCwxLDIzLjQ1NjgsMTE0LjMwMTZabS0xMC42NjEyLDEuODIyQTEuODI3MiwxLjgyNzIsMCwxLDAsMTAuOTgsMTE0LjMsMS44MiwxLjgyLDAsMCwwLDEyLjc5NTYsMTE2LjEyMzZabS03LjcwNyw0LjU4NzR2LTVzLjQ4NjMtOS4xMjIzLDguMDIxNS0xMS45Njc1YTE5LjIwODIsMTkuMjA4MiwwLDAsMSw2LjA0ODYtMS4yNDU0LDE5LjE3NzgsMTkuMTc3OCwwLDAsMSw2LjA0ODcsMS4yNDc1YzcuNTM1MSwyLjgzNDcsOC4wMTc0LDExLjk2NzQsOC4wMTc0LDExLjk2NzR2NS4wMjM0bC4wMDQyLDcuNjgydjIuNGMuMDE2Ny4xOTkyLjAzMzYuMzkyMS4wMzM2LjU4NzEsMCwuMjEzOC0uMDE2OC40MTA5LS4wMzM2LjYzMzJ2LjA1ODdoLS4wMDg0YTguMzcxOSw4LjM3MTksMCwwLDEtNy4zNzM4LDcuNjU0N3MtLjk5NTMsMy42MzgtNi42OTMzLDMuNjM4LTYuNjkzNC0zLjYzOC02LjY5MzQtMy42MzhhOC4zNyw4LjM3LDAsMCwxLTcuMzcxNi03LjY1NDdINS4wODQzdi0uMDU4N2MtLjAxODktLjIyLS4wMjk0LS40MTk0LS4wMjk0LS42MzMyLDAtLjE5MjkuMDE2Ny0uMzgzNy4wMjk0LS41ODcxdi0yLjRtMTguMDkzNy00LjA0YTEuMTU2NSwxLjE1NjUsMCwxLDAtMi4zMTI2LDAsMS4xNTY0LDEuMTU2NCwwLDEsMCwyLjMxMjYsMFptNC4wODM0LDBhMS4xNTk1LDEuMTU5NSwwLDEsMC0xLjE2MzYsMS4xN0ExLjE3NSwxLjE3NSwwLDAsMCwyNy4yNjE0LDEyNC4zNzc5Wk05LjM3MzksMTE0LjYzNWMwLDMuMTA5MywyLjQxMzIsMy4zMSwyLjQxMzIsMy4zMWExMzMuOTI0MywxMzMuOTI0MywwLDAsMCwxNC43MzQ4LDBzMi40MTExLS4xOTI5LDIuNDExMS0zLjMxYTguMDc3Myw4LjA3NzMsMCwwLDAtMi40MTExLTUuNTUxOWMtNC41LTMuNTAzMy05LjkxMjYtMy41MDMzLTE0Ljc0MTEsMEE4LjA4NTEsOC4wODUxLDAsMCwwLDkuMzczOSwxMTQuNjM1WiIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxjaXJjbGUgY3g9IjMzLjE0MzYiIGN5PSIxMjQuNTM0IiByPSIzLjgzNjMiIHN0eWxlPSJmaWxsOiMwMTAxMDEiLz48cmVjdCB4PSIzNS42NjU5IiB5PSIxMTIuOTYyNSIgd2lkdGg9IjIuMDc3IiBoZWlnaHQ9IjEwLjU0NTgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxLjYgMjQxLjExMjEpIHJvdGF0ZSgtMTU1Ljc0NikiIHN0eWxlPSJmaWxsOiMwMTAxMDEiLz48Y2lyY2xlIGN4PSIzOC44NzA0IiBjeT0iMTEzLjQyNzkiIHI9IjIuNDA4NSIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxjaXJjbGUgY3g9IjUuMjI0OCIgY3k9IjEyNC41MzQiIHI9IjMuODM2MyIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxyZWN0IHg9IjEuNDE2NCIgeT0iMTI0LjYzMDEiIHdpZHRoPSIyLjA3NyIgaGVpZ2h0PSIxMC41NDU4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0LjkwOTcgMjU5LjgwNikgcm90YXRlKC0xODApIiBzdHlsZT0iZmlsbDojMDEwMTAxIi8+PGNpcmNsZSBjeD0iMi40MDkxIiBjeT0iMTM3LjA5OTYiIHI9IjIuNDA4NSIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxwYXRoIGQ9Ik0xOC4wNTExLDEwMC4xMDY2aC0uMDE0NlYxMDIuNjFoMi4zdi0yLjQyNzlhMi40MjI5LDIuNDIyOSwwLDEsMC0yLjI4NTQtLjA3NTVaIiBzdHlsZT0iZmlsbDojMDEwMTAxIi8+PHBhdGggZD0iTTM5LjQyMTQsMjcuMjU4djEuMDVBMTEuOTQ1MiwxMS45NDUyLDAsMCwwLDQ0LjU5NTQsNS43OWEuMjQ0OS4yNDQ5LDAsMCwxLS4wMjM1LS40MjI3TDQ2Ljc1LDMuOTUxNWEuMzg5Mi4zODkyLDAsMCwxLC40MjYyLDAsMTQuODQ0MiwxNC44NDQyLDAsMCwxLTcuNzU0MywyNy4yNTkxdjEuMDY3YS40NS40NSwwLDAsMS0uNzA0Ny4zNzU4bC0zLjg0MTktMi41MWEuNDUuNDUsMCwwLDEsMC0uNzUxNmwzLjg0MTktMi41MWEuNDUuNDUsMCwwLDEsLjY5NDYuMzc1OFpNNDMuMjMsMi41ODkyLDM5LjM4NzguMDc5NGEuNDUuNDUsMCwwLDAtLjcwNDYuMzc1OHYxLjA2N2ExNC44NDQyLDE0Ljg0NDIsMCwwLDAtNy43NTQzLDI3LjI1OTEuMzg5LjM4OSwwLDAsMCwuNDI2MSwwbDIuMTc3Ny0xLjQxOTNhLjI0NS4yNDUsMCwwLDAtLjAyMzUtLjQyMjgsMTEuOTQ1MSwxMS45NDUxLDAsMCwxLDUuMTc0LTIyLjUxNDZ2MS4wNWEuNDUuNDUsMCwwLDAsLjcwNDYuMzc1OGwzLjg1NTMtMi41MWEuNDUuNDUsMCwwLDAsMC0uNzUxNlpNMzkuMDUyMywxNC4yNDU4YTIuMTIwNiwyLjEyMDYsMCwxLDAsMi4xMjA2LDIuMTIwNmgwQTIuMTI0LDIuMTI0LDAsMCwwLDM5LjA1MjMsMTQuMjQ1OFptNi4wNzMyLTQuNzc4MS44MjU0LjgyNTVhMS4wNTY4LDEuMDU2OCwwLDAsMSwuMTE3NSwxLjM0MjFsLS44MDIsMS4xNDQyYTcuMTAxOCw3LjEwMTgsMCwwLDEsLjcxMTQsMS43MTEybDEuMzc1Ny4yNDE2YTEuMDU2OSwxLjA1NjksMCwwLDEsLjg3NTcsMS4wNHYxLjE2NDNhMS4wNTY5LDEuMDU2OSwwLDAsMS0uODc1NywxLjA0bC0xLjM3MjQuMjQxNkE3LjExLDcuMTEsMCwwLDEsNDUuMjcsMTkuOTNsLjgwMTksMS4xNDQyYTEuMDU3LDEuMDU3LDAsMCwxLS4xMTc0LDEuMzQyMmwtLjgyODguODQ4OWExLjA1NywxLjA1NywwLDAsMS0xLjM0MjEuMTE3NGwtMS4xNDQyLS44MDE5YTcuMTMzOCw3LjEzMzgsMCwwLDEtMS43MTEzLjcxMTNsLS4yNDE2LDEuMzcyNGExLjA1NjgsMS4wNTY4LDAsMCwxLTEuMDQuODc1N0gzOC40Njg0YTEuMDU2OCwxLjA1NjgsMCwwLDEtMS4wNC0uODc1N2wtLjI0MTYtMS4zNzI0YTcuMTM1NSw3LjEzNTUsMCwwLDEtMS43MTEzLS43MTEzbC0xLjE0NDEuODAxOWExLjA1NzEsMS4wNTcxLDAsMCwxLTEuMzQyMi0uMTE3NGwtLjgzNTUtLjgyNTVhMS4wNTcsMS4wNTcsMCwwLDEtLjExNzQtMS4zNDIxbC44MDE5LTEuMTQ0MmE3LjEyMSw3LjEyMSwwLDAsMS0uNzExMy0xLjcxMTJsLTEuMzcyNC0uMjQxNmExLjA1NjksMS4wNTY5LDAsMCwxLS44NzU3LTEuMDRWMTUuNzgyNmExLjA1NjksMS4wNTY5LDAsMCwxLC44NzU3LTEuMDRsMS4zNzU3LS4yNDE2YTcuMTEsNy4xMSwwLDAsMSwuNzExNC0xLjcxMTJsLS44MDItMS4xNDQyYTEuMDU3LDEuMDU3LDAsMCwxLC4xMTc1LTEuMzQyMmwuODI1NC0uODI1NEExLjA1NjgsMS4wNTY4LDAsMCwxLDM0LjMyNDUsOS4zNmwxLjE0NDIuODAxOUE3LjEzNTUsNy4xMzU1LDAsMCwxLDM3LjE4LDkuNDUxbC4yNDE2LTEuMzcyNGExLjA1NjgsMS4wNTY4LDAsMCwxLDEuMDQtLjg3NTdoMS4xNjc3YTEuMDU2OSwxLjA1NjksMCwwLDEsMS4wNC44NzU3bC4yNDE2LDEuMzcyNGE3LjEyNSw3LjEyNSwwLDAsMSwxLjcxMTIuNzExM0w0My43NjY2LDkuMzZBMS4wNTY5LDEuMDU2OSwwLDAsMSw0NS4xMjU1LDkuNDY3N1ptLTIuMDMsNi44OTg3QTQuMDQzMyw0LjA0MzMsMCwxLDAsMzkuMDUyMywyMC40MWgwQTQuMDQ2NSw0LjA0NjUsMCwwLDAsNDMuMDk1NSwxNi4zNjY0WiIgc3R5bGU9ImZpbGw6I2UxMjIyOSIvPjxwb2x5Z29uIHBvaW50cz0iMzkuNDEzIDM0Ljc1NyAzOS41MzcgMzQuNzU3IDM5LjY3NSAzNC43NTcgMzkuNjc1IDEwOS41MSAzOS41MzcgMTA5LjUxIDM5LjQxMyAxMDkuNTEgMzkuNDEzIDM0Ljc1NyAzOS40MTMgMzQuNzU3IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojOTk5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjMwODg1NDQ1MDU2MDE2MThweDtmaWxsLXJ1bGU6ZXZlbm9kZCIvPjwvc3ZnPg==);\n",
" float:left;\n",
" margin-right:20px;\n",
" margin-top:-20px;\n",
" margin-bottom:20px;\n",
"}\n",
"div.todo{\n",
" font-weight: bold;\n",
" font-size: 1.1em;\n",
" margin-top:40px;\n",
"}\n",
"div.todo ul{\n",
" margin: 0.2em;\n",
"}\n",
"div.todo li{\n",
" margin-left:60px;\n",
" margin-top:0;\n",
" margin-bottom:0;\n",
"}\n",
"div .comment{\n",
" font-size:0.8em;\n",
" color:#696969;\n",
"}\n",
"\n",
"\n",
"\n",
"</style>\n",
"\n"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**FIDLE 2020 - Practical Work Module**"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Version : 0.6.1 DEV\n",
"Notebook id : POLR1\n",
"Run time : Wednesday 16 December 2020, 17:48:01\n",
"TensorFlow version : 2.0.0\n",
"Keras version : 2.2.4-tf\n",
"Datasets dir : ~/datasets/fidle\n",
"Update keras cache : False\n",
"Save figs : True\n",
"Path figs : ./run/figs\n"
]
}
],
"source": [
"import numpy as np\n",
"import math\n",
"import random\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"import sys\n",
"\n",
"sys.path.append('..')\n",
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 2 - Dataset generation"
{
"data": {
"text/markdown": [
"#### Generator :"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nomber of points=100 deg=7 bruit=2000\n"
]
},
{
"data": {
"text/markdown": [
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 points visibles sur 100)\n"
"text/html": [
"<div class=\"comment\">Saved: ./run/figs/POLR1-01-dataset</div>"
],
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
"#### Before normalization :"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"X : mean= +0.3946 std= +2.7857 min= -4.7119 max= +4.9613\n",
"Y : mean= +944.8316 std= +2687.1875 min= -4221.2450 max= +11553.9320\n"
"text/markdown": [
"#### After normalization :"
],
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"X_norm : mean= -0.0000 std= +1.0000 min= -1.8331 max= +1.6393\n",
"Y_norm : mean= +0.0000 std= +1.0000 min= -1.9225 max= +3.9480\n"
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
]
}
],
"source": [
"# ---- Parameters\n",
"\n",
"n = 100\n",
"\n",
"xob_min = -5\n",
"xob_max = 5\n",
"\n",
"deg = 7\n",
"a_min = -2\n",
"a_max = 2\n",
"\n",
"noise = 2000\n",
"\n",
"# ---- Train data\n",
"# X,Y : data\n",
"# X_norm,Y_norm : normalized data\n",
"\n",
"X = np.random.uniform(xob_min,xob_max,(n,1))\n",
"# N = np.random.uniform(-noise,noise,(n,1))\n",
"N = noise * np.random.normal(0,1,(n,1))\n",
"\n",
"a = np.random.uniform(a_min,a_max, (deg,))\n",
"fy = np.poly1d( a )\n",
"\n",
"Y = fy(X) + N\n",
"\n",
"# ---- Data normalization\n",
"#\n",
"X_norm = (X - X.mean(axis=0)) / X.std(axis=0)\n",
"Y_norm = (Y - Y.mean(axis=0)) / Y.std(axis=0)\n",
"\n",
"# ---- Data visualization\n",
"\n",
"width = 12\n",
"height = 6\n",
"nb_viz = min(2000,n)\n",
"\n",
"def vector_infos(name,V):\n",
" m=V.mean(axis=0).item()\n",
" s=V.std(axis=0).item()\n",
" print(\"{:8} : mean={:+12.4f} std={:+12.4f} min={:+12.4f} max={:+12.4f}\".format(name,m,s,V.min(),V.max()))\n",
"\n",
"\n",
"pwk.display_md('#### Generator :')\n",
"print(f\"Nomber of points={n} deg={deg} bruit={noise}\")\n",
"pwk.display_md('#### Datasets :')\n",
"print(f\"{nb_viz} points visibles sur {n})\")\n",
"plt.figure(figsize=(width, height))\n",
"plt.plot(X[:nb_viz], Y[:nb_viz], '.')\n",
"plt.tick_params(axis='both', which='both', bottom=False, left=False, labelbottom=False, labelleft=False)\n",
"plt.xlabel('x axis')\n",
"plt.ylabel('y axis')\n",
"pwk.save_fig(\"01-dataset\")\n",
"\n",
"pwk.display_md('#### Before normalization :')\n",
"vector_infos('X',X)\n",
"vector_infos('Y',Y)\n",
"\n",
"pwk.display_md('#### After normalization :') \n",
"vector_infos('X_norm',X_norm)\n",
"vector_infos('Y_norm',Y_norm)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 3 - Polynomial regression with NumPy\n",
"### 3.1 - Underfitting"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": [
"def draw_reg(X_norm, Y_norm, x_hat,fy_hat, size, save_as):\n",
" plt.figure(figsize=size)\n",
" plt.plot(X_norm, Y_norm, '.')\n",
"\n",
" x_hat = np.linspace(X_norm.min(), X_norm.max(), 100)\n",
"\n",
" plt.plot(x_hat, fy_hat(x_hat))\n",
" plt.tick_params(axis='both', which='both', bottom=False, left=False, labelbottom=False, labelleft=False)\n",
" plt.xlabel('x axis')\n",
" plt.ylabel('y axis')\n",
" pwk.save_fig(save_as)\n",
" plt.show()"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"text/html": [
"<div class=\"comment\">Saved: ./run/figs/POLR1-02-underfitting</div>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"reg_deg=1\n",
"\n",
"a_hat = np.polyfit(X_norm.reshape(-1,), Y_norm.reshape(-1,), reg_deg)\n",
"fy_hat = np.poly1d( a_hat )\n",
"\n",
"print(f'Nombre de degrés : {reg_deg}')\n",
"draw_reg(X_norm[:nb_viz],Y_norm[:nb_viz], X_norm,fy_hat, (width,height), save_as='02-underfitting')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3.2 - Good fitting"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"text/html": [
"<div class=\"comment\">Saved: ./run/figs/POLR1-03-good_fitting</div>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"reg_deg=5\n",
"\n",
"a_hat = np.polyfit(X_norm.reshape(-1,), Y_norm.reshape(-1,), reg_deg)\n",
"fy_hat = np.poly1d( a_hat )\n",
"\n",
"print(f'Nombre de degrés : {reg_deg}')\n",
"draw_reg(X_norm[:nb_viz],Y_norm[:nb_viz], X_norm,fy_hat, (width,height), save_as='03-good_fitting')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3.3 - Overfitting"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"text/html": [
"<div class=\"comment\">Saved: ./run/figs/POLR1-04-over_fitting</div>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"reg_deg=24\n",
"\n",
"a_hat = np.polyfit(X_norm.reshape(-1,), Y_norm.reshape(-1,), reg_deg)\n",
"fy_hat = np.poly1d( a_hat )\n",
"\n",
"print(f'Nombre de degrés : {reg_deg}')\n",
"draw_reg(X_norm[:nb_viz],Y_norm[:nb_viz], X_norm,fy_hat, (width,height), save_as='04-over_fitting')"
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"End time is : Wednesday 16 December 2020, 17:48:03\n",
"Duration is : 00:00:01 491ms\n",
"This notebook ends here\n"
]
}
],
"source": [
"pwk.end()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"<img width=\"80px\" src=\"../fidle/img/00-Fidle-logo-01.svg\"></img>"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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",
}
},
"nbformat": 4,
"nbformat_minor": 4
}