Skip to content

Instantly share code, notes, and snippets.

@kingjr
Created January 13, 2020 14:23
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 kingjr/334fe4d7968b931eb18f6af5b003c397 to your computer and use it in GitHub Desktop.
Save kingjr/334fe4d7968b931eb18f6af5b003c397 to your computer and use it in GitHub Desktop.
plot_arch.ipynb
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.patches import FancyBboxPatch"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"FONT_PARAMS = dict(size=15,\n",
" horizontalalignment='center', \n",
" verticalalignment='center')\n",
"ARROW_PARAMS = dict(head_width=.5, \n",
" head_length=.5, \n",
" zorder=-10,\n",
" fc='k', ec='k')\n",
"BOX_PARAMS = dict(boxstyle=\"round,pad=0.2\",\n",
" linewidth=1, ec='k')\n",
"\n",
"def plot_vertical(labels, colors, x0=0, y0=0, direction=1, width=1.5, height=1.5, font_color='k'):\n",
" ax = plt.gca()\n",
" \n",
" for idx, (label, color) in enumerate(zip(labels, colors)):\n",
" \n",
" x = idx+x0\n",
" y = idx+y0\n",
"\n",
" label = '$%s$' % label if len(label) else ''\n",
" ax.text(x+width/2., y+height/2, label, zorder=idx, color=font_color, **FONT_PARAMS)\n",
"\n",
" ax.add_patch(FancyBboxPatch((x, y), width, height, fc=color, zorder=idx,\n",
" **BOX_PARAMS))\n",
" \n",
" \n",
" if direction:\n",
" ax.arrow(x+width/2., y, 0, -y-1, **ARROW_PARAMS)\n",
" else:\n",
" ax.arrow(x+width/2., 0+height/2., 0, y-2, **ARROW_PARAMS)\n",
"\n",
"\n",
"def plot_hidden(label, color='limegreen', x=0, y=0, width=6, height=1, font_color='k'):\n",
" ax = plt.gca()\n",
" label = '$%s$' % label if len(label) else ''\n",
" plt.text(x+width/2, y+height/2, label, color=font_color, **FONT_PARAMS)\n",
"\n",
" ax.add_patch(FancyBboxPatch((x, y), width, height,fc=color,\n",
" **BOX_PARAMS))\n",
"\n",
"\n",
"\n",
"def plot_horizontal(label, color='palegreen', x=-3, y=0, width=1.5, height=1, direction=1, font_color='k'):\n",
" ax = plt.gca()\n",
" label = '$%s$' % label if len(label) else ''\n",
" ax.text(x+width/2, y+height/2, label, color=font_color, **FONT_PARAMS)\n",
"\n",
" ax.add_patch(FancyBboxPatch((x, y), width, height,fc=color,\n",
" **BOX_PARAMS))\n",
"\n",
" if direction:\n",
" ax.arrow(x, y+height/2., np.abs(x)-1, 0, **ARROW_PARAMS)\n",
" else:\n",
" ax.arrow(0, y+height/2., np.abs(x)+1, 0, **ARROW_PARAMS)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(-8, 8)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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9pKSEtasWcO3335LIBBok2PK/tLS0sjIyGDgwIEdco5/6Xha8mSosM/knXMBM/s5sIC6SyifOFDAR1J8fDwjRoxgxIgRbXG4diU1NVUPjxaRJkXkOnnn3BvAG5GoJSIikeOLuWukZbZs2cKcOXOI5MPc161bx1NPPRWxelA3e+e8efMiWnPx4sW8+uqrEa0p0h75YloDab7q6mrOOussli1bxrZt27jlllvCrlleXs6kSZNYv349gUCAq666qumdmrBz504mTpzItm3biIuLY9q0aWHXLCwsZMKECZSXl7NgwQLGjx8fdk2R9kpn8oeoG264gZUrVxIIBLjjjjv48MMPw6555ZVXsnnzZgKBADNnzmTJkiVh1XPOccEFF7Bt2zaqqqq49NJLWbMm9INHDlYgEODss89mz549VFZWMm3aNAoLC8OqKdKeKeQPQS+//DKPP/54w0NLysvLww67OXPm8OqrrzZc5VReXs6ZZ57Jzp07W1zzrrvu4pNPPqGqqgqA0tJSzjjjDMrLy1tc88YbbyQ3N7fhiqQ9e/YwZcoUqqurW1xTpF0LNe95a3+NGTPGiTdWr17tkpOTHXU3rDV8xcTEuDFjxrjq6upm11y4cKFLTEwMqhkXF+dOP/10V1tb2+ya7733XsiaCQkJ7qKLLmp2Peece/nll0PWTEpKcjNnzmxRTZG2BGS7ZuatQv4QUlpa6gYNGuTMLCjo9obddddd16ya27dvd7169QpZb2/NO++8s1k1CwoKXFpa2gFr/v3vf29WzW+++calpKQ0WjMxMdG99NJLzaop0tYU8tKo2tpad8EFF7iEhIRGg25vgL788ssHVbOmpsZNnDjRxcXFHbBmYmKie//99w+qZlVVlTvmmGNcTExMkzUXLVp0UDXLysrc4Ycf3ugvt71fycnJbvXq1QdVU8QLLQl5jckfItauXcu8efOIjo4mNTWV1NTUhqmP975OTU0lEAjwq18d3ARu2dnZvPPOO8TFxTXsHxsbG1bNt956i0WLFpGYmNiwf1RUVFDN6upqZs+efVA158+fT15eHikpKQ3777VvzYqKCu64446DqinSUYQ9rUFLRGpaA2me3NxcampqGl6/+eab3HTTTeTk7P+c27S0NDIzg5+X+13OOb7+ev+bmx966CHmzJkTVDM9PZ1evXrRlEAgwMqVK/dbdv311/PO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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Linear Regressive: Temporal Receptive Field\n",
"\n",
"U_labels = ['U_{t-n}', '...', 'U_{t-1}', 'U_t']\n",
"U_cmap = plt.get_cmap('Reds')\n",
"U_colors = U_cmap(np.linspace(.1, .5, len(U_labels)))\n",
"\n",
"plot_vertical(U_labels, U_colors, x0=0, y0=-6)\n",
"plot_hidden('H_t', width=4.5)\n",
"\n",
"Blues = plt.get_cmap('Blues')\n",
"plot_vertical(['\\hat{X}_{t+1}'], [Blues(.6)], x0=2, y0=3, direction=False)\n",
"plot_horizontal('H_{t-1}')\n",
"\n",
"plt.xlim(-4, 12)\n",
"plt.ylim(-8, 8)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(-8, 8)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Linear Auto-Regressive\n",
"\n",
"X_labels = ['X_{t-n}', '...', 'X_{t-m-1}', 'X_{t-m}']\n",
"X_cmap = plt.get_cmap('Blues')\n",
"X_colors = X_cmap(np.linspace(.1, .5, len(X_labels)))\n",
"\n",
"\n",
"U_labels = ['U_{t-n}', '...', 'U_{t-m-1}', 'U_{t-m}']\n",
"U_cmap = plt.get_cmap('Reds')\n",
"U_colors = U_cmap(np.linspace(.1, .5, len(U_labels)))\n",
"\n",
"plot_vertical(U_labels, U_colors, x0=0, y0=-6, width=2.5)\n",
"plot_vertical(X_labels, X_colors, x0=6, y0=-6, width=2.5)\n",
"plot_hidden('H_t', width=11.5)\n",
"plot_horizontal('H_{t-1}')\n",
"\n",
"plot_vertical(['\\hat{X}_{t+1}'], [Blues(.6)], x0=5, y0=3, direction=False)\n",
"\n",
"\n",
"plt.xlim(-4, 12)\n",
"plt.ylim(-8, 8)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(-8, 16)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"X_labels = ['X_n', '...', 'X_m']\n",
"X_cmap = plt.get_cmap('Blues')\n",
"X_colors = X_cmap(np.linspace(.1, .5, len(X_labels)))\n",
"plot_vertical(['S'], ['w'], x0=4, width=3.5, y0=-2, height=1)\n",
"\n",
"U_labels = ['U_n', '...', 'U_m']\n",
"U_cmap = plt.get_cmap('Reds')\n",
"U_colors = U_cmap(np.linspace(.1, .5, len(U_labels)))\n",
"\n",
"plot_vertical(U_labels, U_colors, x0=0, y0=-6)\n",
"plot_vertical(X_labels, X_colors, x0=4, y0=-7)\n",
"plot_hidden('Conv', y=0, width=3.5, color='w')\n",
"plot_hidden('Conv', y=2, width=3.5, color='w')\n",
"plot_hidden('Conv', y=0, x=4, width=3.5, color='w')\n",
"plot_hidden('Conv', y=2, x=4, width=3.5, color='w')\n",
"plot_hidden('LSTM', y=4, width=7.5)\n",
"plot_horizontal('', y=4)\n",
"\n",
"plot_hidden('LSTM', y=6, width=7.5)\n",
"plot_horizontal('', y=6)\n",
"\n",
"plot_hidden('Conv', y=8, width=7.5, color='w')\n",
"plot_hidden('Conv', y=10, width=7.5, color='w')\n",
"\n",
"plot_vertical(['\\hat{X}_{t+1}'], [Blues(.6)], x0=3.5, y0=13, direction=False)\n",
"\n",
"\n",
"plt.xlim(-4, 12)\n",
"plt.ylim(-8, 16)"
]
},
{
"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.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment