Skip to content

Instantly share code, notes, and snippets.

@szagoruyko
Created November 20, 2018 17:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save szagoruyko/f09bc75cdbbfde1e923e1f1f2ea8c1ab to your computer and use it in GitHub Desktop.
Save szagoruyko/f09bc75cdbbfde1e923e1f1f2ea8c1ab to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"JupyterLab\n",
"==========\n",
"\n",
"Sergey Zagoruyko @ WILLOW"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next iteration of Jupyter, ready to use!\n",
"\n",
"My experience for keeping track of experiments:\n",
" * Jupyter since 2015 (3 years+)\n",
" * JupyterLab since 2018 (about 1 year)\n",
"\n",
"The most powerful feature:\n",
" * **Extensions**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Install\n",
"\n",
"a bit messy but installs nodejs:\n",
"\n",
"```bash\n",
"conda install -c conda-forge jupyterlab\n",
"```\n",
"\n",
"otherwise:\n",
"\n",
"```bash\n",
"pip install jupyterlab\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Vim mode\n",
"\n",
"Text editing (e.g. python code or yaml files) supports by default Sublime, Emacs and Vim.\n",
"\n",
"To edit Jupyter cells there is Vim extension: <https://github.com/jwkvam/jupyterlab-vim>\n",
" \n",
"Install with:\n",
"\n",
"```\n",
"jupyter labextension install jupyterlab_vim\n",
"```\n",
"\n",
"<img src=https://user-images.githubusercontent.com/86304/38079432-b7596fd8-32f3-11e8-9ebd-4b9e7823f5f9.gif>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Kernels\n",
"\n",
"* IPyKernel\n",
"* IJulia\n",
"* IHaskell\n",
"* Matlab Kernel\n",
"* IOctave\n",
"\n",
"and others <https://github.com/jupyter/jupyter/wiki/Jupyter-kernels>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## UI improvements\n",
"\n",
"* Built-in terminals\n",
"* Moving cells\n",
"* Panes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Visual Studio Code integration\n",
"\n",
"Microsoft Python extension allows importing and editing jupyter files:\n",
"\n",
"<img src=https://msdnshared.blob.core.windows.net/media/2018/11/RunCells.gif>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Visualizations\n",
"\n",
"### Videos"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/ctOM-Gza04Y?rel=0&amp;controls=0&amp;showinfo=0\" frameborder=\"0\" allowfullscreen></iframe>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import HTML\n",
"\n",
"youtube_id = 'ctOM-Gza04Y'\n",
"\n",
"HTML(f'<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/{youtube_id}?rel=0&amp;controls=0&amp;showinfo=0\" frameborder=\"0\" allowfullscreen></iframe>')\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Pandas"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>dataroot</th>\n",
" <th>dataset</th>\n",
" <th>depth</th>\n",
" <th>nthread</th>\n",
" <th>save</th>\n",
" <th>seed</th>\n",
" <th>sphere-alpha-min</th>\n",
" <th>sphere-dim</th>\n",
" <th>sphere-m</th>\n",
" <th>width</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>/sequoia/data2/szagoruy/datasets/</td>\n",
" <td>CIFAR100</td>\n",
" <td>28</td>\n",
" <td>1</td>\n",
" <td>logs/resnet28-10_CIFAR100_resnet_sphereloss961...</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>/sequoia/data2/szagoruy/datasets/</td>\n",
" <td>CIFAR100</td>\n",
" <td>28</td>\n",
" <td>1</td>\n",
" <td>logs/resnet28-10_CIFAR100_resnet_sphereloss961...</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>16</td>\n",
" <td>4</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>/sequoia/data2/szagoruy/datasets/</td>\n",
" <td>CIFAR100</td>\n",
" <td>28</td>\n",
" <td>1</td>\n",
" <td>logs/resnet28-10_CIFAR100_resnet_sphereloss961...</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>32</td>\n",
" <td>4</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>/sequoia/data2/szagoruy/datasets/</td>\n",
" <td>CIFAR100</td>\n",
" <td>28</td>\n",
" <td>1</td>\n",
" <td>logs/resnet28-10_CIFAR100_resnet_sphereloss961...</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>64</td>\n",
" <td>4</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>/sequoia/data2/szagoruy/datasets/</td>\n",
" <td>CIFAR100</td>\n",
" <td>28</td>\n",
" <td>1</td>\n",
" <td>logs/resnet28-10_CIFAR100_resnet_sphereloss961...</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>128</td>\n",
" <td>4</td>\n",
" <td>10</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" dataroot dataset depth nthread \\\n",
"0 /sequoia/data2/szagoruy/datasets/ CIFAR100 28 1 \n",
"1 /sequoia/data2/szagoruy/datasets/ CIFAR100 28 1 \n",
"2 /sequoia/data2/szagoruy/datasets/ CIFAR100 28 1 \n",
"3 /sequoia/data2/szagoruy/datasets/ CIFAR100 28 1 \n",
"4 /sequoia/data2/szagoruy/datasets/ CIFAR100 28 1 \n",
"\n",
" save seed sphere-alpha-min \\\n",
"0 logs/resnet28-10_CIFAR100_resnet_sphereloss961... 1 0 \n",
"1 logs/resnet28-10_CIFAR100_resnet_sphereloss961... 1 0 \n",
"2 logs/resnet28-10_CIFAR100_resnet_sphereloss961... 1 0 \n",
"3 logs/resnet28-10_CIFAR100_resnet_sphereloss961... 1 0 \n",
"4 logs/resnet28-10_CIFAR100_resnet_sphereloss961... 1 0 \n",
"\n",
" sphere-dim sphere-m width \n",
"0 8 4 10 \n",
"1 16 4 10 \n",
"2 32 4 10 \n",
"3 64 4 10 \n",
"4 128 4 10 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"pd.read_json('/sequoia/data1/szagoruy/tmp/47179/exp_args.json')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Matplotlib"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline\n",
"%config InlineBackend.figure_format = 'retina'\n",
"import seaborn as sns\n",
"import torch\n",
"sns.set()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fde9c958e10>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"image/png": {
"height": 254,
"width": 258
}
},
"output_type": "display_data"
}
],
"source": [
"a = torch.rand(64, 64, 3)\n",
"plt.imshow(a)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB2sAAAOvCAYAAADiFS+wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3X+U1nWd9/HXNXMxwfBrUEZFb38RJGe29twq+COxdV1Tt5QCcm9vFYOz5XHdTnhnaqVrmstaVuyeYvtlpR68rdOGVLeJHNfIk7+ZpNITrVohuiopNIggMsNc9x8uGAsqgzN8uGYej39wruv7va73dfH9OMx5zvf6Vmq1Wi0AAAAAAAAA7FYNpQcAAAAAAAAAGIjEWgAAAAAAAIACxFoAAAAAAACAAsRaAAAAAAAAgALEWgAAAAAAAIACxFoAAAAAAACAAsRaAAAAAAAAgALEWgAAAAAAAIACxFoAAAAAAACAAsRaAAAAAAAAgALEWgAAAAAAAIACxFoAAAAAAACAAsRaAAAAAAAAgALEWgAAAAAAAIACxFoAAAAAAACAAsRaAAAAAAAAgALEWgAAAAAAAIACxFoAAAAAAACAAsRaAAAAAAAAgALEWgAAAAAAAIACqqUHGMi6u2vp6tpcegzodU1Nr/yvZdOmrsKTAD1l/UJ9s4ahflm/UN+sYahf1i/UN2uY3a1abUxDQ6V3H7NXH40e6eranLVrXyo9BvS61tbhSeL4hjpk/UJ9s4ahflm/UN+sYahf1i/UN2uY3W3kyCFbf0mgt/gYZAAAAAAAAIACxFoAAAAAAACAAsRaAAAAAAAAgALEWgAAAAAAAIACxFoAAAAAAACAAsRaAAAAAAAAgALEWgAAAAAAAIACqqUHAAAAAAAAAF7V3d2dDRvWZePGDenq6kxSKz1SP1NJtToogwc3p7l5eBoayp3fKtYCAAAAAADAHqK7uzt//ONz6ezcWHqUfqyWrq5NefHFTXn55Y0ZNaq1WLAVawEAAAAAAGAPsWHDunR2bkxDQ2NGjNgrTU2Di5752R91d3dn06aNeeGFNens3JgNG9Zl2LCRRWbxNwsAAAAAAAB7iI0bNyRJRozYK4MHNwu1faChoSGDBzdnxIi9krz6nheZpdgzAwAAAAAAANt45Rq1SVPT4MKT9H9b3uMt73kJYi0AAAAAAADsMWpJ4oza3aBSqfzXf9WKzeBvGQAAAAAAABhwXo215Yi1AAAAAAAAAAWItQAAAAAAAAAFVEsPAAAAAAAAAOy8lpbm0iPsko6ODaVH2OOItQAAAAAAAFBnnlm9vvQIPTJm76GlR9gjibUAAAAAAABQh66d3156hJ1yyYyJpUfYY7lmLQAAAAAAAEABYi0AAAAAAABAAWItAAAAAAAAUDc+//l/yuTJE/Oxj30ktVptu/vnzLkykydPzCWX/J8d3r8nEWsBAAAAAACAuvHRj16UcePelgcfvD833XTDNvfddtv/y6JFt2afffbN5ZdfmUqlUmbInSTWAgAAAAAAAHXjLW95Sz7zmWsyZEhzvvnNr+VXv/pFkuT3v/9d5s79XBobG3PllXMyYsTIwpO+MbEWAAAAAAAAqCsHHXRwLr74U9m8eXOuvPKyrFr1bK644hPZuHFjPvzhv8uf//n/LD3iThFrAQAAAAAAgLpz8smn5vTTp+YPf1iVD37wzPz+97/L0Ue/M2ef/cHSo+00sRYAAAAAAACoSxde+PHst9+YvPjiixk1aq/8wz98Zo+/Tu2fEmsBAAAAAACAuvTLXy7LqlXPJkleeGFtnnpqZeGJekasBQAAAAAAAOrO888/n6uvviK1Wi3vec/p2bx5cz796U/lhRdeKD3aThNrAQAAAAAAgLrS3d2dz3zm8vzxj2tyxhn/O5/61Kdz6qnvzapVz+aaa64qPd5OE2sBAAAAAACAunL99dfloYfaM2FCWy644KNJkosu+kQOPviQ/Oxnd+V73/tO4Ql3jlgLAAAAAAAA1I2HHmrPjTd+K0OHDs1VV/1TBg0alCQZMmRIPvOZz6ap6S356le/lN/85teFJ31j1dIDAAAAAAAAAD13yYyJpUfY7f74xzW56qrL093dnUsuuTwHHPA/trn/rW8dl49+9GP5wheuyRVXfDLXX/9/M3TosELTvjGxFgAAAAAAAOrMmL2Hlh6hiFGj9soPf3j7627z/vdPz/vfP303TfTmiLUAAAAAAABQRzo6NpQegV7imrUAAAAAAAAABYi1AAAAAAAAAAX4GGQAAADoJS0tzUX3h//Ox+MBAMCeTawFAACAXvTM6vU93qdSqSRJarVab4/DADZm76GlRwAAAN6AWAsAAAC97Nr57T3aflD1lasUdXZ198U4DECXzJhYegQAAGAnuGYtAAAAAAAAQAFiLQAAAAAAAEABYi0AAAAAAABAAWItAAAAAAAAQAFiLQAAAAAAAEABYi0AAAAAAABAAWItAAAAAAAAQAHV0gMAAAAAAAAAO6+lpbn0CLuko2ND6RH2OGItAAAAAAAA1JnujqdLj9AjDS37lx5hjyTWAgAAAAAAQB165pZ/KT3CThkz7cLSI+yxXLMWAAAAAAAAoACxFgAAAAAAAKAAsRYAAAAAAACoC88883Te9a6j8td/fWJefnnjDrfp6urK+953SiZPnpjf/e63u3nCnhFrAQAAAAAAgLowZsz+Oe6447Nu3Qu5447FO9zmpz+9M6tXr87hhx+ZsWPfupsn7Jlq6QF6w/z589Pe3p5HH300a9asyYsvvpjhw4dnwoQJmTp1aqZMmZJKpbLNPjNmzMiDDz74mo85efLkfOtb3+rr0QEAAAAAAIAemD79f+VnP7srP/jBgpx22vu2u3/hwu8nSaZNO2N3j9Zj/SLWXnfddVmzZk3Gjx+fww8/PEOGDMnTTz+d+++/P/fdd18WL16cefPmpaFh+xOJJ0+enNbW1u1uf9vb3rY7RgcAAAAAAAB6YOLEo3LIIWPzm9/8Or/+9SNpa3v71vt++9vH88tfLsvo0a05/vgTyg25k/pFrJ07d27a2trS3Ny8ze2PPfZYZs6cmTvvvDMLFy7M9OnTt9v3vPPOy9FHH727RgUAAAAAAADepOnT/yZf/OJns3Dh97eJtQsX/luSZMqUqalW9/wU2i+uWTtx4sTtQm2SjB8/PmeddVaS5N57793dYwEAAAAAAAB94NRT35thw4blzjvvyAsvrE2SrF//YhYvXpRqtZopU6YVnnDn9ItY+3q2FPOmpqbCkwAAAAAAAAC9YciQIXnve6dk06aXc+utP0qS3H77j/PSSxty/PEnZPTo0YUn3Dl7/rm/b8KTTz6Z7373u0mSE088cYfb3HHHHbnjjjuyadOm7LPPPjnmmGMyceLE3TkmAAAAAAAA0EPTpv1N/u3fvpsf/nBBzjzz7CxcuOC/bj+j8GQ7r1/F2gULFmTp0qXp7OzMqlWrsmzZsnR3d+f888/Pu9/97h3uM3/+/G2+/vKXv5wjjjgic+fOzZgxY/p03qamalpbh/fpc0BJjm+oX9Yv1DdrGMqqVCoZVN21D7La1f3gv6tUKhk0qNH3hN3M+w31y/qF+tbf1vDzzzemq6s71df5+aBS2fbPelCp5HVf0644+OCDcuyx78w999yd6677Slas+F3Gjn1rJk2a1JPJUq02FDuO+lWsfeihh7Jw4cKtX1er1cyePTuzZs3abtsjjzwy73vf+zJx4sTst99+WbNmTZYtW5a5c+fmoYceysyZM7Nw4cIdXgsXAAAAAAAAKO+MM87MPffcnfnzb0hSX2fVJv0s1s6ZMydz5szJxo0b89RTT2XBggWZN29eFi1alG984xvZd999t2574YUXbrPv/vvvn/333z/vete7MnXq1KxYsSLf+c538rd/+7d9Nu+mTV1Zu/alPnt8KGXLb58899y6wpMAPWX9Qn2zhqG8lpbm1Gq1dHZ192i/LWfU9nQ/eC21Wi2dnZvT0bGh9CgDgu/BUL+sX6hv/XUNd3Vt/q8/X/vng1pt2z/rQa32+q9pVx155NE56KCDs3LlE2luHpqTT/7rHj5PLV1dm3fqOBo5ckiamno3r/arWLvF4MGDM27cuFx66aVpbW3N5z73uVx99dWZN2/eG+47fPjwnHvuuZkzZ07uuuuuPo21AAAAAAAAsKvGTLvwjTfq5yqVSiZOPCorVz6RU099T5qbh5YeqUf6Zaz9U1OnTs3nPve5LFmyJJ2dnRk0aNAb7jN27NgkyapVq/p6PAAAAAAAAOixhpb9S4+wR+js7MxPf/qTJMnUqfX1EcjJAIi1I0eOTLVaTVdXV9auXZvRo0e/4T4dHR1JkqFD66u8AwAAAAAA0P+53MWrbrnle1mzZnWOPvqdOfTQsaXH6bF+H2uXLl2arq6ujBgxIqNGjdqpfRYtWpQkefvb396XowEAAAAAAAA9tHLlitx88/w8//xzefDB+1OtVnP++R8pPdYuqftY297ennXr1uX4449Ptbrty/n5z3+eyy67LEnygQ98II2NjUmSBx54IJVKJZMmTUqlUtm6/UsvvZQvf/nL+fd///dUq9XMmDFj970QAAAAAAAA4A09//zzufXWH6apqSnjxo3Phz/8dxk//m2lx9oldR9rV65cmU9+8pMZMWJE2traMnr06Kxfvz5PPvlkHn/88STJCSeckNmzZ2/dZ/ny5bnmmmvS2tqaCRMmZOTIkVm9enWWL1+ejo6ONDU1Zc6cORk/fnyplwUAAAAAAADswBFHTMzdd7eXHqNX1H2snTRpUi644IK0t7fniSeeyLJly1Kr1dLa2ppTTjklU6ZMyUknnbTNPkcddVTOPPPMPPLII1m+fHnWrl2barWaAw44IKeddlrOOeecHHrooYVeEQAAAAAAADAQ1H2sPfDAA7c5a3ZntLW15aqrruqjiQAAAAAAAADeWEPpAQAAAAAAAAB2t1qtVnoEsRYAAAAAAAD2HJUkSXd3d+E5+r9XY22l2AxiLQAAAAAAAOwhqtVBSZJNmzYWnqT/2/Ieb3nPSxBrAQAAAAAAYA8xeHBzkuSFF9Zk48YN6e7u3iM+rre/qNVq6e7uzsaNG/LCC2uSvPqel1At9swAAAAAAADANpqbh+fllzems3NjOjqeKz1Ovzdo0OA0Nw8v9vxiLQAAAAAAAOwhGhoaMmpUazZsWJeNGzekq6sziTNre1cl1eqgDB7cnObm4WloKPdhxGItAAAAAAAA7EEaGhoybNjIDBs2svQo9DHXrAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKKBaegAAAIDe0NLSXHoESGNjQ5JK6TEAAACoE2ItAADQbzyzen3pERjg9t17aOkRAAAAqCNiLQAA0K9cO7+99AgMYF+88C9KjwAAAEAdcc1aAAAAAAAAgALEWgAAAAAAAIACxFoAAAAAAACAAsRaAAAAAAAAgALEWgAAAAAAAIACxFoAAAAAAACAAsRaAAAAAAAAgALEWgAAAAAAAIACxFoAAAAAAACAAsRaAAAAAAAAgALEWgAAAAAAAIACxFoAAAAAAACAAsRaAAAAAAAAgALEWgAAAAAAAIACqqUH6A3z589Pe3t7Hn300axZsyYvvvhihg8fngkTJmTq1KmZMmVKKpXKdvt1d3fnO9/5ThYsWJDf//73aWhoyGGHHZazzjorp512WoFXAgAAAAAAAAwU/SLWXnfddVmzZk3Gjx+fww8/PEOGDMnTTz+d+++/P/fdd18WL16cefPmpaHh1ROJN2/enI985CP5yU9+kmHDhuW4447Lpk2bct999+Wiiy7KL37xi1x++eUFXxUAAAAAAADQn/WLWDt37ty0tbWlubl5m9sfe+yxzJw5M3feeWcWLlyY6dOnb73vxhtvzE9+8pOMGzcuN954Y0aPHp0kWbFiRc4+++zMnz8/xxxzTE466aTd+loAAAAAAACAgaFfXLN24sSJ24XaJBk/fnzOOuusJMm999679fbNmzfnm9/8ZpLkyiuv3Bpqk+SQQw7Jxz/+8STJ1772tb4cGwAAAAAAABjA+kWsfT3V6isnDzc1NW29bdmyZVm9enX222+/TJo0abt9Tj311AwaNCgPP/xwVq1atdtmBQAAAAAAAAaOfh1rn3zyyXz3u99Nkpx44olbb1++fHmS5B3veMcO9xsyZEjGjRu3zbYAAAAAAAAAvalfXLN2iwULFmTp0qXp7OzMqlWrsmzZsnR3d+f888/Pu9/97q3bPfXUU0mS/fff/zUfa8yYMVm+fPnWbftCU1M1ra3D++zxoTTHN9Qv6xfq20Bew5VKJYOq/fp3UtnDVZJUKtnl49DxS2+pVCoZNKhxQH9PKMH7DfXL+oX6Zg1Tz/pVrH3ooYeycOHCrV9Xq9XMnj07s2bN2ma7DRs2JHnlDNrXsuUauOvXr++DSQEAAAAAAICBrl/F2jlz5mTOnDnZuHFjnnrqqSxYsCDz5s3LokWL8o1vfCP77rtv6RG3sWlTV9aufan0GNDrtvwW03PPrSs8CdBT1i/Ut4G+hltamlOr1dLZ1V16FAawWpJaLT0+DrecUev4pbfUarV0dm5OR8eG0qMMCAP9ezDUM+sX6ps1zO42cuSQNDX1bl7tl5+vNHjw4IwbNy6XXnppPvaxj+U3v/lNrr766q33bzlr9qWXXjuUbjn7dujQoX07LAAAAAAAADAg9ctY+6emTp2aJFmyZEk6OzuTJAcccECS5Omnn37N/Z599tlttgUAAAAAAADoTf0+1o4cOTLVajVdXV1Zu3ZtkqStrS1J8vDDD+9wn5deeimPPfbYNtsCAAAAAAAA9KZ+H2uXLl2arq6ujBgxIqNGjUqSHH744dlrr73y7LPPZunSpdvtc/vtt6ezszPveMc79rjr3AIAAAAAAAD9Q93H2vb29ixZsiRdXV3b3ffzn/88l112WZLkAx/4QBobG5MkjY2N+dCHPpQkufLKK7N69eqt+6xYsSJf/OIXkyTnn39+X48PAAAAAAAADFDV0gO8WStXrswnP/nJjBgxIm1tbRk9enTWr1+fJ598Mo8//niS5IQTTsjs2bO32W/mzJlZunRplixZkpNPPjnHHntsurq6cu+99+bll1/OjBkzctJJJ5V4SQAAAAAAAMAAUPexdtKkSbngggvS3t6eJ554IsuWLUutVktra2tOOeWUTJkyZYfRtbGxMV/5yldy880355Zbbsndd9+dhoaG/Nmf/VnOOuusnH766QVeDQAAAAAAADBQ1H2sPfDAA7c7a3ZnNTQ05Jxzzsk555zTy1MBAAAAAAAAvL66v2YtAAAAAAAAQD0SawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAACqiWHgCgXrW0NJceAbbq6NhQegQAAAAAAHpIrAV4E7o7ni49AqShZf/SIwAAAAAAsAvEWoA36Zlb/qX0CAxgY6ZdWHoEAAAAAAB2kWvWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABRQLT0AAAAAAL1r372HprGxIS0tzaVHGVC83zvW0bGh9AgAAHsssRYAAACgH3rqDy8mqZUeY0CoVCpJklrN+/3fjdl7aOkRAAD2aGItAAAAQD917fz20iMMCIOqr1xprLOru/Ake5ZLZkwsPQIAwB7PNWsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAAChBrAQAAAAAAAAoQawEAAAAAAAAKEGsBAAAAAAAACqiWHuDN6uzsTHt7e+666648+OCDWbFiRTZt2pRRo0bl8MMPz9lnn52jjz56u/0+8YlPZOHCha/5uIceemhuv/32vhwdAAAAAAAAGMDqPtYuXbo0s2bNSpK0trZm0qRJGTJkSH77299m8eLFWbx4cS644ILMnj17h/sfccQROfjgg7e7vbW1tU/nBgAAAAAAAAa2uo+1lUolp5xySs4999xMnDhxm/tuu+22fPzjH89XvvKVHH300TnmmGO22/+MM87ItGnTdte4AAAAAAAAAEn6wTVrjz322HzpS1/aLtQmyXve855MnTo1SfKjH/1od48GAAAAAAAA8JrqPta+kba2tiTJqlWrCk8CAAAAAAAA8Kq6/xjkN7JixYokr30N2gceeCD/8R//kQ0bNmTvvffOkUcemeOOOy4NDf2+YwMAAAAAAAAF9etY+9xzz2XhwoVJkpNPPnmH2/zgBz/Y7rZx48Zl7ty5Oeyww/p0vqamalpbh/fpc0BJA+H43pRKqtXG0mMwgFVSyaBBjb2+3gbC+oX+bCCv4UqlkkFVv3hJOZUklUp2+Th0/NJb3uyxyK7xfm+rUumbn1egLzhOob5Zw9SzfvsvyK6urlx88cVZt25djj322Jx44onb3D9hwoRcfvnlue2227Js2bL87Gc/y9e//vVMmDAhjz/+eGbNmuWjkwEAAAAAAIA+02/PrP30pz+d++67L2PGjMnnP//57e6fOXPmNl83Nzdnn332yTvf+c7MmDEjv/jFL/L1r389V1xxRZ/NuGlTV9aufanPHh9K2fJbTM89t67wJH2rpaU5tdTS1bW59CgMYLXU0tm5OR0dG3rl8QbK+oX+aqCv4ZaW5tRqtXR2dZcehQGslqRWS4+Pwy1n4zl+6S27eiyya6zhHavVevfnFegLA/3f0FDvrGF2t5Ejh6SpqXfzar88s/Yf//Ef8/3vfz+tra254YYbXvN6tTvS1NSU8847L0ly11139dWIAAAAAAAAwADX72LtZz/72cyfPz977bVXbrjhhhxyyCE9foyxY8cmiY9BBgAAAAAAAPpMv4q11157ba6//vq0tLTk+uuvz7hx43bpcTo6OpIkQ4cO7c3xAAAAAAAAALbqN7H2C1/4Qr71rW9l5MiRuf766zNhwoRdfqxFixYlSd7+9rf31ngAAAAAAAAA2+gXsfaf//mfc91112XEiBH59re/nba2ttfdfvny5VmyZEk2b968ze1dXV359re/nfnz5ydJZs6c2VcjAwAAAAAAAANctfQAb9add96Zr33ta0mSgw46KDfddNMOtxs7dmzOO++8JMl//ud/5u///u/T0tKStra27LXXXuno6Mijjz6aP/x2SOKeAAAgAElEQVThD2loaMjFF1+c448/fre9DgAAAAAAAGBgqftYu3bt2q3//cgjj+SRRx7Z4XZHHXXU1lh72GGH5dxzz83DDz+cxx9/PB0dHalUKtlvv/0ybdq0nH322T4CGQAAAAAAAOhTdR9rp02blmnTpvVonwMPPDCXXXZZH00EAAAAAAAA8Mb6xTVrAQAAAAAAAOqNWAsAAAAAAABQgFgLAAAAAAAAUIBYCwAAAAAAAFCAWAsAAAAAAABQgFgLAAAAAAAAUIBYCwAAAAAAAFCAWAsAAAAAAABQgFgLAAAAAAAAUIBYCwAAAAAAAFCAWAsAAAAAAABQgFgLAAAAAAAAUEC19AAAANS/lpbm0iPwJwbq30djY0OSSukxAAAAAHaaWAsAQK94ZvX60iMMeJXKK6GyVqsVnqSMffceWnoEAAAAgB4RawEA6DXXzm8vPcKANqj6ylVOOru6C09Sxhcv/IvSIwAAAAD0iGvWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFCDWAgAAAAAAABQg1gIAAAAAAAAUINYCAAAAAAAAFNAnsfaBBx7oi4cFAAAAAAAA6Df6JNZ+8IMfzMknn5yvfvWrefbZZ/viKQAAAAAAAADqWp/E2re85S1ZuXJlvvSlL+Wv/uqv8qEPfSi33357Ojs7++LpAAAAAAAAAOpOtS8e9J577smtt96aW265Jb/61a9y991355577snIkSNz+umnZ/r06ZkwYUJfPDUAAAAAAABAXeiTM2uHDRuWM888M9/73vfy4x//OLNmzcree++djo6O3HTTTZk6dWqmTZuWm2++OevWreuLEQAAAAAAAAD2aH0Sa//UW9/61lx66aW566678q//+q/5y7/8yzQ2NubXv/51rr766kyePDkXXXRR7r333r4eBQAAAAAAAOD/s3f3QVbW9/3/X2d3We4MrOBKMDUqJmqMmqBGgkknnegoNcUqSIxRjCbV6cQxJtXEjMYEidNYtSXSqY1VwXgD3t/EFKXWONFWRuI0KqLxpt603oCAgiIaWbl+f+QnU79yo2YvPoc9j8cfDpzzuT7nvbvXIpznXuc0jVpeBnld2tvbs99++2W//fbLSy+9lJtvvjnXXnttnnzyycyZMydz5szJyJEjM2nSpBx++OEZNmzYphoNAAAAAAAAYJOr/cradXnxxRfz3HPP5aWXXkqj0UhVVamqKs8//3ymT5+e/fbbL//8z/9cYjQAAAAAAACATWKTXVm7fPny3HLLLbnhhhvyu9/9LklSVVV22mmnHHbYYTnggAMyb968XHXVVXnggQcyffr0dHZ25hvf+MamGhEAAAAAAABgk6k11lZVlbvuuivXX3997rzzzvT09KSqqgwaNCgHHXRQvvzlL2ePPfZYu/7QQw/NoYcemquuuipTpkzJ1VdfLdYCwAb06xqRtLelq2tQr+7b2/vR97W3t2XE8MGlxwAAAACAzUotsfapp57KDTfckJtvvjlLlixJVVVJkj322COTJk3Kl770pQwatP4ngb/yla9k2rRpef755+sYDwD6lJ5lz6bqpb3eTCNJUvXajrSKKkm6tik9BgAAAABsVmqJtQcddFCSP1xZO3To0Bx88MGZNGlSdtppp/e8x+DBg/PKK6/UMR4A9Dkv3PDTXtmno6M9SdLT81av7Efr2GbCt0uPAAAAAACbnVpibVVVGTNmTCZNmpQDDjggnZ2d73uPK664Ij09PTVMBwAAAAAAAFBeLbH29ttvz7bbbvtH7bHNNl5GDwAAAAAAAOi72urY9I8NtQAAAAAAAAB9XS1X1i5evDg33nhjuru7M3HixA2uvfbaa7Ns2bJMnDgx3d3ddYwDAAAAAAAA0HRqubL2xhtvzPnnn5/ly5dvdO0LL7yQ888/PzfffHMdowAAAAAAAAA0pVpi7Z133pkkOfDAAze69tBDD01VVbnjjjvqGAUAAAAAAACgKdUSa5977rkMGDAgf/Inf7LRtdtuu20GDhyYZ599to5RAAAAAAAAAJpSLbF2xYoV6ezsfM/rOzs739NLJgMAAAAAAAD0FbXE2i233DKvvPJKXnrppY2ufemll/LKK69k6NChdYwCAAAAAAAA0JRqibWf+tSnkiRXX331RtdeddVVqaoqu+++ex2jAAAAAAAAADSlWmLtYYcdlqqq8k//9E+58cYb17vu+uuvzwUXXJBGo5HDDjusjlEAAAAAAAAAmlJHHZt+4QtfyEEHHZQ5c+bktNNOy8yZM/OFL3whI0eOTJI8//zzueuuu/L444+nqqoceOCB2W+//eoYBQAAAAAAAKAp1RJrk+Tss8/OFltskWuuuSaPPfZYHn/88XfcX1VVkmTSpEk544wz6hoDAAAAAAAAoCnVFms7OzszderUHHnkkbnpppvywAMPZNmyZUmS4cOH51Of+lQOOeSQ7LzzznWNAAAAAAAAANC0aou1b9t5551z6qmn1rb/6tWrc9999+XXv/515s+fn6effjpvvvlmttxyy4wePTpHHnlkxowZs97jb7nllsyePTuPPvpo1qxZkx122CETJ07MEUcckba2Wt7SFwAAAAAAAKD+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xoypYxQAAAAAAACAplRLrD3yyCNTVVV++tOf5oknnljnmtWrV2f69Om55ppr0mg0cuSRR9YxCgAAAAAAAEBT6qhj08985jM59thjM3PmzEyaNCmf//zn174k8jnnnJMXXngh9957b15++eUkyQknnJCdd965jlEAAAAAAAAAmlItsTZJTj311HR3d+cf//Efc/vtt6+9febMmamqKkkycODAnHTSSTnmmGPqGgMAAAAAAACgKdUWa5Pk61//eiZOnJjbbrstv/3tb7NkyZKsWbMmw4cPz+jRo/Pnf/7nGTZsWJ0jAAAAAAAAADSlWmNtkgwdOjSHH354Dj/88LofCgAAAAAAAGCz0VZ6AAAAAAAAAIBWJNYCAAAAAAAAFFDLyyB//etff9/HNBqNXHLJJTVMAwAAAAAAANB8aom199xzz3ta12g0kiRVVa39NQAAAAAAAEArqCXW/vjHP97g/StXrsyCBQvy7//+7xk4cGBOOOGEDBw4sI5RAAAAAAAAAJpSLbF20qRJ72ndk08+mb/6q7/KLbfckiuvvLKOUQAAAAAAAACaUlvJBx81alSmTJmSBQsW5F/+5V9KjgIAAAAAAACwSRWNtUny+c9/Pv37988vf/nL0qMAAAAAAAAAbDLFY22j0UhbW1teeOGF0qMAAAAAAAAAbDLFY+3999+f119/PYMHDy49CgAAAAAAAMAmUyzWVlWVX/3qVzn55JPTaDQyduzYUqMAAAAAAAAAbHIddWx64IEHbvD+3//+91m6dGneeuutVFWVrq6unHTSSXWMAgAAAAAAANCUaom1zzzzzHt78I6OfPGLX8wpp5ySj370o3WMAgAAAAAAANCUaom1M2fO3OD97e3tGTJkSEaNGpXOzs46RgAAAAAAAABoarXEWu8/CwAAAAAAALBhbaUHAAAAAAAAAGhFYi0AAAAAAABAAbW8DPIZZ5zRK/s0Go1MnTq1V/YCAAAAAAAAaCa1xNprr702yR9i6/9VVdUGb/9/ibUAAAAAAABAX1VLrP3rv/7r9PT05Oqrr86rr76aD3/4w9lrr70yYsSIJMmLL76Y++67L4sWLcqQIUNy+OGHp729vY5RAAAAAAAAAJpSLbH2m9/8Zo499tj09PTk7LPPzl/+5V++62raJLnpppty5pln5v7778+MGTPSr1+/OsYBAAAAAAAAaDptdWx68cUX57/+67/yox/9KIcccsg6Q22SHHLIIfnhD3+Y3/zmN7nkkkvqGAUAAAAAAACgKdUSa3/5y1+mX79++Yu/+IuNrh0/fnz69euXW265pY5RAAAAAAAAAJpSLbH2ueeeS//+/dPRsfFXWe7o6MiAAQPy3HPP1TEKAAAAAAAAQFOqJdYOGjQoK1euzBNPPLHRtY8//nheffXVDBo0qI5RAAAAAAAAAJpSLbF2zJgxqaoqp59+el599dX1rlu5cmV+8IMfpNFoZMyYMXWMAgAAAAAAANCUNv46xR/AiSeemDvvvDMPPvhgxo0bl6985SvZe++9s/XWWydJXnzxxdx33325+uqrs3Tp0gwYMCAnnnhiHaMAAAAAAAAANKVaYu2OO+6YCy+8MN/5zneybNmyXHDBBetcV1VVttxyy0ybNi2jRo2qYxQAAAAAAACAplRLrE2Sz372s7n11ltz2WWX5d/+7d/y5JNPZs2aNUmStra2jBo1KuPGjctRRx2Vrq6uusYAAAAAAAAAaEq1xdok6erqyre+9a1861vfyu9///ssX7587e39+/ev86EBAAAAAAAAmlqtsfb/6t+/f0aMGLGpHg4AAAAAAACgqW2SWPvyyy9n0aJFef3117PnnntuiocEAAAAAAAAaGq1xtq5c+fmZz/7WX73u98lSRqNRh5++OG197/yyiv5m7/5m1RVlWnTpmXIkCF1jgMAAAAAAADQNNrq2njatGn59re/nUceeSTt7e1pNBqpquoda4YMGZKhQ4fmnnvuya233lrXKAAAAAAAAABNp5ZYe8899+TCCy/MoEGDcu655+a3v/1thg0bts61hx56aKqqyt13313HKAAAAAAAAABNqZaXQb788svTaDRy8sknZ/z48RtcO3r06DQajTzyyCN1jAIAAAAAAADQlGq5svbBBx9MkhxyyCEbXTt48OBsscUWWbp0aR2jAAAAAAAAADSlWmLtihUrssUWW2TQoEHvaf3/+162AAAAAAAAAH1dLbG2q6srK1euzBtvvLHRtYsXL87KlSuz1VZb1TEKAAAAAAAAQFOqJdbutttuSZL/+I//2OjaWbNmJUn22muvOkYBAAAAAAAAaEq1xNpJkyalqqr8/d//fZYsWbLedddff30uvvjiNBqNHH744XWMAgAAAAAAANCUOurYdL/99stBBx2UOXPmZMKECfnSl7609iWRr7zyyrzwwgu566678vjjj6eqqnz5y192ZS0AAAAAAADQUmqJtUnyd3/3d9lyyy0za9as/PznP09VVWk0GjnrrLOSZO3vjz766Jx66ql1jQEAAAAAAADQlGqLtf369csZZ5yRr371q7npppty//3358UXX0xVVRk+fHg+/elP59BDD81OO+1U1wgAAAAAAAAATau2WPu2HXfcMSeffHLdDwMAAAAAAACwWWmrY9OTTjop3/72t/O///u/dWwPAAAAAAAAsNmrJdbecccdufPOO7PtttvWsT0AAAAAAADAZq+WWDt8+PB0dnbWsTUAAAAAAABAn1BLrB0zZkxWrlyZJ598so7tAQAAAAAAADZ7tcTa4447Lv3798+Pf/zjvPnmm3U8BAAAAAAAAMBmraOOTYcMGZKpU6dmypQpOfjggzN58uR8+tOfzrBhw9LWtv4+PGLEiDrGAQAAAAAAAGg6tcTaP/uzP1v762eeeSZnnXXWRo9pNBp5+OGH6xgHAAAAAAAAoOnUEmurqtokxwAAAAAAAABsrmqJtQsXLqxjWwAAAAAAAIA+o5ZY297eXse2AAAAAAAAAH1GW29sctlll+Xaa6/tja0AAAAAAAAAWkKvxNq//du/zfTp09d532mnnZYTTzyxNx4GAAAAAAAAoM/otZdBrqpqnbffddddWbZsWW89DAAAAAAAAECf0CtX1gIAAAAAAADw/oi1AAAAAAAAAAWItQAAAAAAAAAFiLUAAAAAAAAABYi1AAAAAAAAAAV09NZGK1asyNFHH/2u25cvX54k67zv/2o0Gvn5z3/eW+MAAAAAAAAANLVei7WrV6/O/Pnz13v/hu5L/hBrAQAAAAAAAFpFr8TaQw89tDe2AQAAAAAAAGgZvRJrf/KTn/TGNgAAAAAAAAAto630AAAAAAAAAACtSKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKECsBQAAAAAAAChArAUAAAAAAAAoQKwFAAAAAAAAKKCj9AC94cknn8zdd9+dBQsW5KGHHsrTTz+dqqpy/vnnZ9y4ces85vvf/35uvPHG9e65ww475LbbbqtrZAAAAAAAAKDF9YlYO3v27Fx22WUf6Ng999wz22233btu7+7u/mPHAgAAAAAAAFivPhFrd9ppp3zjG9/Ibrvtlt122y2nn3565s+f/56OnTRpUiZMmFDzhAAAAAAAAADv1Cdi7aRJk0qPAAAAAAAAAPC+tJUeAAAAAAAAAKAV9Ykra/8Y9957bx599NGsWrUqw4cPz1577ZXPfe5zaWvTsQEAAAAAAID6tHysvemmm95128c+9rH8wz/8Q3beeedaH7uzsyPd3R+q9TGgpFY4v99MIx0d7aXHoOX1/nnovOb9a6SRpF+HH3hrBq36dWgkaTRa9+OnOfyx56Hzl97iz8QyfL7fqdFopF+/9pZ4foDNn/MUNm++h9mctezfIHfZZZf84Ac/yJw5c/Lb3/42d999dy688MLssssueeKJJ3Lsscdm8eLFpccEAAAAAAAA+qiWvbL2mGOOecfvBw0alK233jr77rtvJk+enPvvvz8XXnhhfvjDH9Y2w5tv9mTFitdr2x9KefunmJYsebXwJPXq6hqUKlV6et4qPQotr/fOw7evqHVe8/5VqZKs7llTepCW9vbVPK36daiSVFXrfvw0hw96Hrb69y+9z5+Jm5bv4XWrqiqrV7+V5ctXlR4F1qtVnseCvsr3MJva0KED09nZu3m1Za+sXZ/Ozs4cf/zxSZJf//rXhacBAAAAAAAA+iqxdh1GjRqVJF4GGQAAAAAAAKiNWLsOy5cvT5IMHjy48CQAAAAAAABAXyXWrsOtt96aJNltt90KTwIAAAAAAAD0VS0Zax955JHceeedeeutt95xe09PT2bMmJHLL788SXLMMccUmA4AAAAAAABoBR2lB+gNCxcuzJlnnrn290888USSZNq0aZkxY8ba26+55pokyXPPPZcTTjghXV1d2XXXXTNs2LAsX748jz32WF588cW0tbXlu9/9bv70T/90034gAAAAAAAAQMvoE7F25cqVeeCBB951+9NPP73O9TvvvHOOPvroLFiwIE888USWL1+eRqORD3/4w5kwYUKOPPJIL4EMAAAAAAAA1KpPxNoxY8bk0Ucffc/rt91225x++uk1TgQAAAAAAACwYS35nrUAAAAAAAAApYm1AAAAAAAAAAWItQAAAAAAAAAFiLUAAAAAAAAABYi1AAAA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AAAAAIACCGsBAAAAAAAAClBadAFAw7Vnz54sWbIka9euzdq1a7Nhw4bs3bs3l112WWbOnHnM/V566aUsX748//3f/52NGzdm586dad26dXr16pXPf/7zue6669KyZcsa1fLUU09l5MiR79nmP/7jP/Kxj32sRv1CY1bbMVzppZdeyt13351f/epXKS8vT1lZWS699NKMGzcunTt3rlVN27dvz913353ly5dnx44d6dixYwYOHJixY8emR48eteoTmprPfOYz2bp16/u2++pXv5pbbrnluPo0z8KJU5/jbc2aNfnpT3+aVatWZdeuXenatWsGDx6cm2++Oe3bt69tycD/Z60LHw4LFy7M/Pnzs3Hjxhw+fDg9evTIsGHDcu2116ZZs5pfu7R8+fLcd999ee655/L222+nW7duufLKK3PjjTfWeMwD1Ttw4ECeeeaZLFu2LCtXrszmzZuzf//+nHLKKbngggsyfPjwXHLJJTXq85vf/GYWLFhwzO09evTIo48++kFLhzohrAWOacuWLZkwYUKN9xs1alS2b9+eVq1apV+/fhkwYEBef/31rF69OqtXr87Pf/7zzJ49Ox07dqxx36eddlo++clPVrutU6dONe4PGrPajuEkWblyZUaPHp19+/bl3HPPzcUXX5wNGzbk3//93/P4449n3rx5NQ5XX3zxxVx33XUpLy9Pz549c/nll2fz5s155JFH8sQTT+See+5J//79a1UvNCWf+9znsnPnzmq3lZeXZ+nSpUmSj3/84zXu2zwLJ05dj7df/OIXue2223Lo0KFceOGF6dKlS9asWZN77rknS5Ysyfz583Pqqad+0LKhSbPWhYZv8uTJmTdvXlq1apWBAwemtLQ0K1asyB133JEVK1Zk+vTpNQpsZ82alalTp6Z58+YZMGBAOnTokKeffjo//OEP81//9V+577770qZNm3r8RNA0PP3007nhhhuSJGVlZbn44ovTpk2bvPjii3nsscfy2GOPZezYsfnbv/3bGvd94YUX5uyzzz7q9bKysg9cN9QVYS1wTO3atcuwYcPSr1+/9OvXL+vWrct3vvOd992vR48e+drXvpbPf/7zadeuXdXrr776ar7yla9k3bp1+e53v5vvfe97Na6pZ8+eufPOO2u8HzRFtR3De/bsyd/93d9l3759+cd//Mf89V//ddW2733ve7n33ntz66235sEHH0xJSclx1XL48OF84xvfSHl5eb785S/n7//+76u2zZ07N1OmTMnXv/71PP744xa68D7ePX7+2KxZs7J06dJ07949F110UY37Ns/CiVOX423btm359re/nYqKisyYMSODBw9Okhw8eDATJkzIokWLMnHixMyYMaNO3g+aKmtdaNgee+yxzJs3L2VlZbn//vvTvXv3JMnrr7+ekSNH5oknnsjcuXNz/fXXH1d/a9euzV133ZU2bdpkzpw5Of/885Mku3fvzt/8zd/k6aefzrRp0/Ktb32rvj4SNBklJSX53Oc+l5EjRx61ll20aFHGjx+fu+++O5dcckmNT0z+4he/mKFDh9ZluVDnPLMWOKazzjor//zP/5zrrrsuf/Znf3bct3aZM2dOrrnmmiMWr0ly5plnZtKkSUmSxYsXZ//+/XVdMvAutR3DDz30UHbs2JFLLrnkiKA2ScaPH5+zzjorzz//fJYvX37ctSxbtiwbN27M2WefnfHjxx+xbcSIERkwYEBee+21PPTQQ8fdJ3C0Bx98MEkybNiwgisBTqQ5c+Zk3759+au/+quqoDZJSktL80//9E856aSTsmTJkmzatKnAKuHDz1oXGrbKx/2MHz++KqhN3rlyvXKMzpo1K4cPHz6u/mbNmpWKiorcdNNNVUFt8s6J0d/97nfTrFmzzJs3L2+99VadfQZoqgYOHJjp06dXe9LxFVdckS984QtJkkceeeRElwYnhLAWOKH69u2bJHn77bdTXl5ecDVAdZYsWZIkueqqq47a1rx581xxxRVHtKtJn1dccUWaN29+1Pa//Mu/TJI8+eSTNa4XeMf//M//5OWXX05paWnVQhZoGirn2cr59N1OOumkfPrTnz6iHVD3rHWhWNu2bcvzzz+fFi1aZMiQIUdtHzBgQLp06ZIdO3Zk9erV79vf/v37q05Qrm5+7datWz72sY/lwIEDWbZs2Qf/AMB7qpxnt2/fXnAlUD/cBhk4obZs2ZIkadGiRa2e4/P666/nxz/+cbZv3542bdrkT//0T/PZz342p5xySl2XCk3W+vXrkyTnnXdetdsrX1+3bl2hfQJHqryq9tJLL631s3fMs3Di1NV427VrV1555ZUk7z3PLly40DwL9chaF4pVOcedc845ad26dbVtzjvvvGzfvj3r16/PhRde+J79vfzyy9m7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\n",
"text/plain": [
"<Figure size 1152x576 with 1 Axes>"
]
},
"metadata": {
"image/png": {
"height": 471,
"width": 949
}
},
"output_type": "display_data"
}
],
"source": [
"pd.DataFrame({'x': torch.randn(128).cumsum(0),\n",
" 'y': torch.randn(128).cumsum(0),\n",
" }).plot.hist(figsize=(16,8), alpha=0.8);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Graphs"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"import torch\n",
"from torch import nn\n",
"from torchviz import make_dot"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"448pt\" height=\"555pt\"\n",
" viewBox=\"0.00 0.00 448.00 555.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 551)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-551 444,-551 444,4 -4,4\"/>\n",
"<!-- 140594086407248 -->\n",
"<g id=\"node1\" class=\"node\"><title>140594086407248</title>\n",
"<polygon fill=\"#caff70\" stroke=\"black\" points=\"190,-21 92,-21 92,-0 190,-0 190,-21\"/>\n",
"<text text-anchor=\"middle\" x=\"141\" y=\"-7.4\" font-family=\"Times,serif\" font-size=\"12.00\">ThMulBackward</text>\n",
"</g>\n",
"<!-- 140594086406352 -->\n",
"<g id=\"node2\" class=\"node\"><title>140594086406352</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"127.5,-135 22.5,-135 22.5,-114 127.5,-114 127.5,-135\"/>\n",
"<text text-anchor=\"middle\" x=\"75\" y=\"-121.4\" font-family=\"Times,serif\" font-size=\"12.00\">SigmoidBackward</text>\n",
"</g>\n",
"<!-- 140594086406352&#45;&gt;140594086407248 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>140594086406352&#45;&gt;140594086407248</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M80.6271,-113.951C91.5864,-95.3533 115.96,-53.9919 130.159,-29.8964\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"133.326,-31.4172 135.387,-21.0249 127.295,-27.8633 133.326,-31.4172\"/>\n",
"</g>\n",
"<!-- 140594085971392 -->\n",
"<g id=\"node3\" class=\"node\"><title>140594085971392</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"260.5,-306 173.5,-306 173.5,-285 260.5,-285 260.5,-306\"/>\n",
"<text text-anchor=\"middle\" x=\"217\" y=\"-292.4\" font-family=\"Times,serif\" font-size=\"12.00\">SplitBackward</text>\n",
"</g>\n",
"<!-- 140594085971392&#45;&gt;140594086406352 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>140594085971392&#45;&gt;140594086406352</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M173.266,-289.513C146.333,-284.079 113.364,-272.724 94,-249 69.7544,-219.296 69.9314,-171.738 72.3645,-145.139\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"75.8501,-145.462 73.4808,-135.136 68.8932,-144.686 75.8501,-145.462\"/>\n",
"</g>\n",
"<!-- 140594086081088 -->\n",
"<g id=\"node18\" class=\"node\"><title>140594086081088</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"208.5,-249 103.5,-249 103.5,-228 208.5,-228 208.5,-249\"/>\n",
"<text text-anchor=\"middle\" x=\"156\" y=\"-235.4\" font-family=\"Times,serif\" font-size=\"12.00\">SigmoidBackward</text>\n",
"</g>\n",
"<!-- 140594085971392&#45;&gt;140594086081088 -->\n",
"<g id=\"edge18\" class=\"edge\"><title>140594085971392&#45;&gt;140594086081088</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M206.375,-284.92C197.561,-276.973 184.827,-265.492 174.367,-256.061\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"176.685,-253.438 166.914,-249.341 171.998,-258.637 176.685,-253.438\"/>\n",
"</g>\n",
"<!-- 140594086082376 -->\n",
"<g id=\"node20\" class=\"node\"><title>140594086082376</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"331.5,-249 226.5,-249 226.5,-228 331.5,-228 331.5,-249\"/>\n",
"<text text-anchor=\"middle\" x=\"279\" y=\"-235.4\" font-family=\"Times,serif\" font-size=\"12.00\">SigmoidBackward</text>\n",
"</g>\n",
"<!-- 140594085971392&#45;&gt;140594086082376 -->\n",
"<g id=\"edge21\" class=\"edge\"><title>140594085971392&#45;&gt;140594086082376</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M227.8,-284.92C236.757,-276.973 249.7,-265.492 260.332,-256.061\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"262.749,-258.595 267.907,-249.341 258.103,-253.359 262.749,-258.595\"/>\n",
"</g>\n",
"<!-- 140594086082264 -->\n",
"<g id=\"node21\" class=\"node\"><title>140594086082264</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"440,-249 350,-249 350,-228 440,-228 440,-249\"/>\n",
"<text text-anchor=\"middle\" x=\"395\" y=\"-235.4\" font-family=\"Times,serif\" font-size=\"12.00\">TanhBackward</text>\n",
"</g>\n",
"<!-- 140594085971392&#45;&gt;140594086082264 -->\n",
"<g id=\"edge23\" class=\"edge\"><title>140594085971392&#45;&gt;140594086082264</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M248.005,-284.92C277.523,-275.799 322.115,-262.021 354.443,-252.032\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"355.531,-255.359 364.052,-249.063 353.464,-248.671 355.531,-255.359\"/>\n",
"</g>\n",
"<!-- 140594085973184 -->\n",
"<g id=\"node4\" class=\"node\"><title>140594085973184</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"267,-363 167,-363 167,-342 267,-342 267,-363\"/>\n",
"<text text-anchor=\"middle\" x=\"217\" y=\"-349.4\" font-family=\"Times,serif\" font-size=\"12.00\">ThAddBackward</text>\n",
"</g>\n",
"<!-- 140594085973184&#45;&gt;140594085971392 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>140594085973184&#45;&gt;140594085971392</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M217,-341.92C217,-334.908 217,-325.144 217,-316.465\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"220.5,-316.341 217,-306.341 213.5,-316.341 220.5,-316.341\"/>\n",
"</g>\n",
"<!-- 140590859554208 -->\n",
"<g id=\"node5\" class=\"node\"><title>140590859554208</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"208,-420 90,-420 90,-399 208,-399 208,-420\"/>\n",
"<text text-anchor=\"middle\" x=\"149\" y=\"-406.4\" font-family=\"Times,serif\" font-size=\"12.00\">ThAddmmBackward</text>\n",
"</g>\n",
"<!-- 140590859554208&#45;&gt;140594085973184 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>140590859554208&#45;&gt;140594085973184</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M160.845,-398.92C170.765,-390.896 185.144,-379.266 196.867,-369.784\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"199.259,-372.351 204.833,-363.341 194.857,-366.908 199.259,-372.351\"/>\n",
"</g>\n",
"<!-- 140590860327848 -->\n",
"<g id=\"node6\" class=\"node\"><title>140590860327848</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"102,-477 7.10543e-15,-477 7.10543e-15,-456 102,-456 102,-477\"/>\n",
"<text text-anchor=\"middle\" x=\"51\" y=\"-463.4\" font-family=\"Times,serif\" font-size=\"12.00\">ExpandBackward</text>\n",
"</g>\n",
"<!-- 140590860327848&#45;&gt;140590859554208 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>140590860327848&#45;&gt;140590859554208</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M68.0703,-455.92C83.1545,-447.454 105.389,-434.976 122.738,-425.239\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"124.789,-428.101 131.797,-420.155 121.363,-421.997 124.789,-428.101\"/>\n",
"</g>\n",
"<!-- 140594103675088 -->\n",
"<g id=\"node7\" class=\"node\"><title>140594103675088</title>\n",
"<polygon fill=\"lightblue\" stroke=\"black\" points=\"78,-547 24,-547 24,-513 78,-513 78,-547\"/>\n",
"<text text-anchor=\"middle\" x=\"51\" y=\"-533.4\" font-family=\"Times,serif\" font-size=\"12.00\">bias_ih</text>\n",
"<text text-anchor=\"middle\" x=\"51\" y=\"-520.4\" font-family=\"Times,serif\" font-size=\"12.00\"> (512)</text>\n",
"</g>\n",
"<!-- 140594103675088&#45;&gt;140590860327848 -->\n",
"<g id=\"edge6\" class=\"edge\"><title>140594103675088&#45;&gt;140590860327848</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M51,-512.842C51,-505.012 51,-495.54 51,-487.282\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"54.5001,-487.042 51,-477.042 47.5001,-487.042 54.5001,-487.042\"/>\n",
"</g>\n",
"<!-- 140594086599088 -->\n",
"<g id=\"node8\" class=\"node\"><title>140594086599088</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"193.5,-477 120.5,-477 120.5,-456 193.5,-456 193.5,-477\"/>\n",
"<text text-anchor=\"middle\" x=\"157\" y=\"-463.4\" font-family=\"Times,serif\" font-size=\"12.00\">TBackward</text>\n",
"</g>\n",
"<!-- 140594086599088&#45;&gt;140590859554208 -->\n",
"<g id=\"edge7\" class=\"edge\"><title>140594086599088&#45;&gt;140590859554208</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M155.607,-455.92C154.587,-448.908 153.166,-439.144 151.904,-430.465\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"155.334,-429.733 150.431,-420.341 148.407,-430.741 155.334,-429.733\"/>\n",
"</g>\n",
"<!-- 140594103673520 -->\n",
"<g id=\"node9\" class=\"node\"><title>140594103673520</title>\n",
"<polygon fill=\"lightblue\" stroke=\"black\" points=\"191.5,-547 122.5,-547 122.5,-513 191.5,-513 191.5,-547\"/>\n",
"<text text-anchor=\"middle\" x=\"157\" y=\"-533.4\" font-family=\"Times,serif\" font-size=\"12.00\">weight_ih</text>\n",
"<text text-anchor=\"middle\" x=\"157\" y=\"-520.4\" font-family=\"Times,serif\" font-size=\"12.00\"> (512, 128)</text>\n",
"</g>\n",
"<!-- 140594103673520&#45;&gt;140594086599088 -->\n",
"<g id=\"edge8\" class=\"edge\"><title>140594103673520&#45;&gt;140594086599088</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M157,-512.842C157,-505.012 157,-495.54 157,-487.282\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"160.5,-487.042 157,-477.042 153.5,-487.042 160.5,-487.042\"/>\n",
"</g>\n",
"<!-- 140590859552080 -->\n",
"<g id=\"node10\" class=\"node\"><title>140590859552080</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"344,-420 226,-420 226,-399 344,-399 344,-420\"/>\n",
"<text text-anchor=\"middle\" x=\"285\" y=\"-406.4\" font-family=\"Times,serif\" font-size=\"12.00\">ThAddmmBackward</text>\n",
"</g>\n",
"<!-- 140590859552080&#45;&gt;140594085973184 -->\n",
"<g id=\"edge9\" class=\"edge\"><title>140590859552080&#45;&gt;140594085973184</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M273.155,-398.92C263.235,-390.896 248.856,-379.266 237.133,-369.784\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"239.143,-366.908 229.167,-363.341 234.741,-372.351 239.143,-366.908\"/>\n",
"</g>\n",
"<!-- 140594103675928 -->\n",
"<g id=\"node11\" class=\"node\"><title>140594103675928</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"329,-477 227,-477 227,-456 329,-456 329,-477\"/>\n",
"<text text-anchor=\"middle\" x=\"278\" y=\"-463.4\" font-family=\"Times,serif\" font-size=\"12.00\">ExpandBackward</text>\n",
"</g>\n",
"<!-- 140594103675928&#45;&gt;140590859552080 -->\n",
"<g id=\"edge10\" class=\"edge\"><title>140594103675928&#45;&gt;140590859552080</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M279.219,-455.92C280.112,-448.908 281.354,-439.144 282.459,-430.465\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"285.957,-430.703 283.748,-420.341 279.013,-429.819 285.957,-430.703\"/>\n",
"</g>\n",
"<!-- 140594103673296 -->\n",
"<g id=\"node12\" class=\"node\"><title>140594103673296</title>\n",
"<polygon fill=\"lightblue\" stroke=\"black\" points=\"305,-547 251,-547 251,-513 305,-513 305,-547\"/>\n",
"<text text-anchor=\"middle\" x=\"278\" y=\"-533.4\" font-family=\"Times,serif\" font-size=\"12.00\">bias_hh</text>\n",
"<text text-anchor=\"middle\" x=\"278\" y=\"-520.4\" font-family=\"Times,serif\" font-size=\"12.00\"> (512)</text>\n",
"</g>\n",
"<!-- 140594103673296&#45;&gt;140594103675928 -->\n",
"<g id=\"edge11\" class=\"edge\"><title>140594103673296&#45;&gt;140594103675928</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M278,-512.842C278,-505.012 278,-495.54 278,-487.282\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"281.5,-487.042 278,-477.042 274.5,-487.042 281.5,-487.042\"/>\n",
"</g>\n",
"<!-- 140594103674808 -->\n",
"<g id=\"node13\" class=\"node\"><title>140594103674808</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"420.5,-477 347.5,-477 347.5,-456 420.5,-456 420.5,-477\"/>\n",
"<text text-anchor=\"middle\" x=\"384\" y=\"-463.4\" font-family=\"Times,serif\" font-size=\"12.00\">TBackward</text>\n",
"</g>\n",
"<!-- 140594103674808&#45;&gt;140590859552080 -->\n",
"<g id=\"edge12\" class=\"edge\"><title>140594103674808&#45;&gt;140590859552080</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M366.756,-455.92C351.517,-447.454 329.056,-434.976 311.53,-425.239\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"312.82,-421.952 302.379,-420.155 309.421,-428.071 312.82,-421.952\"/>\n",
"</g>\n",
"<!-- 140594086081872 -->\n",
"<g id=\"node14\" class=\"node\"><title>140594086081872</title>\n",
"<polygon fill=\"lightblue\" stroke=\"black\" points=\"418.5,-547 349.5,-547 349.5,-513 418.5,-513 418.5,-547\"/>\n",
"<text text-anchor=\"middle\" x=\"384\" y=\"-533.4\" font-family=\"Times,serif\" font-size=\"12.00\">weight_hh</text>\n",
"<text text-anchor=\"middle\" x=\"384\" y=\"-520.4\" font-family=\"Times,serif\" font-size=\"12.00\"> (512, 128)</text>\n",
"</g>\n",
"<!-- 140594086081872&#45;&gt;140594103674808 -->\n",
"<g id=\"edge13\" class=\"edge\"><title>140594086081872&#45;&gt;140594103674808</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M384,-512.842C384,-505.012 384,-495.54 384,-487.282\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"387.5,-487.042 384,-477.042 380.5,-487.042 387.5,-487.042\"/>\n",
"</g>\n",
"<!-- 140594086405456 -->\n",
"<g id=\"node15\" class=\"node\"><title>140594086405456</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"229,-78 139,-78 139,-57 229,-57 229,-78\"/>\n",
"<text text-anchor=\"middle\" x=\"184\" y=\"-64.4\" font-family=\"Times,serif\" font-size=\"12.00\">TanhBackward</text>\n",
"</g>\n",
"<!-- 140594086405456&#45;&gt;140594086407248 -->\n",
"<g id=\"edge14\" class=\"edge\"><title>140594086405456&#45;&gt;140594086407248</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M176.51,-56.9197C170.602,-49.363 162.194,-38.6087 155.043,-29.4616\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"157.61,-27.0632 148.694,-21.3408 152.096,-31.3747 157.61,-27.0632\"/>\n",
"</g>\n",
"<!-- 140594086407136 -->\n",
"<g id=\"node16\" class=\"node\"><title>140594086407136</title>\n",
"<polygon fill=\"#caff70\" stroke=\"black\" points=\"246,-135 146,-135 146,-114 246,-114 246,-135\"/>\n",
"<text text-anchor=\"middle\" x=\"196\" y=\"-121.4\" font-family=\"Times,serif\" font-size=\"12.00\">ThAddBackward</text>\n",
"</g>\n",
"<!-- 140594086407136&#45;&gt;140594086405456 -->\n",
"<g id=\"edge15\" class=\"edge\"><title>140594086407136&#45;&gt;140594086405456</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M193.91,-113.92C192.363,-106.83 190.202,-96.9269 188.293,-88.1763\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"191.698,-87.3649 186.147,-78.3408 184.859,-88.8571 191.698,-87.3649\"/>\n",
"</g>\n",
"<!-- 140590859551800 -->\n",
"<g id=\"node17\" class=\"node\"><title>140590859551800</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"208,-192 110,-192 110,-171 208,-171 208,-192\"/>\n",
"<text text-anchor=\"middle\" x=\"159\" y=\"-178.4\" font-family=\"Times,serif\" font-size=\"12.00\">ThMulBackward</text>\n",
"</g>\n",
"<!-- 140590859551800&#45;&gt;140594086407136 -->\n",
"<g id=\"edge16\" class=\"edge\"><title>140590859551800&#45;&gt;140594086407136</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M165.445,-170.92C170.476,-163.441 177.614,-152.83 183.726,-143.745\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"186.702,-145.592 189.38,-135.341 180.894,-141.684 186.702,-145.592\"/>\n",
"</g>\n",
"<!-- 140594086081088&#45;&gt;140590859551800 -->\n",
"<g id=\"edge17\" class=\"edge\"><title>140594086081088&#45;&gt;140590859551800</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M156.523,-227.92C156.905,-220.908 157.438,-211.144 157.911,-202.465\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"161.413,-202.517 158.463,-192.341 154.424,-202.135 161.413,-202.517\"/>\n",
"</g>\n",
"<!-- 140590860325216 -->\n",
"<g id=\"node19\" class=\"node\"><title>140590860325216</title>\n",
"<polygon fill=\"lightgrey\" stroke=\"black\" points=\"328,-192 230,-192 230,-171 328,-171 328,-192\"/>\n",
"<text text-anchor=\"middle\" x=\"279\" y=\"-178.4\" font-family=\"Times,serif\" font-size=\"12.00\">ThMulBackward</text>\n",
"</g>\n",
"<!-- 140590860325216&#45;&gt;140594086407136 -->\n",
"<g id=\"edge19\" class=\"edge\"><title>140590860325216&#45;&gt;140594086407136</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M264.543,-170.92C252.004,-162.611 233.631,-150.436 219.063,-140.783\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"220.84,-137.761 210.57,-135.155 216.973,-143.596 220.84,-137.761\"/>\n",
"</g>\n",
"<!-- 140594086082376&#45;&gt;140590860325216 -->\n",
"<g id=\"edge20\" class=\"edge\"><title>140594086082376&#45;&gt;140590860325216</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M279,-227.92C279,-220.908 279,-211.144 279,-202.465\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"282.5,-202.341 279,-192.341 275.5,-202.341 282.5,-202.341\"/>\n",
"</g>\n",
"<!-- 140594086082264&#45;&gt;140590860325216 -->\n",
"<g id=\"edge22\" class=\"edge\"><title>140594086082264&#45;&gt;140590860325216</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M374.794,-227.92C356.526,-219.258 329.398,-206.396 308.67,-196.567\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"309.899,-193.277 299.363,-192.155 306.9,-199.602 309.899,-193.277\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x7fdddc39bda0>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lstm_cell = nn.LSTMCell(128, 128)\n",
"x = torch.randn(1, 128)\n",
"make_dot(lstm_cell(x), params=dict(list(lstm_cell.named_parameters())))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### LaTex rendering\n",
"\n",
"Besides writing equations in jupyter cells like that: $$D_{KL} = \\sum_i p(i) \\log \\frac{p(i)}{q(i)},$$\n",
"it is possible to write latex files that get compiled and rendered in Jupyter lab."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ipynb sharing\n",
"* https://gist.github.com\n",
"* https://nbviewer.jupyter.org"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Debugging\n",
"\n",
"`%pdb on` / `%pdb off` magick turns on debugging on errors"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Downsides\n",
"\n",
"**Not a complete IDE!**:\n",
"* Git integration is pain (although there are attemps to improve it)\n",
"* No linter\n",
"* Execution order is mess\n",
"* Code completion is not as good as VSCode or Atom (no completion outside of kernels)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## My workflow\n",
"\n",
"With JupyterLab:\n",
"* Keep track of experiments (converge curves, notes)\n",
"* Visualizations (debugging, share notebooks with other people)\n",
"* Start new jobs on cluster\n",
"\n",
"For writing code I use IDE (mostly vim, sometimes VSCode)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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",
"version": "3.6.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment