Skip to content

Instantly share code, notes, and snippets.

@gngdb
Last active October 17, 2019 20:05
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 gngdb/be8944dfae73f143e09c901c7a1229ea to your computer and use it in GitHub Desktop.
Save gngdb/be8944dfae73f143e09c901c7a1229ea to your computer and use it in GitHub Desktop.
Parameter redundancy from 5 pruning papers through time.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Making a figure to show the progression of parameter redundancy through time; neural networks used to be able to lose most of their parameters without affecting accuracy, but this is no longer true."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"plt.style.use('ggplot')\n",
"import numpy as np\n",
"import published # load csv\n",
"results = published.pruning"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'year': [2015.0, 2016.0, 2016.0, 2017.0, 2017.0],\n",
" 'top-1 before': [31.5, 25.03, 31.9, 36.69, 25.02],\n",
" 'top-1 after': [31.17, 27.83, 32.0, 36.66, 26.2],\n",
" 'params before': [138000000.0,\n",
" 21800000.0,\n",
" 15190000.0,\n",
" 132900000.0,\n",
" 9500000.0],\n",
" 'params after': [10350000.0, 19300000.0, 7450000.0, 23200000.0, 4800000.0],\n",
" 'bibtex_id': ['han2016deep',\n",
" 'li2016pruning',\n",
" 'alvarez2016learning',\n",
" 'liu2017learning',\n",
" 'huang2017condensenet'],\n",
" 'title': ['Deep Compression',\n",
" 'Pruning Filters for Efficient ConvNets',\n",
" 'Learning The Number of Neurons in Deep Networks',\n",
" 'Learning Efficient Convolutional Networks through Network Slimming',\n",
" 'CondenseNet: An Efficient DenseNet using Learned Group Convolutions']}"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x324 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"labels = results['bibtex_id']\n",
"before = results['params before']\n",
"after = results['params after']\n",
"\n",
"\n",
"x = np.arange(len(labels)) # the label locations\n",
"width = 0.35 # the width of the bars\n",
"\n",
"fig, ax = plt.subplots(1,2)\n",
"axl, axr = ax\n",
"rects1 = axl.bar(x - width/2, before, width, label='Baseline', alpha=0.5)\n",
"rects2 = axl.bar(x + width/2, after, width, label='Pruned', alpha=0.5)\n",
"\n",
"# Parameters barplot\n",
"axl.set_ylabel('Parameters')\n",
"axl.set_title('Parameters Before/After Pruning')\n",
"axl.set_xticks(x)\n",
"axl.set_xticklabels(labels, rotation=70)\n",
"axl.legend()\n",
"\n",
"def label(rects):\n",
" \"\"\"Attach a text label above each bar in *rects*, displaying its height.\"\"\"\n",
" for rect in rects:\n",
" height = rect.get_height()\n",
" axl.annotate('{}'.format(height),\n",
" xy=(rect.get_x() + rect.get_width() / 2, height),\n",
" xytext=(0, 3), # 3 points vertical offset\n",
" textcoords=\"offset points\",\n",
" ha='center', va='bottom')\n",
"\n",
"cratios = [a/b for b,a in zip(before, after)]\n",
"for rect, ratio in zip(rects2, cratios):\n",
" height = rect.get_height()\n",
" axl.annotate(f\"{100.*ratio:.2f}%\",\n",
" xy=(rect.get_x() + rect.get_width() / 2, height),\n",
" xytext=(0, 3), # 3 points vertical offset\n",
" textcoords=\"offset points\",\n",
" ha='center', va='bottom')\n",
"\n",
"#rects = axr.bar(x, results['top-1 after'], width, alpha=0.5, color='green')\n",
"#axr.set_ylabel('top-1 error')\n",
"#axr.set_title('Top-1 Error Progression')\n",
"#axr.set_xticks(x)\n",
"#axr.set_xticklabels(labels, rotation=70)\n",
"\n",
"# 50,000 examples in the validation set\n",
"# http://www.image-net.org/challenges/LSVRC/2012/\n",
"examples_parameters = [1000000*(1.-(e/100.))/p for e, p in zip(results['top-1 after'], after)]\n",
"rects = axr.bar(x, examples_parameters, width, alpha=0.5)\n",
"axr.set_ylabel('$10^6$*Accuracy/Parameters')\n",
"axr.set_title('Correct ImageNet Examples Per Parameter')\n",
"axr.set_xticks(x)\n",
"axr.set_xticklabels(labels, rotation=70)\n",
"for rect, year in zip(rects, results['year']):\n",
" height = rect.get_height()\n",
" axr.annotate(f\"{int(year)}\",\n",
" xy=(rect.get_x() + rect.get_width() / 2, height),\n",
" xytext=(0, 3), # 3 points vertical offset\n",
" textcoords=\"offset points\",\n",
" ha='center', va='bottom')\n",
"\n",
"fig.set_size_inches(10., 4.5)\n",
"\n",
"fig.tight_layout()\n",
"\n",
"plt.savefig(\"pruning-progression.pdf\", bbox_inches='tight')\n",
"plt.show()"
]
}
],
"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.9"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
# using python file to store data, it's weird I know
table =\
"""year, top-1 before, top-1 after, params before, params after, bibtex_id, title
2015, 31.50, 31.17, 138e6, 10.35e6, han2016deep, Deep Compression
2016, 25.03, 27.83, 21.8e6, 1.93e7, li2016pruning, Pruning Filters for Efficient ConvNets
2016, 31.9, 32.0, 15.19e6, 7.45e6, alvarez2016learning, Learning The Number of Neurons in Deep Networks
2017, 36.69, 36.66, 132.9e6, 23.2e6, liu2017learning, Learning Efficient Convolutional Networks through Network Slimming
2017, 25.02, 26.2, 9.5e6, 4.8e6, huang2017condensenet, CondenseNet: An Efficient DenseNet using Learned Group Convolutions
"""
import csv
from io import StringIO
with StringIO(table) as f:
reader = csv.reader(f, delimiter=',', skipinitialspace=True)
for i, r in enumerate(reader):
if i == 0:
cols = r
pruning = {c:[] for c in cols}
else:
for c,v in zip(cols, r):
pruning[c].append(v if c in ('bibtex_id', 'title') else float(v))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment