Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@akiross
Last active March 12, 2024 16:31
Show Gist options
  • Star 45 You must be signed in to star a gist
  • Fork 13 You must be signed in to fork a gist
  • Save akiross/754c7b87a2af8603da78b46cdaaa5598 to your computer and use it in GitHub Desktop.
Save akiross/754c7b87a2af8603da78b46cdaaa5598 to your computer and use it in GitHub Desktop.
Few experiments on how convolution and transposed convolution (deconvolution) should work in tensorflow.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Convolution Arithmetics with TensorFlow\n",
"A practical introduction to convolution with TF.\n",
"\n",
"Size and padding policies of TF are described in:\n",
"https://www.tensorflow.org/api_docs/python/nn.html#convolution\n",
"\n",
"Animated GIFs comes from: https://github.com/vdumoulin/conv_arithmetic\n",
"and I suggest reading their article: https://arxiv.org/abs/1603.07285"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ed35dea58>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"import numpy as np\n",
"import tensorflow as tf\n",
"from matplotlib import pyplot as plt # Used to plot stuff\n",
"plt.set_cmap('viridis') # Specify the color mapping (value -> color)\n",
"\n",
"def show_pixel_image(*images, width=2, height=2, show_text=False, int_values=True):\n",
" '''Plot the data wihout interpolation, optionally displaying\n",
" the values over the cells'''\n",
" from itertools import product\n",
" # Scale image size\n",
" plt.figure(figsize=(width * len(images), height))\n",
" # Plot each figure in a row\n",
" for i, data in enumerate(images, 1):\n",
" plt.subplot(1, len(images), i)\n",
" plt.axis('off') # Hide axis\n",
" plt.imshow(data, interpolation='nearest')\n",
" if show_text:\n",
" if int_values:\n",
" for y, x in product(range(data.shape[0]), range(data.shape[1])):\n",
" plt.text(x, y, int(data[y,x]), va='center', ha='center')\n",
" else:\n",
" for y, x in product(range(data.shape[0]), range(data.shape[1])):\n",
" plt.text(x, y, data[y,x], va='center', ha='center')\n",
"\n",
"def conv2d(image, kernel, strides, padding):\n",
" '''Prepare tf.nn.conv2d op for the given input.\n",
" Strides shall be a (height, width) tuple/list.'''\n",
" c_batch = tf.constant(image, dtype=tf.float32)\n",
" img = tf.reshape(c_batch, (1, image.shape[0], image.shape[1], 1))\n",
" c_kern = tf.constant(kernel, dtype=tf.float32)\n",
" ker = tf.reshape(c_kern, (kernel.shape[0], kernel.shape[1], 1, 1))\n",
" return tf.nn.conv2d(img, ker, strides=(1,)+strides+(1,), padding=padding)\n",
"\n",
"def conv2d_t(image, kernel, out_shape, strides, padding):\n",
" '''Prepare tf.nn.conv2d_transpose op for the given input.'''\n",
" c_batch = tf.constant(image, dtype=tf.float32)\n",
" img = tf.reshape(c_batch, (1, image.shape[0], image.shape[1], 1))\n",
" c_kern = tf.constant(kernel, dtype=tf.float32)\n",
" ker = tf.reshape(c_kern, (kernel.shape[0], kernel.shape[1], 1, 1))\n",
" shape = tf.pack((1,)+out_shape+(1,))\n",
" return tf.nn.conv2d_transpose(img, ker, shape, strides=(1,)+strides+(1,), padding=padding)\n",
"\n",
"def show_conv2d(image, kernel, strides, padding, **kwargs):\n",
" '''Run conv2d and shows the images'''\n",
" with tf.Session() as sess:\n",
" out = conv2d(image, kernel, strides, padding).eval()\n",
" out = out.reshape(out.shape[1], out.shape[2])\n",
" show_pixel_image(image, kernel, out, show_text=True, **kwargs)\n",
"\n",
"def show_conv2d_any_pad(image, kernel, strides, padding=[(0, 0), (0, 0)], **kwargs):\n",
" '''Like show_conv2d, but uses tf.pad to add custom padding to height or width of the input image.\n",
" The VALID method is used.'''\n",
" with tf.Session() as sess:\n",
" c_batch = tf.constant(image, dtype=tf.float32)\n",
" img = tf.reshape(c_batch, (1, image.shape[0], image.shape[1], 1))\n",
" p_img = tf.pad(img, [(0, 0)] + padding + [(0, 0)])\n",
" c_kern = tf.constant(kernel, dtype=tf.float32)\n",
" ker = tf.reshape(c_kern, (kernel.shape[0], kernel.shape[1], 1, 1))\n",
" op = tf.nn.conv2d(p_img, ker, strides=(1,) + strides + (1,), padding='VALID')\n",
" _, i_h, i_w, _ = p_img.get_shape()\n",
" _, o_h, o_w, _ = op.get_shape()\n",
" show_pixel_image(p_img.eval().reshape(i_h, i_w), kernel, op.eval().reshape(o_h, o_w), **kwargs)\n",
"\n",
"def compute_out_and_padding(in_size, filter_size, stride, method):\n",
" '''This function returns output size and padding along a single dimension\n",
" according to the tensorflow policies.'''\n",
" from math import ceil\n",
" \n",
" if method == 'VALID':\n",
" out_size = ceil((in_size - filter_size + 1) / stride)\n",
" return out_size, 0\n",
" elif method == 'SAME':\n",
" out_size = ceil(in_size / stride)\n",
" padding = ((out_size - 1) * stride + filter_size - in_size) / 2\n",
" return out_size, padding\n",
" else:\n",
" return None\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nSSfx6KeCewAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ecfb0a4a8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Few images that we will use to explore the operations\n",
"image2_diag = np.array([[0, 1], [1, 0]])\n",
"\n",
"image3_vert = np.array([[0, 1, 0], [0, 1, 0], [0, 1, 0]])\n",
"image3_cent = np.array([[0, 0, 0], [0, 1, 0], [0, 0, 0]])\n",
"image3_cros = np.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]])\n",
"image3_diag = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])\n",
"\n",
"image4_dots = np.array([[1,0,1,0], [0,1,0,1], [1,0,1,0], [0,1,0,1]])\n",
"image4_squa = np.array([[1,1,0,0], [1,1,0,0], [0,0,1,1], [0,0,1,1]])\n",
"image4_ring = np.array([[1,1,1,1], [1,0,0,1], [1,0,0,1], [1,1,1,1]])\n",
"\n",
"show_pixel_image(image2_diag, image3_vert, image3_cent, image3_cros, image3_diag, image4_dots, image4_squa, image4_ring, show_text=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"No padding, no strides ![no padding, no strides](https://github.com/vdumoulin/conv_arithmetic/raw/master/gif/no_padding_no_strides.gif)\n",
"\n",
"Using the VALID padding, strides will be always zero, and the output size will be 2, because, according to [tensorflow convolution arithmetic](https://www.tensorflow.org/api_docs/python/nn.html#convolution), we have\n",
"\n",
" out_size = ceil((in_size - filter_size + 1) / stride)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(2, 0)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"compute_out_and_padding(4, 3, 1, 'VALID')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First we use a 3x3 kernel with 1 just in the center and 0 elsewhere. Using VALID padding, conv2d will consider only the 4 centermost pixels, it will just copy them to a new image, because the corner pixels will be weighted 0."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAhcAAAC3CAYAAAChWnyPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAADjlJREFUeJzt3c9rlFm+x/H3yWjSkq7Jj0bDRAodf6CQTXTTIA1C7ItZ\nTW+8Lu1/wn/AjasBFy5mJfMHDLjoRYMMuEkvpFumo9zApROMMViTkXTEK4mpita5i6ZrOj3TpjOc\n1DmV5/1aPlA8H77E4uNT55wnxBiRJElKpS93AEmStL9YLiRJUlKWC0mSlJTlQpIkJWW5kCRJSVku\nJElSUpYLSZKUlOVCkiQlZbmQJElJWS4kSVJSlgtJkpSU5UKSJCVluZAkSUlZLiRJUlKWC0mSlJTl\nQpIkJXUgd4AU2iunY+4MAJfHJ3NH6LjXmM0dAShrJn9t/yV04z7/1fffRfw9qmzd+nss5fuxJCV9\nL5Ui9d+jTy4kSVJSlgtJkpSU5UKSJCVluZAkSUlZLiRJUlKWC0mSlJTlQpIkJWW5kCRJSVkuJElS\nUpYLSZKUVKXLxcyDN3z2eYP6uUUOjC/wxb31rHmW4wJfxS+5H+/ydbzPq7jW9QwlzaSEeUiSdq/S\n5WJ9o83kxAC3bx4mdOWU/1+2EpeZ5zEnmOBjPqXGEN8yQys2u5qjlJmUMg9J0u7tixeX/aempwaZ\nnhoEIGZ+tc8z5jnKCcbDMQDOxvOsskKDpxznTNdylDKTUuYhSdq9Sj+5KEU7tnnNS0Y50rkWQmCU\nI7zi+4zJ8nAektTbLBcF2KJJJNLPwLbr/QzQYjNTqnychyT1NsuFJElKqtJrLkpxkAECgRbbFyu2\naNLPB5lS5eM8/tVyXGCJ72ixyYcMc4ZJhsJo7lg7MrdUTT65KEBf6KPGCGu86FyLMbLGC4b4KGOy\nPJzHdr26c8bcUnVVulysb7R5NNdk9n9++NJYXNri0VyT5edbXc9yjNM85wmNuMR6/D/+l7/R5h3j\nHO9qjlJmUso8SvDTnTOD4bec5Ty/4QANnuaO9l7mlqqr0j+LPJxtcunKc0KAEOD6jVUArl2tcefW\nWFezjIU6rdjiCXO02KTGMOf4hP4wsPOHEyplJqXMI7cfd878nrOdayEERmPZO2fMLVVbpcvFxQuH\neNs4lTtGRz2cpM7JrBlKmkkJ88jtfTtnNnidKdXOzC1VW6V/FpEkSelZLqSC9erOGXNL1Wa5kArW\nqztnzC1VW6XXXEi94BinmeMbanGEIUZ4xnxP7Jwxt1RdlgupcL26c8bcUnVZLqQe0Ks7Z8wtVZNr\nLiRJe2bmwRs++7xB/dwiB8YX+OLeeu5I2S3HBb6KX3I/3uXreJ9XcS13pOQsF5KkPbO+0WZyYoDb\nNw8TQu40+VXleHl/FpEk7ZnpqUGmpwYBiDFzmAL89Hh5gLPxPKus0OApxzmTOV06PrmQJKkLfjxe\nfpQjnWshBEbZf8fLWy4kSeqC9x0v32IzU6q9sS9+Frk8Ppk7AgD3GrO5I3Q4E0lSLj65kCSpC6p0\nvLzlQpKkLqjS8fL74mcRSVKZ1jfaLCxudXaKLC5t8WiuyehwH/WjB/OGy6Aqx8tbLiRJe+bhbJNL\nV54TAoQA12+sAnDtao07t8Yyp+u+qhwvb7mQJO2ZixcO8bZxKneMolTheHnXXEiSpKQsF5IkKSnL\nhSRJSspyIUmSkrJcSJKkpCwXkiQpKbeiAstxgSW+o8UmHzLMGSYZCqNdu//Mgzf88U8v+dvjJn//\nxzvu/vl3/OHyYNfu/3O55wHlzaQKevU9MKW8R0fSP1X+ycVKXGaex5xggo/5lBpDfMsMrdjc+cOJ\nrG+0mZwY4PbNw4TQtdv+WyXMA8qaiSRpdyr/5OIZ8xzlBOPhGABn43lWWaHBU45zpisZpqcGmZ76\n4X/lPx6Rm0sJ84CyZiJJ2p1KP7loxzaveckoRzrXQgiMcoRXfJ8xWR7OQ5KUQqXLxRZNIpF+tp/p\n3s8ALTYzpcrHeUiSUqh0uZAkSelVulwcZIBAoMX2xYotmvTzQaZU+TgPSVIKlS4XfaGPGiOs8aJz\nLcbIGi8Y4qOMyfJwHpKkFCq/W+QYp5njG2pxhCFGeMY8bd4xzvGuZVjfaLOwuNXZFbG4tMWjuSaj\nw33Ujx7sWg4oYx5Q1kwkSbtT+XIxFuq0YosnzNFikxrDnOMT+sPAzh9O5OFsk0tXnhMChADXb6wC\ncO1qjTu3xrqWA8qYB5Q1E0nS7lS+XADUw0nqnMx2/4sXDvG2cSrb/X8u9zygvJlIkn69Sq+5kCRJ\n6VkuJElSUpYLSZKUlOVCkiQlZbmQJElJWS4kSVJSbkWVesByXGCJ72ixyYcMc4ZJhsJo7ljvNfPg\nDX/800v+9rjJ3//xjrt//h1/uDyYO9av0ovzlkrikwupcCtxmXkec4IJPuZTagzxLTO0YnPnD2e0\nvtFmcmKA2zcPE0LuNL9er85bKolPLqTCPWOeo5xgPBwD4Gw8zyorNHjKcc5kTvfLpqcGmZ764UnF\nj8e494JenbdUEp9cSAVrxzaveckoRzrXQgiMcoRXfJ8x2f7kvKU0LBdSwbZoEon0s/3dLv0M0GIz\nU6r9y3lLaVguJElSUvtizcW9xmzuCABcHp/MHaHDmfyrv7ZzJ9i9gwwQCLTYvpiwRZN+PsiUav/a\nj/Mu6d9gKUr5ftzPfHIhFawv9FFjhDVedK7FGFnjBUN8lDHZ/uS8pTT2xZMLaT87xmnm+IZaHGGI\nEZ4xT5t3jHM8d7T3Wt9os7C41dkpsri0xaO5JqPDfdSPHswb7j16dd5SSSwXUuHGQp1WbPGEOVps\nUmOYc3xCfxjY+cMZPZxtcunKc0KAEOD6jVUArl2tcefWWOZ0v6xX5y2VxHIh9YB6OEmdk7lj7MrF\nC4d42ziVO8Z/pBfnLZXENReSJCkpy4UkSUrKciFJkpKyXEiSpKQsF5IkKSnLhSRJSqrS5WLmwRs+\n+7xB/dwiB8YX+OLeetY8y3GBr+KX3I93+Tre51Vc63qGkmZSwjwkSbtX6XKxvtFmcmKA2zcPE0Le\nLCtxmXkec4IJPuZTagzxLTO0YnPnDydUykxKmYckafcqfYjW9NQg01ODAJ0jinN5xjxHOcF4OAbA\n2XieVVZo8JTjnOlajlJmUso8JEm7V+knF6VoxzaveckoRzrXQgiMcoRXfJ8xWR7OQ5J6m+WiAFs0\niUT62f7ugn4GaLGZKVU+zkOSepvlQpIkJWW5KMBBBggEWmxfrNiiST8fZEqVj/OQpN5muShAX+ij\nxghrvOhcizGyxguG+ChjsjychyT1tkrvFlnfaLOwuNXZFbG4tMWjuSajw33Ujx7sapZjnGaOb6jF\nEYYY4RnztHnHOMe7mqOUmZQyD0nS7lW6XDycbXLpynNCgBDg+o1VAK5drXHn1lhXs4yFOq3Y4glz\ntNikxjDn+IT+MLDzhxMqZSalzEOStHuVLhcXLxzibeNU7hgd9XCSOiezZihpJiXMQ5K0e5UuF5L+\n6fL4ZO4IkvYJF3RKkqSkLBeSJCkpy4UkSUrKciFJkpKyXEiSpKQsF5IkKSnLhSRpTy3HBb6KX3I/\n3uXreJ9XcS13pGxmHrzhs88b1M8tcmB8gS/ureeOtCcsF5KkPbMSl5nnMSeY4GM+pcYQ3zJDKzZ3\n/vA+tL7RZnJigNs3DxNC7jR7x0O0JEl75hnzHOUE4+EYAGfjeVZZocFTjnMmc7rum54aZHpqEKDz\nDqf9yCcXkqQ90Y5tXvOSUY50roUQGOUIr/g+YzLtNcuFJGlPbNEkEuln+wsH+xmgxWamVOqGffGz\nSCnvRLjXmM0docOZSJJy8cmFJGlPHGSAQKDF9sWbLZr080GmVOoGy4UkaU/0hT5qjLDGi861GCNr\nvGCIjzIm017bFz+LSJLKdIzTzPENtTjCECM8Y5427xjneO5oWaxvtFlY3OrsFFlc2uLRXJPR4T7q\nRw/mDZeQ5UKStGfGQp1WbPGEOVpsUmOYc3xCfxjY+cP70MPZJpeuPCcECAGu31gF4NrVGndujWVO\nl47lQpK0p+rhJHVO5o5RhIsXDvG2cSp3jD1nuZB6wHJcYInvaLHJhwxzhkmGwmjuWDsyt1RNLuiU\nCterxyebW6ouy4VUuJ8enzwYfstZzvMbDtDgae5o72VuqbosF1LBevX4ZHNL1Wa5kArWq8cnm1uq\nNsuFJElKynLBDyvDv4pfcj/e5et4n1dxrav3n3nwhs8+b1A/t8iB8QW+uLfe1fv/XO55QHkzyaVX\nj082t1RtlS8XJawMX99oMzkxwO2bhwmha7f9t0qYB5Q1k5x69fhkc0vVVvlzLn66MhzgbDzPKis0\neMpxznQlw/TUINNTgwCdI2FzKWEeUNZMcuvV45PNLVVXpcvFjyvDf8/ZzrUQAqOxmivDnUeZevX4\nZHNL1VXpcvG+leEbvM6UKh/nUa5ePT7Z3FI1VX7NhSRJSqvS5cKV4ds5D0lSCpUuF64M3855SJJS\nqPSaCyhjZfj6RpuFxa3OrojFpS0ezTUZHe6jfvRg13JAGfOAsmYiSdqdypeLElaGP5xtcunKc0KA\nEOD6jVUArl2tcefWWNdyQBnzgLJmIknancqXC8i/MvzihUO8bZzKdv+fyz0PKG8mkqRfr9JrLiRJ\nUnqWC0mSlJTlQpIkJWW5kCRJSVkuJElSUpYLSZKUlOVCkiQlZbmQJElJWS4kSVJSlgtJkpSU5UKS\nJCUV4o+vnZQkSUrAJxeSJCkpy4UkSUrKciFJkpKyXEiSpKQsF5IkKSnLhSRJSspyIUmSkrJcSJKk\npCwXkiQpKcuFJElKynIhSZKSslxIkqSkLBeSJCkpy4UkSUrKciFJkpKyXEiSpKQsF5IkKSnLhSRJ\nSspyIUmSkrJcSJKkpCwXkiQpKcuFJElKynIhSZKSslxIkqSkLBeSJCkpy4UkSUrKciFJkpKyXEiS\npKQsF5IkKan/B0Ilni+fNj3qAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ed08f70f0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nkrJcSJKkpP4PLTCKcndcWJgAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ef4519c50>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nLgCAov4HMRUrXlhuC6IAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec95fc5f8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_conv2d(image4_dots, image3_cent, (1, 1), 'VALID')\n",
"show_conv2d(image4_squa, image3_cent, (1, 1), 'VALID')\n",
"show_conv2d(image4_ring, image3_cent, (1, 1), 'VALID')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We now try with a different kernel: a vertical line. With VALID, it will consider only the pixels in the 4x4 image, without padding it. The output pixel will copy the values of the top, center and bottom pixels. "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nTC3W+IBRasxRoZdd7KUzdN37xRm9e7bKk4euEAKEAM+9eAOAI4crHDs6kDndl2vVvqWStPW4uNvJ\n8FluZUqVj32UazhsZZituWMsyRN7Vrfsxz+3Yt9SSdr+zIUkSUqrrceFJ8MXsw9JUgptPS48Gb6Y\nfUiSUmjrMxdQxsnwkk7Vl9AHlNWJJGlp2n5clHAyvKRT9SX0AWV1IklamrYfF5D/ZHhpp+pz9wHl\ndSJJun9tfeZCkiSl57iQJElJOS4kSVJSjgtJkpSU40KSJCXluJAkSUk5LiRJUlKOC0mSlJTjQpIk\nJeW4kCRJSTkuJElSUiF+8WsnJUmSEvDOhSRJSspxIUmSknJcSJKkpBwXkiQpKceFJElKynEhSZKS\nclxIkqSkHBeSJCkpx4UkSUrKcSFJkpJyXEiSpKQcF5IkKSnHhSRJSspxIUmSknJcSJKkpBwXkiQp\nKceFJElKynEhSZKSclxIkqSkHBeSJCkpx4UkSUrKcSFJkpJyXEiSpKQcF5IkKSnHhSRJSspxIUmS\nknJcSJKkpBwXkiQpKceFJElK6n8BWEpu4L+3HRkAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec93db5c0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec9339908>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n5nQvdvHsEBfP/rZSESv0muOqzlsqiSsXUsF6sccTVhljf/9aCIEx9vOYXzMm252ct5SG5UIq2CYd\nIpEGzeeuN2jSZSNTqt3LeUtpWC4kSVJStS4XMzee8tEnS7SnF3hrYp5vrq/VOkdJWUrJkdsgTQKB\nLs9vJuzSocGeTKl2L+ctpVHrclHKbvZScpSUpZQcuQ2EAVqMssLD/rUYIys8ZJh3MibbnZy3lEat\nT4uUspu9lBwlZSklRwkOcZRZvqMVRxlmlHvM0WOLCSZzR3uptfUe8wub/ee3sLjJrdkOYyMDtA8O\n5g33ElWdt1SSWpcLqQrGQ5tu7HKXWbps0GKEaU7TCM1X35zR9zc7nLv0gBAgBLjy6SMALn/c4qur\n45nTvVhV5y2VxHIhVUA7HKHNkdwxtuXMqb08W3o/d4zfpYrzlkpS6z0XkiQpPcuFJElKynIhSZKS\nqvWei1J2s5eSo6QspeSQJG1frctFKbvZS8lRUpZSckiStq/W5aKU3eyl5IByspSSQ5K0fe65kCRJ\nSVkuJElSUpYLSZKUlOVCkiQlZbmQJElJWS4kSVJSlgtJkpSU5UKSJCVluZAkSUlZLiRJUlKWC0mS\nlFSI//nZSUmSpARcuZAkSUlZLiRJUlKWC0mSlJTlQpIkJWW5kCRJSVkuJElSUpYLSZKUlOVCkiQl\nZbmQJElJWS4kSVJSlgtJkpSU5UKSJCVluZAkSUlZLiRJUlKWC0mSlJTlQpIkJWW5kCRJSVkuJElS\nUpYLSZKUlOVCkiQlZbmQJElJWS4kSVJSlgtJkpSU5UKSJCVluZAkSUlZLiRJUlKWC0mSlJTlQpIk\nJWW5kCRJSf0/lAGHQva8aiMAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec9626828>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_conv2d(image4_dots, image3_vert, (1, 1), 'VALID')\n",
"show_conv2d(image4_squa, image3_vert, (1, 1), 'VALID')\n",
"show_conv2d(image4_ring, image3_vert, (1, 1), 'VALID')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Half (same) padding, no strides ![half padding, no strides](https://github.com/vdumoulin/conv_arithmetic/raw/master/gif/same_padding_no_strides.gif)\n",
"\n",
"In this case, we do the same thing as we did earlier, but using the SAME padding: the kernel is now allowed to go outside the input image, and values outside it are padded with zeroes, but the center pixel of the kernel will always match a pixel of the input image. The output image will get larger, because now we can apply the kernel to every pixel of it, instead of the central ones.\n",
"\n",
"According to TF arithmetics, we have an output image of 4, and a padding of 1: the 3x3 kernel will get one pixel outside the input image on both sides (1 extra pixel top, left, bottom and right)."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(4, 1.0)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"compute_out_and_padding(4, 3, 1, 'SAME')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As far as I know, there are no arbitrary or full paddings in tensorflow.\n",
"\n",
"Note how, using `image3_cent`, we just copy the input to the output, because paddings and neighbors are ignored."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nucMNurGTO9quzC3Vk8NCKtxDFjnMMebCEabCf3Kac/wHb7DK/dzRdmVuqZ4cFlLBerHHM57Q4mD/\nWQiBFgd5yk8Zk+3O3FJ9OSykgm3TIRKZpFF5PkmDLluZUu3N3FJ9OSwkSVIyDgt+vQH+Tfya6/Eq\n38brPI3rQ/38Gzd/5oNPVmmfXeaNuSW+urYx1M//rdx9QHmd5LKPBoFAl+rFwS4dJtmfKdXezD0+\nPA+q7GNvtR8WJdwA39jsMX+mwZefv00IQ/vYlyqhDyirk5wmwgRNZlnnUf9ZjJF1HjHNgYzJdmfu\n8eB5UGUfg6n9/7H4/zfAAU7HczxmjVXuc5RTQ8lw+fwUl89PARDjUD7ylUroA8rqJLcjnGSBWzTj\nLNPM8pBFejxnjqO5o+3K3KPP86DKPgZT62GxcwP8j5zuPwsh0Ir1vAFuH2U6FNp0Y5cfWKDLFk1m\nOMt7TIbG3j+ckblHm+dBlX0MrtbDYrcb4Js8y5QqH/soVzscp83x3DF+N3OPLs+DKvsYXO3vWEiS\npHRqPSy8AV5lH5J2eB5U2cfgaj0svAFeZR+SdngeVNnH4Gp9xwLKuAG+sdljaXm7f7t3+cE23y10\naM1M0D68b2g5oIw+oKxOpLryPKiyj8HUfliUcAP89t0OFz78kRAgBPj0s8cAfPxRkytfHBpaDiij\nDyirE6muPA+q7GMwtR8WkP8G+Pvvvskvqyeyff5v5e4DyutEqivPgyr72Fut71hIkqS0HBaSJCkZ\nh4UkSUrGYSFJkpJxWEiSpGQcFpIkKRmHhSRJSsZhIUmSknFYSJKkZBwWkiQpGYeFJElKJsSdr0eT\nJEl6Tb6xkCRJyTgsJElSMg4LSZKUjMNCkiQl47CQJEnJOCwkSVIyDgtJkpSMw0KSJCXjsJAkSck4\nLCRJUjIOC0mSlIzDQpIkJeOwkCRJyTgsJElSMg4LSZKUjMNCkiQl47CQJEnJOCwkSVIyDgtJkpSM\nw0KSJCXjsJAkSck4LCRJUjIOC0mSlIzDQpIkJeOwkCRJyTgsJElSMg4LSZKUjMNCkiQl47CQJEnJ\n/C8IeTl4s7YvJAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec94f2668>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ecd794c18>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nhlcjY+47dcoAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ecdaa3cf8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_conv2d(image4_dots, image3_cent, (1, 1), 'SAME')\n",
"show_conv2d(image4_squa, image3_cent, (1, 1), 'SAME')\n",
"show_conv2d(image4_ring, image3_cent, (1, 1), 'SAME')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we use `image3_vert` instead, we will go outside the figure and have a padded input."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n0TgsJElSNP8PhvIWuHiudx0AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec9376390>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nMW71CV0BWQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec94efa58>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n8/86zqW+rp0vCAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec94e34e0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_conv2d(image4_dots, image3_vert, (1, 1), 'SAME')\n",
"show_conv2d(image4_squa, image3_vert, (1, 1), 'SAME')\n",
"show_conv2d(image4_ring, image3_vert, (1, 1), 'SAME')"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"Let's see now what happens using strides with the VALID padding.\n",
"\n",
"![no padding, with strides](https://github.com/vdumoulin/conv_arithmetic/raw/master/gif/no_padding_strides.gif)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(3, 0)\n",
"(2, 0)\n",
"(1, 0)\n"
]
}
],
"source": [
"print(compute_out_and_padding(4, 2, 1, 'VALID'))\n",
"print(compute_out_and_padding(4, 2, 2, 'VALID'))\n",
"print(compute_out_and_padding(4, 2, 3, 'VALID'))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ed08f70b8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec921db70>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec9441eb8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_conv2d(image4_dots, image2_diag, strides=(1, 1), padding='VALID')\n",
"show_conv2d(image4_dots, image2_diag, (1, 2), 'VALID')\n",
"show_conv2d(image4_dots, image2_diag, (1, 3), 'VALID') "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With SAME padding and strides"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(4, 0.5)\n",
"(2, 0.0)\n",
"(2, 0.5)\n"
]
},
{
"data": {
"image/png": "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\nZAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec91b5940>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfkAAADJCAYAAAAgu0v9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAD09JREFUeJzt3V1onFd+x/HvmdiSHWVWL6mtRNqpvXaMvXUXZNM2SzAE\nlJSoNxvYTd3SC6cvl2EvCrlY9qKQm1DogktD2fbCpBQKpUvNNmVT3FC3oECziZvYpqJLpFi2FU8U\nR5brpJI1I3tOL1xpLSWLlyLPOTrz/dz5gcfz4+8Jv5wzz0uIMSJJkspTSR1AkiTdH5a8JEmFsuQl\nSSqUJS9JUqEseUmSCmXJS5JUKEtekqRCWfKSJBXKkpckqVCWvCRJhbLkJUkqlCUvSVKhLHlJkgpl\nyUuSVChLXpKkQm1JHUCSVJ5fr/xmTJ1hM3qj9YOwkX+fK3lJkgplyUuSVChLXpKkQlnykiQVypKX\nJKlQlrwkSYWy5CVJKpQlL0lSoSx5SZIKVcQT71qz+7J4stIzQyOpI6w6VT+bOgKQ10w2+klSP4tP\n+vq8XL6POak8MtmW76M6myt5SZIKZclLklQoS16SpEIV8Zu8JKlMM3GKS7xPkyUeoo/9jNAbBlLH\nAvLOtsKVvCQpS7NxhknOs4eDPM7TVOnlPcZpxkbqaFlnu5slL0nK0mUmGWYPQ2EXPeFLHOAwD7CF\nOhdTR8s6290seUlSdlqxxWdcZ4Cdq8dCCAywkxtcS5gs72zrWfKSpOws0yAS6aJ7zfEuummylCjV\nHTlnW8+SlySpUJa8JCk7W+kmEGiy9kK2Jg262JYo1R05Z1uvo0t+/K2bPPt8ndqhabYMTfHaqYWk\neWbiFG/G1zkdT/J2PM2NON/2DDnNJId5SEqjEipU6Weeq6vHYozMc5VeHk6YLO9s63V0yS8sthg5\n2M0rL+8gJH6KdC63Y+Qyk1zmISmdXezjCheox0ssxE/5Ce/S4jZD7E4dLetsd+voh+GMjfYwNtoD\nQEz8SpG7b8cAOBAPM8csdS6ym/1ty5HLTHKZh6R0BkONZmxygQmaLFGlj0McoSt03/vkDs52t44u\n+Vys3I7xFQ6sHgshMBDzux2jHZyHpBW1sJcae1PH+EI5Z1vR0dv1udhMt2O0g/OQpI1hyUuSVChL\nPgOb6XaMdnAekrQxLPkMbKbbMdrBeUjSxujoC+8WFltMTS+vXkU+fWmZcxMNBvoq1Ia3tjXLLvYx\nwTtUYz+99HOZySS3Y+Qyk1zmIUmbWUeX/JmzDZ567gohQAjw4ktzABw7WuXE8cG2ZsnldoxcZpLL\nPCRpM+vokn/yie3cqj+WOsaqHG7HyGkmOcxDkjYzf5OXJKlQlrwkSYWy5CVJKpQlL0lSoSx5SZIK\nZclLklSojr6FTirVTJziEu/TZImH6GM/I/SGgdSxkhh/6ybf+/513j3f4KOPb3Py1Uf5xjM9qWMV\n71T9bOoIwpW8VJzZOMMk59nDQR7naar08h7jNGPj3icXaGGxxcjBbl55eQchpE4jtZcreakwl5lk\nmD0MhV0AHIiHmWOWOhfZzf7E6dpvbLSHsdE7K/eVxzVLncKVvFSQVmzxGdcZYOfqsRACA+zkBtcS\nJpOUgiUvFWSZBpFIF2uf8d9FN02WEqWSlEoR2/XPDI2kjgDkdaGJM5EkuZKXCrKVbgKBJmsvsmvS\noIttiVJJSsWSlwpSCRWq9DPP1dVjMUbmuUovDydMJimFIrbrJf3ULvYxwTtUYz+99HOZSVrcZojd\nqaMlsbDYYmp6efXK+ulLy5ybaDDQV6E2vDVtOOk+s+SlwgyGGs3Y5AITNFmiSh+HOEJX6L73yQU6\nc7bBU89dIQQIAV58aQ6AY0ernDg+mDiddH9Z8lKBamEvNfamjpGFJ5/Yzq36Y6ljSEn4m7wkSYWy\n5CVJKpQlL0lSoSx5SZIKZclLkrLzx382z9d/Y4a+fR/w6Nem+ebvfcT7HzRTxwLyzraeJS9Jys74\nj5d44fd7+fcf1fjnvxti+VZk7Lfr3LzZSh0t62zreQsdMBOnuMT7NFniIfrYzwi9YaBtnz/+1k2+\n9/3rvHu+wUcf3+bkq4/yjWd62vb566WeB+Q3E0nt9aO/GVrz51f/dJBHvjbNf5xvcOTx7YlS3ZFz\ntvU6fiU/G2eY5Dx7OMjjPE2VXt5jnGZs3PvkDbKw2GLkYDevvLyDENr2sV8oh3lAXjORlN5/f3qb\nEGCg74HUUT4n52wdv5K/zCTD7GEo7ALgQDzMHLPUuchu9rclw9hoD2Ojd1apK4/eTCWHeUBeM5GU\nVoyRP/yjOY782jZ+aX9X6jhr5JwNOrzkW7HFZ1znKxxYPRZCYCDu5AbXEiZLw3lIytEL3/mE/3q/\nyfhrX04d5XNyzgYdvl2/TINIpIu1z/TuopsmS4lSpeM8JOXm29/9hH/6l0VO//0wjw7mtS7NOduK\nPFNJkjret7/7Ca+dWuBfTw7zi1/O642BOWe7W0eX/Fa6CQSarL2orEmDLrYlSpWO85CUixe+c5W/\n/eH/8MO/epSeBwMff3ILgN5qhW3b0m5C55xtvY4u+UqoUI39zHOVHdy5JSLGyDxXqdF5b61yHpJy\n8Zd//SkhwOi3rqw5fuL4To4d/VKiVHfknG29ji55gF3sY4J3qMZ+eunnMpO0uM0Qu9uWYWGxxdT0\n8upV5NOXljk30WCgr0JtuL3bQDnMA/KaiaT2y/n1wDlnW6/jS34w1GjGJheYoMkSVfo4xBG6Qve9\nT94gZ842eOq5K4QAIcCLL80BcOxolRPHB9uWA/KYB+Q1E0narDq+5AFqYS819ib7/Cef2J7V/xmm\nngfkNxNJ2ozyukJAkiRtGEtekqRCWfKSJBXKkpckqVCWvCRJhbLkJUkqlCUvSVKhLHlJkgplyUuS\nVChLXpKkQlnykiQVymfXS5I23DNDI6kjbEpvtDb27yui5E/Vz6aOAOT1pXYmn7fR//H8LLnMPic5\nfQ9y0a7vozqb2/WSJBXKkpckqVCWvCRJhbLkJUkqlCUvSVKhLHlJkgplyUuSVChLXpKkQlnykiQV\nypKXJKlQlrwkSYXq6JIff+smzz5fp3Zomi1DU7x2aiFpnpk4xZvxdU7Hk7wdT3Mjzrc9Q04zyWEe\nkrSZdXTJLyy2GDnYzSsv7yCEtFlm4wyTnGcPB3mcp6nSy3uM04yNtubIZSa5zEOSNrMi3kL3/zU2\n2sPYaA8AMabNcplJhtnDUNgFwIF4mDlmqXOR3exvW45cZpLLPCSlNROnuMT7NFniIfrYzwi9YSB1\nLCDvbCs6eiWfi1Zs8RnXGWDn6rEQAgPs5AbXEiZLw3lIgrx39HLOdjdLPgPLNIhEuuhec7yLbpos\nJUqVjvOQBGt39HrClzjAYR5gC3Uupo6Wdba7WfKSpOzkvKOXc7b1LPkMbKWbQKDJ2m2eJg262JYo\nVTrOQ1LOO3o5Z1vPks9AJVSo0s88V1ePxRiZ5yq9PJwwWRrOQ5I2RkdfXb+w2GJqenn1KvLpS8uc\nm2gw0FehNry1rVl2sY8J3qEa++mln8tM0uI2Q+xua45cZpLLPCSlkfOOXs7Z1uvokj9ztsFTz10h\nBAgBXnxpDoBjR6ucOD7Y1iyDoUYzNrnABE2WqNLHIY7QFbrvffIGymUmucxDUhqVUKEa7+zo7WAI\n+OmOXo3HzPZz6uiSf/KJ7dyq5/MPUgt7qbE3aYacZpLDPCSlk/OOXs7Z7tbRJS9JylfOO3o5Z7ub\nJS9JylbOO3o5Z1vh1fWSJBXKkpckqVCWvCRJhbLkJUkqlCUvFWT8rZs8+3yd2qFptgxN8dqphdSR\nsjATp3gzvs7peJK342luxPnUkaS2sOSlgiwsthg52M0rL+8ghNRp8rBZXgkq3Q/eQicVZGy0h7HR\nHoDVRxN3urtfCQpwIB5mjlnqXGQ3+xOnk+4vV/KSirWZXgkq3Q+WvKRibaZXgkr3QxHb9c8MjaSO\nAMCp+tnUEVY5E0mSK3lJxdpMrwSV7gdLXlKxKqFClTuvBF2x8krQXh5OmExqjyK26yXdsbDYYmp6\nefXK+ulLy5ybaDDQV6E2vDVtuEQ2yytBpfvBkpcKcuZsg6eeu0IIEAK8+NIcAMeOVjlxfDBxujQ2\nyytBSzN1/OupIwhLXirKk09s51b9sdQxsrMZXgkq3Q/+Ji9JUqEseUmSCmXJS5JUKEtekqRCWfKS\nJBXKkpckqVCWPDATp3gzvs7peJK342luxPm2fv74Wzd59vk6tUPTbBma4rVTC239/PVSzwPym4kk\nbUYdX/KzcYZJzrOHgzzO01Tp5T3GacbGvU/eIAuLLUYOdvPKyzsIoW0f+4VymAfkNRNJ2qw6/mE4\nl5lkmD0MhV0AHIiHmWOWOhfZzf62ZBgb7WFstAdg9XGkqeQwD8hrJpK0WXX0Sr4VW3zGdQbYuXos\nhMAAO7nBtYTJ0nAeklSWji75ZRpEIl2sfYZ1F900WUqUKh3nIUll6eiSlySpZB1d8lvpJhBosvai\nsiYNutiWKFU6zkOSytLRF95VQoVq7Geeq+xgCIAYI/NcpUbnvcnLeUjKxdIHF7hx+t9ofvghtz/9\njJ1/8Ls8+MsHU8cC8s62Xkev5AF2sY8rXKAeL7EQP+UnvEuL2wyxu20ZFhZbnJtocPY/76ygpy8t\nc26iwcyV5bZlWJHDPCCvmUhqv1azSdfwEAPf+mbqKJ+Tc7b1OnolDzAYajRjkwtM0GSJKn0c4ghd\nofveJ2+QM2cbPPXcFUKAEODFl+YAOHa0yonjg23LAXnMA/KaiaT2e/CrB3jwqwcA+CRxlvVyzrZe\nx5c8QC3spcbeZJ//5BPbuVXPZzs89Twgv5lI0mbU8dv1kiSVypKXJKlQlrwkSYWy5CVJKpQX3kmS\nstNqNLg1d434f2+oWp67RvNKncqDD7Klv89sPydLXpKUnebMh8z++V+s/vn6P/wj14GHfvVX+IXf\n+a10wcg723qWvCQpO9se28vu43+SOsYXyjnbev4mL0lSoSx5SZIKZclLklQoS16SpEIVceHdG60f\nhNQZcvNGK3WCzlV5ZNLv4zp+H6U0XMlLklQoS16SpEJZ8pIkFcqSlySpUJa8JEmFsuQlSSqUJS9J\nUqEseUmSChVW3ocrSZLK4kpekqRCWfKSJBXKkpckqVCWvCRJhbLkJUkqlCUvSVKhLHlJkgplyUuS\nVChLXpKkQlnykiQVypKXJKlQlrwkSYWy5CVJKpQlL0lSoSx5SZIKZclLklQoS16SpEJZ8pIkFcqS\nlySpUJa8JEmFsuQlSSqUJS9JUqEseUmSCmXJS5JUKEtekqRCWfKSJBXKkpckqVCWvCRJhbLkJUkq\n1P8Cnap8hKV4M/0AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec9563a58>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\ny62kcrvxnbR8yQMMhN0MsDva5z/68Gauz6RzOjz2PCC9mUjSipXbjT/LvtXXQgj0lundbtzyp+sl\nSfpdNNPtxpa8JEmZsuQlSfodNNPtxpa8JEm/g0qoUOXm7cYrVm437uKuiMl+mxfeSZKSU6/VuD57\nifKDHaqWZy9RTM9Q6ehgQ0935HQ3bzce402qZQ9d9HCW8Si3G9+JJS9JSk4xdY7z331p9e/5H/+E\neWDL5x7kM198Jl6wD6Ryu/GdWPKSpORs2rObnaPfjh3jY6Vwu/Gd+Ju8JEmZsuQlScqUJS9JUqYs\neUmSMpXFhXev1X8QYmdIzWv12AlaV+Xucb+PH+H3UYrDlbwkSZmy5CVJypQlL0lSpix5SZIyZclL\nkpQpS16SpExZ8pIkZcqSlyQpU2Flr15JkpQXV/KSJGXKkpckKVOWvCRJmbLkJUnKlCUvSVKmLHlJ\nkjJlyUuSlClLXpKkTFnykiRlypKXJClTlrwkSZmy5CVJypQlL0lSpix5SZIyZclLkpQpS16SpExZ\n8pIkZcqSlyQpU5a8JEmZsuQlScqUJS9JUqYseUmSMmXJS5KUKUtekqRMWfKSJGXKkpckKVOWvCRJ\nmbLkJUnKlCUvSVKm/g+blmdar0+4MwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ecdae4358>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"print(compute_out_and_padding(4, 2, 1, 'SAME'))\n",
"print(compute_out_and_padding(4, 2, 2, 'SAME'))\n",
"print(compute_out_and_padding(4, 2, 3, 'SAME'))\n",
"show_conv2d(image4_dots, image2_diag, strides=(1, 1), padding='SAME')\n",
"show_conv2d(image4_dots, image2_diag, (1, 2), 'SAME')\n",
"show_conv2d(image4_dots, image2_diag, (1, 3), 'SAME')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the **first case**, note how the kernel starts from the top-left corner and moves right 4 times before stopping: the last time, half of the kernel is outside the image and the value 0 is used where there are no pixels. Note that the computed value for the padding is 0.5, meaning that there is no padding on the left (top), but there will be padding of 1 at the right (bottom).\n",
"\n",
"In the **second case**, the kernel starts as before on the top-left corner and it moves just once, without overflow on the right side of the image. Two values are computed and there is no need for padding (computed padding is, in fact, 0).\n",
"\n",
"In the **third case**, the computed padding is again 0.5 and, in fact, the kernel overflows the input of 1 pixel on the right.\n",
"\n",
"In general, having a `int(n) + 0.5` computed padding means that the overflow will be of `n` pixels on left (top) side, but there will be a `n+1` overflow of the kernel on the right (bottom) side.\n",
"\n",
"With a kernel of size 3, it may happen that the computed padding value is of 1.0, meaning that the kernel will overflow 1 pixel on the left (top) and right (bottom) sides, as shown below in the first and third examples, where the kernel is centered in the top-left corner (and, therefore, it overflows of 1 pixels on the left and top sides, which are padded with 0)."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(4, 1.0)\n",
"(2, 0.5)\n",
"(2, 1.0)\n"
]
},
{
"data": {
"image/png": "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\n0TgsJElSNP8PhvIWuHiudx0AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec9532710>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nRK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ecd7ef908>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nuUgHD0dMlifnrdw0/e76FHbSprQLOYV5QFoziW0jjzLMe5SKLjro4iyjVFmkj8HY0W5rZrbK2PjC\n0r/f+JkFTg2X6e5sYaB/Vdxwt9Go85ZqaeqS//dO2q+xdelcCIHuojl30jqPNPWGASpFhY8ZpsI8\nJTrZwW5aQ9udPxzR+yfLPHXgPCFACPDci5cBOHSwxJHDvZHT3VqjzluqpalL/nY7aWeZjpQqHueR\nroGwmQE2x45xT57ctZrrE4/EjvEfacR5S7U0/T15SZJy1dQl707a5ZyHJOWlqS/Xt4QWSsWNnbQ9\n9AH/t5N2gMa8zPjfcB6SUjFVXOIMI0wzRZl5HmMXPaEvdiwg7WwrNXXJQxo7aVPahZzCPCCtmUiq\nv0UWKdFJH4Oc5m+x4yyTcraVmr7kU9hJm9Iu5BTmAWnNRFL9rQ3rWcv6GweJPUabcraVmr7kIf5O\n2tR2IceeB6Q3E0lqRE298U6SpJxZ8pIkZcqSlyQpU5a8JEmZcuOdJCk5i8V1Zvli6XiOGaaLK6yi\nlfbwYMRkaWdbyZKXJCXnGlN8wDtLxyOcAmADg2zjiVixgLSzrWTJS5KS0xV62MuB2DFqSjnbSt6T\nlyQpU5a8JEmZsuQlScqUJS9JUqZCUST+dn1JUsP5Tsv3LZf/wNvVP4T7+fNcyUuSlClLXpKkTFny\nkiRlypKXJClTlrwkSZmy5CVJypQlL0lSpix5SZIy5ctwJEnKlCt5SZIyZclLkpQpS16SpExZ8pIk\nZcqSlyQpU5a8JEmZsuQlScqUJS9JUqYseUmSMmXJS5KUKUtekqRMWfKSJGXKkpckKVOWvCRJmbLk\nJUnKlCUvSVKmLHlJkjJlyUuSlClLXpKkTFnykiRlypKXJClTlrwkSZmy5CVJypQlL0lSpix5SZIy\nZclLkpQpS16SpExZ8pIkZcqSlyQpU/8LYjr+h7942JEAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ecd8e7240>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"print(compute_out_and_padding(4, 3, 1, 'SAME'))\n",
"print(compute_out_and_padding(4, 3, 2, 'SAME'))\n",
"print(compute_out_and_padding(4, 3, 3, 'SAME'))\n",
"show_conv2d(image4_dots, image3_vert, strides=(1, 1), padding='SAME')\n",
"show_conv2d(image4_dots, image3_vert, (1, 2), 'SAME')\n",
"show_conv2d(image4_dots, image3_vert, (1, 3), 'SAME')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With a kernel size of 4, we may in fact obtain a computed padding of 1.5, meaning that 1 pixel will overflow on the left (top), but 2 pixels will overflow on the right (bottom)."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(4, 1.5)\n",
"(2, 1.0)\n",
"(2, 1.5)\n"
]
},
{
"data": {
"image/png": "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\nSZIS838A0BQekDSLNSoAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ecdade780>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"print(compute_out_and_padding(4, 4, 1, 'SAME'))\n",
"print(compute_out_and_padding(4, 4, 2, 'SAME'))\n",
"print(compute_out_and_padding(4, 4, 3, 'SAME'))\n",
"show_conv2d(image4_dots, image4_ring, strides=(1, 1), padding='SAME')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Transposed convolution (\"deconvolution\")\n",
"\n",
"A transposed convolution (a.k.a fractionally strided convolution, backward convolution or deconvolution) swaps the sizes of the input and the output of a regular convolution: if you convolve an input of size 4x4 with a kernel 3x3 and method VALID, you get a 2x2 output. The transpose of this convolution takes a 2x2 input and applies a 3x3 kernel to produce a 4x4 output.\n",
"\n",
"Let's start by seeing how it is done in TF. The `tf.nn.conv2d_transpose` operation is used."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAhcAAAC3CAYAAAChWnyPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAD5RJREFUeJzt3e9rnXf9x/HnFdOTdun55kdZ65Id2/UHjQRHWm8Mt8Iw\nKzSgTISxm3P+AwNhNxR3ZyjbncnA3ZiiZegNGXxZFUFZEYdSwWLH2hWDsoSlbVzahjZdCElzTppz\nfW+MHc38btkZn+TzuXI9HzcvenFevHdWXr3O5/O5sjzPkSRJCqUjdgBJkrS1WC4kSVJQlgtJkhSU\n5UKSJAVluZAkSUFZLiRJUlCWC0mSFJTlQpIkBWW5kCRJQVkuJElSUJYLSZIUlOVCkiQFZbmQJElB\nWS4kSVJQlgtJkhSU5UKSJAXVGTtACM1rh/LYGQBODIzEjtByeuZC7AhAWjP5Q/N/s834nFS+j+1K\n6b9VGfh9jMfv+n8L/X30yYUkSQrKciFJkoKyXEiSpKAsF5IkKSjLhSRJCspyIUmSgrJcSJKkoCwX\nkiQpKMuFJEkKynIhSZKCKnW5OHP2Nt/41gy1I1N0Dkzy29OLUfNM55P8Jf89b+Sn+Fv+BvP53KZn\nSGkmKcxDktS+UpeLxaUmI8NdvPTc3WSbcsr/x7uWTzPBRfYzzAMcp0oP5zlDI69vao5UZpLKPCRJ\n7dsSLy77rMZGuxkb7QYgj/xqnytMMMh+BrK9AAzlR7nBNWa4xD4Ob1qOVGaSyjwkSe0r9ZOLVDTz\nJgvcop/drWtZltHPbua5GTFZHM5DkorNcpGAFerk5FToWnO9QhcNliOlisd5SFKxWS4kSVJQpV5z\nkYptdJGR0WDtYsUGdSpsj5QqHuex1pmzt3nh5Vu8dbHO1eurnHrlHh490R071qcynU9ymXdosMxO\nejnMCD1Zf+xY6ypqbikVPrlIQEfWQZU+5phtXcvznDlm6WFXxGRxOI+1UtnB066i7vgpam4pJaV+\ncrG41GRyaqW1K2Lq8gpvj9fp7+2gNrhtU7Ps5RDjnKOa99FDH1eYoMkqA+zb1BypzCSVeaQglR08\n7Srqjp+i5pZSUupy8eaFOo889h5ZBlkGTz97A4AnHq9y8sU9m5plT1ajkTd4l3EaLFOllyMco5J1\nrX9zQKnMJJV56LP5cMfPfQy1rmVZRn+e9o6fouaWUlPqcvHwgzu4M3MwdoyWWnaAGgeiZkhpJinM\nQ5/NJ+34WWIhUqr1FTW3lBrXXEiSpKAsF5KCK+qOn6LmllJjuZAUXFF3/BQ1t5SaUq+5kIoglR08\n7Srqjp+i5pZSYrmQEpfKDp52FXXHT1FzSymxXEiJS2kHT7uKuuOnqLmlVFguJEkb4ie/mOenv5zn\n0vQdAIYPV3jmO32tQ+HKqgzHy7ugU5K0IWqDnTz//V2cO30v507fy1cf2sE3v32Vf7zTiB0tmrIc\nL2+5kCRtiK8d/+Do+oP3VTh4X4UffHcXO7s7OPvWcuxo0fzn8fLd2f8wxFE+RyczXIodLSjLhSRp\nwzWbOa/+ZoGl2zlf+XI5zwz58Hj5fna3rmVZRj9b73h511xIkjbM3/9Z56Gv/4vlek51Zwevnfw8\nQ4cqsWNFUabj5bdEuTgxMBI7AgCnZy7EjtDiTCSlYOhghfN//ALvz69y6neLPPnULH/69WBpC0ZZ\n+LOIJGnDdHZm7N+7jaP3b+eH39vF/cMVfvzz92PHiqJMx8tbLiRJmyZvQr2Rx44RRZmOl98SP4tI\nktLzzPM3GRu9i9pAJwuLTX712gJ//uttXn91IHa0aMpyvLzlQpK0Ia7fWOXJp65zdXaVnmoHX/pi\nhddfHWD02F2xo0VTluPlLReSpA3xsx/tXv8PlVAZjpd3zYUkSQrKciFJkoKyXEiSpKAsF5IkKSjL\nhSRJCspyIUmSgnIrKjCdT3KZd2iwzE56OcwIPVn/pn3+mbO3eeHlW7x1sc7V66uceuUeHj3RvWmf\n/1Gx5wHpzaQdqbzXpV1FfQ9MUectbWWlf3JxLZ9mgovsZ5gHOE6VHs5zhkZeX//mQBaXmowMd/HS\nc3eTZZv2sf+vFOYBac1EktSe0j+5uMIEg+xnINsLwFB+lBtcY4ZL7OPwpmQYG+1mbPSDf5XnkY/c\nT2EekNZMJEntKfWTi2beZIFb9PPvU+SyLKOf3cxzM2KyOJyHJCmEUpeLFerk5FRYe6Z7hS4aLEdK\nFY/zkCSFUOpyIUmSwit1udhGFxkZDdYuVmxQp8L2SKnicR6SpBBKXS46sg6q9DHHbOtanufMMUsP\nuyImi8N5SJJCKP1ukb0cYpxzVPM+eujjChM0WWWAfZuWYXGpyeTUSmtXxNTlFd4er9Pf20FtcNum\n5YA05gFpzUSS1J7Sl4s9WY1G3uBdxmmwTJVejnCMSta1/s2BvHmhziOPvUeWQZbB08/eAOCJx6uc\nfHHPpuWANOYBac1EktSe0pcLgFp2gBoHon3+ww/u4M7MwWif/1Gx5wHpzUSS9OmVes2FJEkKz3Ih\nSZKCslxIkqSgLBeSJCkoy4UkSQrKciFJkoJyK6pUANP5JJd5hwbL7KSXw4zQk/XHjvWJzpy9zQsv\n3+Kti3WuXl/l1Cv38OiJ7tixPpUizltKiU8upMRdy6eZ4CL7GeYBjlOlh/OcoZHX1785osWlJiPD\nXbz03N1kWew0n15R5y2lxCcXUuKuMMEg+xnI9gIwlB/lBteY4RL7OBw53ccbG+1mbPSDJxUfHuNe\nBEWdt5QSn1xICWvmTRa4RT+7W9eyLKOf3cxzM2Kyrcl5S2FYLqSErVAnJ6fC2ne7VOiiwXKkVFuX\n85bCsFxIkqSgtsSai9MzF2JHAODEwEjsCC3O5L/9oRk7Qfu20UVGRoO1iwkb1KmwPVKqrWsrzjul\n/wdTkcrfj1uZTy6khHVkHVTpY47Z1rU8z5ljlh52RUy2NTlvKYwt8eRC2sr2cohxzlHN++ihjytM\n0GSVAfbFjvaJFpeaTE6ttHaKTF1e4e3xOv29HdQGt8UN9wmKOm8pJZYLKXF7shqNvMG7jNNgmSq9\nHOEYlaxr/ZsjevNCnUcee48sgyyDp5+9AcATj1c5+eKeyOk+XlHnLaXEciEVQC07QI0DsWO05eEH\nd3Bn5mDsGJ9JEectpcQ1F5IkKSjLhSRJCspyIUmSgrJcSJKkoCwXkiQpKMuFJEkKqtTl4szZ23zj\nWzPUjkzROTDJb08vRs0znU/yl/z3vJGf4m/5G8znc5ueIaWZpDAPSVL7Sl0uFpeajAx38dJzd5Nl\ncbNcy6eZ4CL7GeYBjlOlh/OcoZHX1785oFRmkso8JEntK/UhWmOj3YyNdgO0jiiO5QoTDLKfgWwv\nAEP5UW5wjRkusY/Dm5YjlZmkMg9JUvtK/eQiFc28yQK36Gd361qWZfSzm3luRkwWh/OQpGKzXCRg\nhTo5ORXWvrugQhcNliOlisd5SFKxWS4kSVJQlosEbKOLjIwGaxcrNqhTYXukVPE4D0kqNstFAjqy\nDqr0Mcds61qe58wxSw+7IiaLw3lIUrGVerfI4lKTyamV1q6IqcsrvD1ep7+3g9rgtk3NspdDjHOO\nat5HD31cYYImqwywb1NzpDKTVOYhSWpfqcvFmxfqPPLYe2QZZBk8/ewNAJ54vMrJF/dsapY9WY1G\n3uBdxmmwTJVejnCMSta1/s0BpTKTVOYhSWpfqcvFww/u4M7MwdgxWmrZAWociJohpZmkMA9JUvtK\nXS4k/duJgZHYET6T0zMXYkeQ9BEu6JQkSUFZLiRJUlCWC0mSFJTlQpIkBWW5kCRJQVkuJElSUG5F\nlSRtqOl8ksu8Q4NldtLLYUboyfpjx4riJ7+Y56e/nOfS9B0Ahg9XeOY7fYyNdkdOFpZPLiRJG+Za\nPs0EF9nPMA9wnCo9nOcMjby+/s1bUG2wk+e/v4tzp+/l3Ol7+epDO/jmt6/yj3casaMFZbmQJG2Y\nK0wwyH4Gsr10Z//DEEf5HJ3McCl2tCi+drybsdFuDt5X4eB9FX7w3V3s7O7g7FvLsaMFZbmQJG2I\nZt5kgVv0s7t1Lcsy+tnNPDcjJktDs5nz6m8WWLqd85Uvb48dJyjXXEiSNsQKdXJyKqx94WCFLpZY\niJQqvr//s85DX/8Xy/Wc6s4OXjv5eYYOVWLHCmpLlItU3omQ0jsOnIkkpWnoYIXzf/wC78+vcup3\nizz51Cx/+vXglioY/iwiSdoQ2+giI6PB2sWbDepU2Fo/A7SjszNj/95tHL1/Oz/83i7uH67w45+/\nHztWUJYLSdKG6Mg6qNLHHLOta3meM8csPeyKmCwteRPqjTx2jKC2xM8ikqQ07eUQ45yjmvfRQx9X\nmKDJKgPsix0timeev8nY6F3UBjpZWGzyq9cW+PNfb/P6qwOxowVluZAkbZg9WY1G3uBdxmmwTJVe\njnCMSta1/s1b0PUbqzz51HWuzq7SU+3gS1+s8PqrA4weuyt2tKAsF5KkDVXLDlDjQOwYSfjZj3av\n/4e2AMuFVABFPT65aLnPnL3NCy/f4q2Lda5eX+XUK/fw6ImtdSyztBlc0CklrqjHJxcx9+JSk5Hh\nLl567m6yLHYaqbh8ciEl7j+PTwYYyo9yg2vMcIl9HI6c7uMVMffYaHfrBVL51lq8L20qn1xICSvq\n8clFzS0pDMuFlLBPOj65QbovOipqbklhWC4kSVJQlgs+WNH+l/z3vJGf4m/5G8znc5v6+WfO3uYb\n35qhdmSKzoFJfnt6cVM//6NizwPSm0ksRT0+uai5JYVR+nKRwor2lFaopzAPSGsmMRX1+OSi5pYU\nRul3i6Swoj2lFeopzAPSmklsRT0+uYi5F5eaTE6ttL5zU5dXeHu8Tn9vB7XBbXHDSQVS6nLx4Yr2\n+xhqXcuyjP68nCvanUeainp8chFzv3mhziOPvUeWQZbB08/eAOCJx6ucfHFP5HRScZS6XHzSivYl\nFiKlisd5pKuoxycXLffDD+7gzszB2DGkwiv9mgtJkhRWqcuFK9rXch6SpBBKXS5c0b6W85AkhVDq\nNReQxor2lFaopzAPSGsmkqT2lL5cpLCiPaUV6inMA9KaiSSpPaUvFxB/RXtqK9RjzwPSm4kk6dMr\n9ZoLSZIUnuVCkiQFZbmQJElBWS4kSVJQlgtJkhSU5UKSJAVluZAkSUFZLiRJUlCWC0mSFJTlQpIk\nBWW5kCRJQWX5h6+dlCRJCsAnF5IkKSjLhSRJCspyIUmSgrJcSJKkoCwXkiQpKMuFJEkKynIhSZKC\nslxIkqSgLBeSJCkoy4UkSQrKciFJkoKyXEiSpKAsF5IkKSjLhSRJCspyIUmSgrJcSJKkoCwXkiQp\nKMuFJEkKynIhSZKCslxIkqSgLBeSJCkoy4UkSQrKciFJkoKyXEiSpKAsF5IkKSjLhSRJCspyIUmS\ngrJcSJKkoCwXkiQpqP8DnAzDxmh24EsAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec93e8630>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec96794e0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Regular convolution: 4x4 input, 3x3 kernel, 2x2 output\n",
"show_conv2d(image4_dots, image3_diag, strides=(1, 1), padding='VALID')\n",
"\n",
"# Transposed convolution: 2x2 input, 3x3 kernel, 4x4 output\n",
"with tf.Session() as sess:\n",
" in_img = image2_diag * 3.0\n",
" op = conv2d_t(in_img, image3_diag, (4, 4), (1, 1), 'VALID')\n",
" show_pixel_image(in_img, image3_diag, op.eval().reshape(4, 4), show_text=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note how, in the transposed convolution, the kernel fits in the output: with a 2x2 input, there are 2x2 positions of the kernel in the output image. If you multiply the kernel for the input value corresponding to the input position and you sum all the products, you get the final image. To make it more explicit, let's apply it using some negative weights in the kernel:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec9335978>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"if True: # try setting this to False to see the same output as the conv2d_transpose above\n",
" kernel = image2_diag - 0.5 # form -0.5 to 0.5\n",
"else:\n",
" kernel = image2_diag\n",
"\n",
"out_img = np.zeros((4, 4))\n",
"out_img[0:3,0:3] += image3_diag * kernel[0, 0] ; pos1 = out_img.copy()\n",
"out_img[1:4,0:3] += image3_diag * kernel[1, 0] ; pos2 = out_img.copy()\n",
"out_img[0:3,1:4] += image3_diag * kernel[0, 1] ; pos3 = out_img.copy()\n",
"out_img[1:4,1:4] += image3_diag * kernel[1, 1]\n",
"show_pixel_image(pos1, pos2, pos3, out_img, show_text=True, int_values=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is possible to visualize better how the transposed convolution works by explicitly setting the padding of the input image, in fact it is always possible to transform any transposed convolution into a regular convolution.\n",
"\n",
"In our case, to produce a 4x4 output image, it is necessary to pad the 2x2 input image with 2 empty pixels on the left, right, top and bottom."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n/wLHkD8Rd1zMaAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec94a25f8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_conv2d_any_pad(image2_diag, image3_diag, (1, 1), [(2, 2), (2, 2)], show_text=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Some more examples of transposed convolution with the equivalent convolution."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec949f550>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ecd8b89e8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"with tf.Session() as sess:\n",
" op = conv2d_t(image2_diag, image3_cros, (4, 4), (1, 1), 'VALID')\n",
" show_pixel_image(image2_diag, image3_cros, op.eval().reshape(4, 4), show_text=True)\n",
"# Or equivalently\n",
"show_conv2d_any_pad(image2_diag, image3_cros, (1, 1), [(2, 2), (2, 2)], show_text=True)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nFpIkKZn/B/EiiWaRpbHAAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ecda1d828>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nSUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ecd7f4a90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"with tf.Session() as sess:\n",
" op = conv2d_t(image2_diag, image3_vert, (4, 4), (1, 1), 'VALID')\n",
" show_pixel_image(image2_diag, image3_vert, op.eval().reshape(4, 4), show_text=True)\n",
"# Or equivalently\n",
"show_conv2d_any_pad(image2_diag, image3_vert, (1, 1), [(2, 2), (2, 2)], show_text=True)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec955c6d8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec9263b38>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"with tf.Session() as sess:\n",
" op = conv2d_t(image3_diag, image4_ring, (6, 6), (1, 1), 'VALID')\n",
" show_pixel_image(image3_diag, image4_ring, op.eval().reshape(6, 6), show_text=True)\n",
"# Or equivalently\n",
"show_conv2d_any_pad(image3_diag, image4_ring, (1, 1), [(3, 3), (3, 3)], show_text=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Consider now when the stride is greater than one.\n",
"\n",
"![no padding, strides, transposed](https://github.com/vdumoulin/conv_arithmetic/raw/master/gif/no_padding_strides_transposed.gif)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ed08f70b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"with tf.Session() as sess:\n",
" op = conv2d_t(image3_diag, image4_ring, (8, 8), (2, 2), 'VALID')\n",
" show_pixel_image(image3_diag, image4_ring, op.eval().reshape(8, 8), show_text=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To create an equivalent form, we have to change the input and pad some zeroes *within* the input"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXEAAAC7CAYAAACTg67CAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAAyBJREFUeJzt3cFpw0AQQNEouArdc1cXLjYVmDThKkyqsHxIA8YJ2nzp\nvQY0iOUzl2WndV3fAGh6Hz0AAK8TcYAwEQcIE3GAMBEHCBNxgDARBwgTcYAwEQcIE3GAMBEHCBNx\ngDARBwgTcYAwEQcIE3GAsNPoAf7C/fsj+7LFeV5Gj3BYX/fPaatvbX1Gnat9eOaM2sQBwkQcIEzE\nAcJEHCBMxAHCRBwgTMQBwkQcIEzEAcJEHCBMxAHCRBwgTMQBwkQcIEzEAcJEHCBMxAHCRBwgTMQB\nwkQcIEzEAcJEHCBMxAHCRBwgTMQBwkQcIOw0egA4gvO8jB6BnbKJA4SJOECYiAOEiThAmIgDhIk4\nQJiIA4SJOECYiAOEiThAmIgDhIk4QJiIA4SJOECYiAOEiThAmIgDhIk4QNgunmcrP311uV1Hj/Ar\n5X8Pe2ATBwgTcYAwEQcIE3GAMBEHCBNxgDARBwgTcYCwXVz2Acbb+uKai2Y/bOIAYSIOECbiAGEi\nDhAm4gBhIg4QJuIAYSIOECbiAGEiDhAm4gBhIg4QJuIAYSIOECbiAGEiDhAm4gBhIg4QJuIAYSIO\nECbiAGEiDhAm4gBhIg4QJuIAYSIOECbiAGEiDhB2Gj0AsA/neRk9wiHZxAHCRBwgTMQBwkQcIEzE\nAcJEHCBMxAHCRBwgzGWfweoXJC636+gR4NBs4gBhIg4QJuIAYSIOECbiAGEiDhAm4gBhIg4QJuIA\nYSIOECbiAGEiDhAm4gBhIg4QJuIAYSIOECbiAGEiDhDmeTaAJ/3H5wht4gBhIg4QJuIAYSIOECbi\nAGEiDhAm4gBhIg4QJuIAYSIOECbiAGEiDhAm4gBhIg4QJuIAYSIOECbiAGEiDhAm4gBhIg4QJuIA\nYSIOECbiAGEiDhAm4gBhIg4QJuIAYdO6rqNnAOBFNnGAMBEHCBNxgDARBwgTcYAwEQcIE3GAMBEH\nCBNxgDARBwgTcYAwEQcIE3GAMBEHCBNxgDARBwgTcYAwEQcIE3GAMBEHCBNxgDARBwgTcYAwEQcI\nE3GAMBEHCBNxgDARBwgTcYCwBxxoIJ9gu5qjAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ecdae0d68>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nLPhEREQ+8P8VFjw6JBSifwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6ec921def0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"spaced_in = np.zeros((5, 5))\n",
"spaced_in[::2,::2] = image3_diag\n",
"show_pixel_image(image3_diag, spaced_in) # This is how the input is transformed\n",
"show_conv2d_any_pad(spaced_in, image4_ring, (1, 1), [(3, 3), (3, 3)], show_text=True)"
]
}
],
"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.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
@LeeTeng2001
Copy link

Well damn that's nice

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment