Skip to content

Instantly share code, notes, and snippets.

@pat-coady
Last active October 2, 2018 13:01
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pat-coady/01c28685c60b548c0b736418fa424e31 to your computer and use it in GitHub Desktop.
Save pat-coady/01c28685c60b548c0b736418fa424e31 to your computer and use it in GitHub Desktop.
Visualize Convolutional Neural Net (CNN) filters
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Tiny ImageNet: Visualize Layers\n",
"\n",
"Simple routine to visualize the first stack of 3x3 kernels (conv1_1 + conv2_2) before max-pooling. We see the typical patterns: horizontal, vertical and diagonal stripes, and various color spots. It is interesting (and reassuring) to see that two slightly different models learn similar filter kernels. \n",
"\n",
"Here is the basic procedure:\n",
"\n",
"1. Load a trained model\n",
"2. Apply an even gray image to the input (i.e. all 128s)\n",
"3. Take the gradient of a conv2_2 output (choosing a center \"pixel\") vs. input image \n",
" b. Repeat for each of the 64 filters\n",
"4. Crop the image gradient: it is mostly zeros except near the receptive field\n",
"5. Scale the gradients to fill 0-255 range in RGB\n",
"6. Arrange the 64 gradient crops into a single 8x8 image array and plot\n",
"\n",
"Python Notebook by Patrick Coady: [Learning Artificial Intelligence](https://learningai.io/)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from train import *\n",
"import tensorflow as tf\n",
"import matplotlib.pyplot as plt\n",
"import scipy.ndimage\n",
"\n",
"%matplotlib inline\n",
"plt.rcParams['figure.figsize'] = (10, 6)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class TrainConfig(object):\n",
" \"\"\"Training configuration\"\"\"\n",
" dropout_keep_prob = 1.0\n",
" model_name = 'vgg_16' # choose model \n",
" model = staticmethod(globals()[model_name])\n",
" config_name = 'no_hue' # choose training run"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def img_grad(config):\n",
" \"\"\"find gradient from pixel to img\"\"\"\n",
" with tf.Graph().as_default():\n",
" g = tf.get_default_graph()\n",
" img = tf.Variable(np.zeros((1, 56, 56, 3), dtype=np.uint8) + 128,\n",
" trainable=False,\n",
" dtype=tf.uint8,\n",
" collections=[tf.GraphKeys.LOCAL_VARIABLES])\n",
" logits = config.model(img, config)\n",
" pixels = g.get_tensor_by_name('conv1_2/BiasAdd:0')\n",
" float_img = g.get_tensor_by_name('Cast:0')\n",
" grads = []\n",
" for i in range(64):\n",
" grads.append(tf.gradients(pixels[0, 28, 28, i], float_img))\n",
" saver = tf.train.Saver()\n",
" init = tf.group(tf.global_variables_initializer(),\n",
" tf.local_variables_initializer())\n",
" with tf.Session() as sess:\n",
" init.run()\n",
" path = 'checkpoints/' + config.model_name + '/' + config.config_name\n",
" saver.restore(sess, tf.train.latest_checkpoint(path))\n",
" results = sess.run(grads)\n",
" \n",
" return results"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO:tensorflow:Restoring parameters from checkpoints/vgg_16/no_hue/model-44000\n"
]
}
],
"source": [
"config = TrainConfig()\n",
"result = img_grad(config)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nGT8TY2bW0evXbrq+S66dDnIrx56bcmu3NZnjK7Xqw9ImcmWPfPllufbH3vBGWc+an69aCjJMUR5n\nrqrzOJdb/ezWi11+zczs5hWdX1w/et6tFZf1dRQNNynUdC7s9IifMTy9TlykZta7Z1DWh0cuurUd\n8/oajubYtPftkPX3v3O/W+u9rDNOrz+gL6aHL4y5tadnJuTaSD64TqsT/nerTOt7s7QneKTl/Wul\nZjrHF5lf0ef7qUv+ji/o28tyz78i6++6e69bW7Z+/eGBbE2fsGzGf2YtB3ns/W+5U9YPf+Zxt7Zx\nk86TKvziAwAkhcYHAEgKjQ8AkBQaHwAgKTQ+AEBSaHwAgKTQ+AAASWkqxzc9rvNXLy0su7X6Lp29\n6p7okfXDR065tdveqUMxjWC+29SszqS1lv28z4P/5Va59rGjw7Les1NlEK9+/pSZWbah5/Gtlv25\nWi+dPSfX3rNd/w3VnW0iIxXNC5tvl/XDT/i5s4fO60zav33tQVnv3CW+3HNn5dpIpUvPhfyn6ja3\nNnxpo1xbOn5G1ocn/OOSXSeXWnTCRhb954KZ2T19fsb3M5/4kly79JbrZL11wJ85ObhL71gmyF1u\nuPFNsn7jT7zdrT26oHPN9xYelvVG/wW/OCpqFsZJrVDSz+paxj/fb733Jrn2de//pKx/7Lff69YW\nR6P8r49ffACApND4AABJofEBAJJC4wMAJIXGBwBICo0PAJAUGh8AIClN5fjW9+jsyXLWz+JN1PzM\nmJnZui0663Pgbp1TkoJc2OyKPiwrWf8DbrxNz2979NK8rI9O+celp03n+II4jg1W/bl0Zma7po65\ntbvz+nx1j+iM4HTZP2bz7Vc/V8vMLF/U+zXU7l9L217x86BmZjvO6Uxoi7iOR+VKs0YwQPHCRf0J\nX/zU59zaE0/qz76pVWezdg35s+VuXKfvjyjvtntLQdbvusPP033+zp+Xay9O6OfGd4f9+29xXq8N\nHhtWWxyR9XfUTrq1O2v6mGSW9Ty++Qti2wV9rqM5njNL+t7uLPjPpc88/Kxc+zu//TOyXplUOdvo\niefjFx8AICk0PgBAUmh8AICk0PgAAEmh8QEAkkLjAwAkJYgz6NdF13erETpmcxX/NdhHvn5eri1V\nK7K+/4ZwNoqg96vUomMDubz//u83Ts3Jte1drbJeXb36V3RDwWvmHRk/FtCxUJZrV9v0ftUy+pXq\n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\nRprdrzW9GtbwoIWfvKa7tZZ30DW8O4NNN3Od/uA+dSLXZr/4xQcASAqNDwCQFBofACApND4AQFJo\nfACApND4AABJaSrOUGjVfbPQ4o8AmZmty7VTqzlZbxcjQIIBOmaNYARIPRhdsurXK8Gr2tWa3nZb\nmz86KBe8+hsNNpmzNr3twiG39tjp3XLtYO24rPdm/TFUG4dG5drodE0HI1n6u9e5taGVFbl2ZkbM\nyDGzkfK8W2vv1d8rOl/jmW5Zrxb8+tHz/vcyMyuZmCVjZnft9q+VzPyUXBvt10pD39sXxv35WKeX\n9Ke/7c5BWa9d8kfsZDJiLtcV2FzS9dfu8Y/pwSE9qimYAGcPPz/n1o5M6P2K7q+FVX0d16r+w7gW\njCsrZyuyPtDv95h8dFAEfvEBAJJC4wMAJIXGBwBICo0PAJAUGh8AICk0PgBAUmh8AICkNJXjW63r\nAEhfj5+ou7jk52nMzBaGR2S9Z2OfX8zrvFqUM5qY1jm+i+cW3NrJczo/NShyKWZmr7lpg1vr6NF5\nmiiQc3piXNZ/8SNb3Nqjj3TJtYPlrbJeOH9O1qVgcklhYLOsbz6wz629NadzRL/zia/I+tGxWbd2\nz73Nna9KbVjWb37NhFs7MfGcXLvSoXOZHev9Y7qoL/FYSZ/QxbJ/TqZadXZruU+neOuX/dxma5ST\nDc7X0Uv6u52a8ENtf/xV/cx55059Lc3Mi2xkS3P5xHbTmeuBjP88XFn0a2Zm317Smc5il//cWS9X\navziAwAkhcYHAEgKjQ8AkBQaHwAgKTQ+AEBSaHwAgKTQ+AAASZE5vii3cuQFnQs7fnLSrX34/Tr3\n9bv/7T5Z/9xX/PluR8/qPE0mmJl32y36u/36R7a5tc2b/dlvZmajl/Qxe+rwebf27Ak9ty6yPPYF\nWX9h9JRb2/IGPS/s/EP6mPY1Ot1ahw3ItUGMz3bu0jP1brnVz9pVHn1Crv3Lz35N1vPX7XBr90T7\nFezY1vU6+3jXgWfc2vveeVauvf9P98p6rvPdohrkE6OkbFbP8/uxH8+7tZ/dr4fePfgXz8p6dc6f\nYXhd10a5NroSRxo66zpS958rT0z1y7XfeuW7sv4Lt4tHeZDWzgTna0NGn6/7NvjPpV3dOo+9eknf\nI2eXhvxiqxjKGuAXHwAgKTQ+AEBSaHwAgKTQ+AAASaHxAQCSQuMDACSFxgcASIpMeER5t3tv2yXr\nP/9jt7i1E8fH5Nq3fFDnp7Zv8vM4Q0N+ZswszicefsnPCJqZHT5x0q2Vlxfl2vYgA9VTLLi1bFFn\n6SL7duj161q/4dbesWtarp29+wZZH88d8ot6NGOoNufPpTMzmzw359b+4ds69zVner9/6tBNsq5E\ncyEXqjtl/esn/bzbrsK9cu3py/5sODOzzII/126T6bXRji2c83OVZmY7X7fJrV3fqbNyfz/j52DN\nzGw1OupKMH+0U8+9m6v7Odlbb9Q3weDsZVnv7/fnk87pWHN4HV6q6OfGo7N+dnm0V89G7dipn9Vd\ni6JF6RGGEr/4AABJofEBAJJC4wMAJIXGBwBICo0PAJAUGh8AIClNjSUam9avJc/M+q+RN/QkGbvz\nNdtlPVcUX72xrD88UGrxXxM3M1tcrri12op+fXe2npP1tqK/bf3J8Zib7X3Xy3rLK/6r4l1lHRmo\nXdDjmJaz/uvxwdvW1gheuB4+uSDrpy74tclp/9V5M7OP/Pstsr5zkz9OZmqmLtdGY26Kq3pUzckX\n/FfYv3uuV67tLOgbsKOuIgvN5U+6svr1+G9/yf/8xx72nylmZkOrg7Je7NH3djNKpuMMA1X/uVGY\n0PdXn4g5mZmdvSzugW49yim6Dist/r1rZvb8kl8/Fty7maKOxuRkZiG6v3z84gMAJIXGBwBICo0P\nAJAUGh8AICk0PgBAUmh8AICk0PgAAElpaixRPtvEiA8dS7FcMPok0whGo6i1wX4VCzrro+p+sur7\nQe/X7PJeXT8j6meu5vv888hEebdl/fdbUcQ6u9c1d8birJ4viF1aS1knHAdUcaEs124Ltm1+5CwU\n3V8tPfqYy03rqFz0WIkPuloa7Fd7Vm99a5tf39qmx/NEmhm2FOV/Owt61Fp80IXgfK4VfvEBAJJC\n4wMAJIXGBwBICo0PAJAUGh8AICk0PgBAUmh8AICkyBxfJMq1yLXNbHiNNbNfr24/nPsV5fyCxa9a\nr+Kv1pS1vL+u5a37w/rc+GHcLX7xAQCSQuMDACSFxgcASAqNDwCQFBofACApND4AQFJknCEadbHY\nt0XW2zb6Y27mFgbl2otPHpb1Uv2kW9u5qSbXWkPv2ab6hKx316fcWktWj6lZrLfK+kKLP7JlLNMt\n10a6WvTfOaPTK27t1Mi8XLtvd6+st4kRVtWGfl+6EZyvyVkxd8jMLsz49e7N/XLt1i49cyU374//\nybQ0t1/lsn8+zMzGpv3RXAPrSnLtupq+RzLtbW5twfT3ivZrtqxn0TTMPyd96/17z8xsakZ/t/6S\nf//VV3JybfTc6GroY7rS4l9Ls+1608sretuFqv/caQvur2i/bGlGlmemFvxaVa/t6dHX6dbNW93a\nXPnq03j84gMAJIXGBwBICo0PAJAUGh8AICk0PgBAUmh8AICk0PgAAElpaixRdXlW1g/t8mu59aJo\nZtM9Oo/z7DdV1m5Srg1V9LZnGn7optrw809mZi1lP/dlZpZv87NZ1iGXhvmpkVm97c//02W3dvDG\ndXLtzZt1EOnypL/tyUqUGNUuzeq/3+aznW7tffftkGs3L/gZJTOzl5/yM4I6DRqPe2nrCXJlExfc\nUr6iM2V1HTe1nk7/uCzUdLYxUmpblPXN68+7tdoNG+Ta+bEBWT/3gr/jQ/mKXBudsA2D+nF6RHz+\ngwWdRV1X18d857h/rexd1N8ruvvqy/o6PH90xK0dOX1Krl23Redo3/JWP9fc2toj1yr84gMAJIXG\nBwBICo0PAJAUGh8AICk0PgBAUmh8AICk0PgAAEkJAh464bF04mlZPzr9T27t9Yf2y7U3dG+T9YHr\n/Lzb86NyqTVM53HO5PfI+hP5O9za0333yLX3Tn9H1vfNPeXWSjYn10bOL+r9vu2OzW7tL37jVrn2\nu0+elfVnj/qptnxvMIwsyE8N7d0k6z95u5/t+smDOnf5tb/0M2VmZifExdZ7k86URddhdfsBWf/o\nr33Irf3Wb31Drs29eETW91f9mXm59UGOLzhfq506uzVb+7xb+7W7dsq1v/EnIgdrZuXZ+/yijqpa\nmHjrWpLljpv9HN/pNn1vT4/p63SgITJtQY4vE5yvwet3y/qefUNubcdL+h54/Lkzsn5hxM+K79lO\njg8AgCtC4wMAJIXGBwBICo0PAJAUGh8AICk0PgBAUmh8AICkNDWPryOr5zSdePK4Wzv92BNy7S23\nv07WC3mR3Srq7EikkdPDynrbptzatszLcm1b5pys54O5XJrO4+zsb5X1O2/udWuHX/Znv5mZ/eFD\nw7K+KuJVO/3Nmlm0V2brS3qOWnXSP+af/L1Lcu1f/PlpWd9/o583DXYrNDmsj+mX/5d/D61O6pl3\nN92g5xBuys+7tcvhBDdtuaBzl+2dP+vW/v6Lh/WHj+qMYM9KMIiwCRPDOovX2+3n/P7Fev94m5nV\nx/xcpZnZQFllYYtybWS52C3rb/upN7i1e9veI9fu+YLOm44e8+/PRjA3VeEXHwAgKTQ+AEBSaHwA\ngKTQ+AAASaHxAQCSQuMDACSlqThDZ5d+LXndwJ1ubXJkUq598Yx+hXbdJv/V/M7g7d1M8Dp2R92P\nK5iZ3VT2RwftXdSvW/fU9WvJ2VrNrS1ah1wb7VfB9Gv/J85Pu7VHJnXMYjZ4w31oIBg9JDSi8Vij\n47J+9LL/GvnYRT1KZu+d/sgVM7MdO/tkXQr2q3t+RNYrr/gjke4p6Nf28w095qas8ieF4AYLroXC\nuD7mZyr+yLLnL+mo0vSiHks00KvuAX1/RPtVmddxodxh/x66Z4sOvywtlmR9Zcl/lEcBqeAytNMn\ndKzmb/7efx4ODurneC6rR1wVc2q/iDMAAHBFaHwAgKTQ+AAASaHxAQCSQuMDACSFxgcASAqNDwCQ\nlIzKSD3wwANHzOyQV4/yVddKJhMNsglE+yU+vomlsTXfL//z1/JcN3u+ru116H/35k+X3q8mP/7q\nNX2+os9v5sOvfmmz52ttb/5mrO35avq4rZH777/f/Wb84gMAJIXGBwBICo0PAJAUGh8AICk0PgBA\nUmh8AICkRGOJjn1fvgUAAN8nMscHAMAPG/6rEwCQFBofACApND4AQFJofACApND4AABJofEBAJLy\nfwEj+5R+mqwlSAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f9ed2fd2518>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"composite = np.zeros((7*8, 7*8, 3), dtype=np.uint8)\n",
"for i in range(8):\n",
" for j in range(8):\n",
" idx = i * 8 + j\n",
" crop = np.squeeze(result[idx])[25:32, 25:32, :]\n",
" crop = crop / np.max([-np.min(crop), np.max(crop)])\n",
" crop = (crop * 127 + 128).astype(np.uint8)\n",
" composite[(i*7):(i*7+7), (j*7):(j*7+7), :] = crop\n",
" \n",
"plt.imshow(composite, interpolation='none')\n",
"# next 5 lines get rid of all white space when saving .png\n",
"plt.gca().set_axis_off()\n",
"plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, \n",
" hspace = 0, wspace = 0)\n",
"plt.margins(0,0)\n",
"plt.gca().xaxis.set_major_locator(plt.NullLocator())\n",
"plt.gca().yaxis.set_major_locator(plt.NullLocator())\n",
"plt.savefig('plots/kernel_viz_1.png', bbox_inches='tight',\n",
" pad_inches=0.0, dpi=64)\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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment