{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"DL_Autoencoders.ipynb","provenance":[],"collapsed_sections":[]},"kernelspec":{"name":"python3","display_name":"Python 3"}},"cells":[{"cell_type":"markdown","metadata":{"id":"g1ecXXtmUWDp","colab_type":"text"},"source":["## Autoencoders\n","\n","#### Data-driven data dimensionality reduction (compression)\n","\n","An autoencoder is a type of artificial neural network used to learn efficient data codings in an **unsupervised** manner. The aim of an autoencoder is to learn a representation (encoding) for a set of data, typically for dimensionality reduction, by training the network to ignore signal “noise”.\n","\n","- Map the initial data to a lower dimensional representation (encoder)\n","- Map back the low dimensional data to initial data size (decoder)\n","\n","Used for:\n","- Data denoising\n","- Dimensionality reduction \n","\n","#### Unsupervised: No labels or output values\n","\n","#### Question: What is the loss function?\n"]},{"cell_type":"markdown","metadata":{"id":"sgAJoOFyeHI1","colab_type":"text"},"source":["Example (from https://blog.keras.io/building-autoencoders-in-keras.html)"]},{"cell_type":"code","metadata":{"id":"COQIwUfIRNyG","colab_type":"code","outputId":"8055323c-ea13-41ca-9edc-fb996687580f","executionInfo":{"status":"ok","timestamp":1586125233706,"user_tz":240,"elapsed":2974,"user":{"displayName":"Guray Erus","photoUrl":"","userId":"01368029751226174540"}},"colab":{"base_uri":"https://localhost:8080/","height":173}},"source":["!pip install q keras==2.3.1\n","\n","from keras.layers import Input, Dense\n","from keras.models import Model\n","\n","# this is the size of our encoded representations\n","encoding_dim = 32 # 32 floats -> compression of factor 24.5, assuming the input is 784 floats\n","\n","# this is our input placeholder\n","input_img = Input(shape=(784,))\n","# \"encoded\" is the encoded representation of the input\n","encoded = Dense(encoding_dim, activation='relu')(input_img)\n","# \"decoded\" is the lossy reconstruction of the input\n","decoded = Dense(784, activation='sigmoid')(encoded)\n","\n","# this model maps an input to its reconstruction\n","autoencoder = Model(input_img, decoded)"],"execution_count":0,"outputs":[{"output_type":"stream","text":["Requirement already satisfied: q in /usr/local/lib/python3.6/dist-packages (2.6)\n","Requirement already satisfied: keras==2.3.1 in /usr/local/lib/python3.6/dist-packages (2.3.1)\n","Requirement already satisfied: pyyaml in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (3.13)\n","Requirement already satisfied: keras-preprocessing>=1.0.5 in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (1.1.0)\n","Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (2.10.0)\n","Requirement already satisfied: scipy>=0.14 in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (1.4.1)\n","Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (1.12.0)\n","Requirement already satisfied: numpy>=1.9.1 in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (1.18.2)\n","Requirement already satisfied: keras-applications>=1.0.6 in /usr/local/lib/python3.6/dist-packages (from keras==2.3.1) (1.0.8)\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"ubDPsyMbbghD","colab_type":"code","outputId":"a8a38709-c25c-4c74-a39a-805775a7caef","executionInfo":{"status":"ok","timestamp":1586125287577,"user_tz":240,"elapsed":397,"user":{"displayName":"Guray Erus","photoUrl":"","userId":"01368029751226174540"}},"colab":{"base_uri":"https://localhost:8080/","height":312}},"source":["from keras.utils import plot_model\n","plot_model(autoencoder, show_shapes=True, show_layer_names=True)"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"image/png":"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\nQp8kAAAAAElFTkSuQmCC\n","text/plain":[""]},"metadata":{"tags":[]},"execution_count":23}]},{"cell_type":"code","metadata":{"id":"vdGC1xZMRkwc","colab_type":"code","colab":{}},"source":["# this model maps an input to its encoded representation\n","encoder = Model(input_img, encoded)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"ZPkV6n97b1xK","colab_type":"code","outputId":"9678b7c7-d6aa-4980-9c45-56d079adbdb8","executionInfo":{"status":"ok","timestamp":1586125307991,"user_tz":240,"elapsed":411,"user":{"displayName":"Guray Erus","photoUrl":"","userId":"01368029751226174540"}},"colab":{"base_uri":"https://localhost:8080/","height":201}},"source":["from keras.utils import plot_model\n","plot_model(encoder, show_shapes=True, show_layer_names=True)"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"image/png":"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\nNzw8PCIiws7ObufOnSwWS9P+SU9P37x5s5nZv3+8wcHB8fHxYrGYz+f7+/vLZLJjx47RGyyRSHJz\nc1XU6ePjgxCqra3VqCVag7gDdIITD/b29g64dsqUKRwOh7oGMR0tLS0kSXI4HBXbpKWljRs37tCh\nQ1VVVfTyurq6jo6OKVOmUCVTp061tLTsP46L0bvo7t27XV1d/v7+eJW1tfWoUaM06p+mpqbS0lKl\nt0InJSUdOXKkoqKio6Pj4cOHQUFBgYGB+EQVIZSYmLh27VrV7/zAXfHixQv1W6ILiDvAsKysrPC5\nvUnp7u5GCFlZWanYhs1m5+fnEwSxevVquVxOleNbzvS5MwghOzs7mUw25H47OzsRQjt37qTm4Dx5\n8qSrq0v9lmdkZHz00Uf0sfDnz59nZGSsXbt2zpw5XC7X09Pz6NGjTU1N+DK2qqqqtrZ2zZo1qqu1\ntrZGP3YLAyDuAAPq7e1ta2tzdXU1dkOU4Z/ZkPPlAgMDY2Nj6+vrd+/eTRXa2dkhhJSijJqHiYd1\nDxw4QB/suHr1qprNbm5uPn369IYNG+iF9fX1CoVi9OjRVAmfz7e3t6+rq0MI5eXlVVRUmJmZ4TCH\nG7Bnzx6CIL7//nvqIz09PejHbmEAxB1gQJWVlSRJTps2DS9aWFgMdkXGsJEjRxIEoc4Mnd27d/v6\n+t68eZMq8ff3t7Gxof9or1+/3tPT8/777w9Zm5ubG5vNrq6u1q7ZGRkZMTEx9vb29EIc754/f06V\nyGSy169f47vp+fn59BhHH1emXyrirnByctKuYZqCuAP0rK+v782bN+/evaupqZFIJO7u7tRghLe3\n9+vXr0tKSnp7e1++fKk0wcTe3r6pqenx48cymay3t7e8vNxw99E5HI6Xl1djY+OQW+KrLep9Ybhk\n27ZtxcXFJ0+elEqltbW169evd3Z2FolE6tS2atWqzz//PDc3VyqVKhSKxsZGHDKio6OdnJxUPIfx\n4sWL48ePb926Vanc09Nz9uzZR48evXz5slwub2howC358MMPh2wPBXdFQECA+h/RiY73w0i4jz58\naHEf/eDBg3jGDYfDCQsLO3ToEB6A9PHxefDgwZEjR/h8PkLIw8Pj3r17JEmKRCIWi+Xi4mJhYcHn\n8xcvXvzgwQOqtlevXs2ePZvNZnt6em7evDkuLg4h5O3tjW+037hxw8PDw9raesaMGc3NzWVlZTwe\n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\nOWm0a32BuAN+gs1mb9u2rbi4+OTJk1KptLa2dv369c7OziKRCG/g7e39+vXrkpKS3t7ely9fPnny\nhP5xe3v7pqamx48fy2QyHFPwO1TfvXtXU1MjkUjc3d3x6300rUqdLEha43A4Xl5ejY2NQ26Jr7bo\ns2OG7DHVtQ2WSik6OtrJyWnA5zC4XO4333zz17/+VSqV9vb23rx58w9/+AOXy42NjUUI3b59+7PP\nPjt69CiLxaI/irh//356JfhgAwIChmykQeh4P4yE++jDh5r30fv6+jIzM318fFgslkAgCA8Pv3v3\nLrX21atXs2fPZrPZnp6emzdvxq9C8/b2xnfHb9y44eHhYW1tPWPGjObmZpFIxGKxXFxcLCws+Hz+\n4sWLHzx4oF1VKrIg9afFd1IsFrNYrK6uLrxYXFyMb285ODhs2rRJaeO4uDj6fXQVPaY6vxI5eCql\n8PBwhFBycvKArQ0LC/P09LSxsbGyshIKhdHR0bW1tXjVYLeoMjMz6TWEhoa6uLjgTHUa0cvvHeLO\nLwjzz2fh2fpM7hHT4jtZX19vYWEx2CwY5ikUipkzZ9LfhqBHra2tbDZ7//79WnxWL793uM4ChmX8\nR5/V4+3tnZqampqaSj1tYEQKhaKkpEQmkxkoT0tKSsqkSZPEYrEhKlcHxB0A/l9CQkJkZGR0dLTR\nHwGtrKwsKioqLy9XPaVIO1lZWdXV1WVlZSwWS++VqwniDjCUxMTE/Pz89vZ2T0/Pc+fOGbs5atmz\nZ49YLN63b59xmzF37txTp05RD6/p0fnz59++fVtZWSkQCPReufqYeF8o+GXau3ev0ky2YSEkJCQk\nJMTYrTCURYsWLVq0yNitgPMdAADjIO4AAJgGcQcAwDSIOwAApulnXPnAgQNnz57VS1XAcPDU+MjI\nSGM3hAnwnTRlenhf6C/kewwAwGJjYwMDA3WpQQ9xBwAANALjOwAApkHcAQAwDeIOAIBpEHcAAEz7\nP986pn9CVJxkAAAAAElFTkSuQmCC\n","text/plain":[""]},"metadata":{"tags":[]},"execution_count":25}]},{"cell_type":"code","metadata":{"id":"ySq9tyMRRvoi","colab_type":"code","colab":{}},"source":["# create a placeholder for an encoded (32-dimensional) input\n","encoded_input = Input(shape=(encoding_dim,))\n","# retrieve the last layer of the autoencoder model\n","decoder_layer = autoencoder.layers[-1]\n","# create the decoder model\n","decoder = Model(encoded_input, decoder_layer(encoded_input))"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"twZHrQqvb-JH","colab_type":"code","outputId":"8ddd76a2-93c1-46fc-b96b-355ce0af189a","executionInfo":{"status":"ok","timestamp":1586125352572,"user_tz":240,"elapsed":504,"user":{"displayName":"Guray Erus","photoUrl":"","userId":"01368029751226174540"}},"colab":{"base_uri":"https://localhost:8080/","height":201}},"source":["from keras.utils import plot_model\n","plot_model(decoder, show_shapes=True, show_layer_names=True)"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"image/png":"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\nSJYkJibW19dnZWUZqbsIIQguQN3169ddXV0xDPvrX/+KEMrNzeXxeFwu9+LFi++9955AIHB2dj5/\n/jyxcnZ2NofDsbe337Fjh6OjI4fD8fPzu3XrFlErlUrNzc1nz55NLO7atYvH42EY1tXVhRCKiIjY\nu3fv/fv3MQwj0n1fvnxZIBAcOnTICLuZnZ2N43hgYKB6VUpKyvz580+fPl1dXT3hb3Ecz8zMfO21\n19hstlAoDAoKunv3LlGl+XAhhFQqVUJCgqurq4WFxeuvv15UVGRA5+VyubW19dy5cyesffz4sYWF\nBfltTISQUChcuXJlVlaWUW94DZu4aNhEJmB8CKGioiJ9f0VcUefk5BCLcXFxCKFr16719fV1dnau\nWLGCx+ONjIwQteHh4Twe786dO8PDwzKZbOnSpXw+/9GjR0Tt5s2bHRwcyJYzMjIQQk+fPiUWQ0JC\nRCIRWVtRUcHn85OSkvTtsAHnpLu7u5eX17hCkUjU3NyM4/iNGzcYDMa8efP6+/txHK+qqlq3bh25\nWkJCgrm5+ZkzZ3p7exsaGnx8fGxtbTs6OohazYdr3759bDa7tLS0p6cnNjaWwWB8//33OvZ5ZGSk\nra0tJyeHzWafOXNmwnUGBgb4fL5UKh1XHhMTgxCqq6vTcVskg/+9w5UL0JWfn59AILCzs5NIJAMD\nA48ePSKrmEwm8Wfcy8srNzdXqVTm5+cbsImAgACFQhEfHz99vZ7YwMBAc3OzSCSabAVfX9/IyMiW\nlpYDBw6MqxoaGsrMzFy/fn1YWJiVlZW3t/eJEye6urpOnjxJXW3CwzU8PJybmxscHBwSEmJtbX3w\n4EEWi6X7sXJxcXF2dk5MTDxy5MimTZsmXCc1NdXR0TElJWVcuYeHB0KosbFRx21NHQQXoDdzc3OE\n0Ojo6IS1S5Ys4XK55G3CzNTZ2YnjOJfL1bBOSkrKggULjh8/fv36dWq5TCbr7+9fsmQJWbJ06VJz\nc3PyZnAc6uFqamoaHBxctGgRUWVhYTF79mzdj1Vra2tnZ+e5c+e+/PLLN998U/1xVVlZWXFx8ZUr\nV6iPqAnEzj558kTHbU0dBBcw/dhs9tOnT03dC02Gh4cRQmw2W8M6HA4nPz8fw7Dt27cPDQ2R5cQ7\nXUtLS+rK1tbWSqVS63YHBgYQQgcPHsR+8fDhQ+qTV81YLJadnZ2/v39hYaFMJktNTaXWFhYWpqWl\n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\nAx4GG+l3DHOxAAAAAElFTkSuQmCC\n","text/plain":[""]},"metadata":{"tags":[]},"execution_count":27}]},{"cell_type":"code","metadata":{"id":"hX4eCkh2RyZy","colab_type":"code","colab":{}},"source":["autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"LuOXhwhsR3Um","colab_type":"code","colab":{}},"source":["from keras.datasets import mnist\n","import numpy as np\n","(x_train, _), (x_test, _) = mnist.load_data()"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"C6jgBv-gR6aw","colab_type":"code","outputId":"1216c8f8-2984-4efb-daf4-5a708b02a811","executionInfo":{"status":"ok","timestamp":1586125379880,"user_tz":240,"elapsed":263,"user":{"displayName":"Guray Erus","photoUrl":"","userId":"01368029751226174540"}},"colab":{"base_uri":"https://localhost:8080/","height":52}},"source":["x_train = x_train.astype('float32') / 255.\n","x_test = x_test.astype('float32') / 255.\n","x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))\n","x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))\n","print(x_train.shape)\n","print(x_test.shape)"],"execution_count":0,"outputs":[{"output_type":"stream","text":["(60000, 784)\n","(10000, 784)\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"Otf16ABlSAm5","colab_type":"code","outputId":"e1449f38-1937-42da-caf3-14b81d805e4b","executionInfo":{"status":"ok","timestamp":1586122759543,"user_tz":240,"elapsed":23250,"user":{"displayName":"Guray Erus","photoUrl":"","userId":"01368029751226174540"}},"colab":{"base_uri":"https://localhost:8080/","height":399}},"source":["autoencoder.fit(x_train, x_train,\n"," epochs=10,\n"," batch_size=256,\n"," shuffle=True,\n"," validation_data=(x_test, x_test))"],"execution_count":0,"outputs":[{"output_type":"stream","text":["Train on 60000 samples, validate on 10000 samples\n","Epoch 1/10\n","60000/60000 [==============================] - 2s 38us/step - loss: 0.2044 - val_loss: 0.1967\n","Epoch 2/10\n","60000/60000 [==============================] - 2s 38us/step - loss: 0.1931 - val_loss: 0.1871\n","Epoch 3/10\n","60000/60000 [==============================] - 2s 38us/step - loss: 0.1845 - val_loss: 0.1794\n","Epoch 4/10\n","60000/60000 [==============================] - 2s 38us/step - loss: 0.1776 - val_loss: 0.1731\n","Epoch 5/10\n","60000/60000 [==============================] - 2s 38us/step - loss: 0.1719 - val_loss: 0.1678\n","Epoch 6/10\n","60000/60000 [==============================] - 2s 39us/step - loss: 0.1669 - val_loss: 0.1632\n","Epoch 7/10\n","60000/60000 [==============================] - 2s 39us/step - loss: 0.1625 - val_loss: 0.1590\n","Epoch 8/10\n","60000/60000 [==============================] - 2s 39us/step - loss: 0.1585 - val_loss: 0.1551\n","Epoch 9/10\n","60000/60000 [==============================] - 2s 38us/step - loss: 0.1548 - val_loss: 0.1516\n","Epoch 10/10\n","60000/60000 [==============================] - 2s 38us/step - loss: 0.1514 - val_loss: 0.1483\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{"tags":[]},"execution_count":8}]},{"cell_type":"code","metadata":{"id":"TmUZWaUUSG05","colab_type":"code","colab":{}},"source":["# encode and decode some digits\n","# note that we take them from the *test* set\n","encoded_imgs = encoder.predict(x_test)\n","decoded_imgs = decoder.predict(encoded_imgs)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"Nv1SVqcRSKoz","colab_type":"code","outputId":"163d7001-8115-41db-a378-8e62512f5378","executionInfo":{"status":"ok","timestamp":1586122766650,"user_tz":240,"elapsed":926,"user":{"displayName":"Guray Erus","photoUrl":"","userId":"01368029751226174540"}},"colab":{"base_uri":"https://localhost:8080/","height":244}},"source":["import matplotlib.pyplot as plt\n","\n","n = 10 # how many digits we will display\n","plt.figure(figsize=(20, 4))\n","for i in range(n):\n"," # display original\n"," ax = plt.subplot(2, n, i + 1)\n"," plt.imshow(x_test[i].reshape(28, 28))\n"," plt.gray()\n"," ax.get_xaxis().set_visible(False)\n"," ax.get_yaxis().set_visible(False)\n","\n"," # display reconstruction\n"," ax = plt.subplot(2, n, i + 1 + n)\n"," plt.imshow(decoded_imgs[i].reshape(28, 28))\n"," plt.gray()\n"," ax.get_xaxis().set_visible(False)\n"," ax.get_yaxis().set_visible(False)\n","plt.show()"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nAAAAKCBe2gAAAAAAABQQL20AAAAAAAAKiJc2AAAAAAAABcRLGwAAAAAAgALipQ0AAAAAAEAB8dIG\nAAAAAACggHhpAwAAAAAAUEC8tAEAAAAAACggXtoAAAAAAAAUEC9tAAAAAAAACoiXNgAAAAAAAAXE\nSxsAAAAAAIACWr4pK7dq1aqhUjuCtIaGhlbl2A7nsFktamhoaF+ODXEemw9tsS7QFusAbbEu0Bbr\nAG2xLtAW6wBtsS402hYZaQNUz+zm3gEAZkZbBIqCtggUA20RKIZG22KTRtoAQDW1avWf/2HQ0MBL\nf9SPIl7bRdwnAACAlo6RNgAAAAAAAAXESxsAAAAAAIAC4qUNAAAAAABAAdXMnDZZufbLLbdctN7X\nX3/d6L9pCnL5y8Mf/6zz9s0330Tr6bLll1++0f9uZva97/3nneOXX34ZLWvdunWIP/3000b/jV/m\ncR00Lqtdpdpb3rboz4/+Oz3/2s7NzL766qvMbfrrC5WVavf4j6zj0pTjp+1F+0q/jVVWWSXE2lZ8\ne9O28sUXX2T+XV3Pt0WV2neui+aV6pM5N+WTuqel7k1518uLfrl8/DnNQ/tns/Qzi+L5pfqa8tsx\na13ufagERtoAAAAAAAAUEC9tAAAAAAAACqhm0qOyhpOVOjS73PIOp2tJw+J8OtOKK64Y4jXXXDPE\na6yxRrSeLuvZs2eIX3/99Wi99dZbL8SaDuXXnT9/foj99TJnzpwQ++Grn3/+eea/qzep69efx6xl\n/trWZZq+5v+Wnjt/nHWbqWHCug0/7Fi3ocv8/raktlmKvH1c3jS51PFnKP9/6LHwx2WllVYKcSrt\nSVOdtB/2KVDaTldYYYXMbSjfP6TSOrLSl/35refS46lruxzPEaWmhatU+of+7Xo7N01R6fT7lnxs\nq6Uc0yvk7avypkOltu9xjSybUs6x3nPNss+Bn7JB76f62yK1DcBjpA0AAAAAAEAB8dIGAAAAAACg\ngHhpAwAAAAAAUECFndOmHHnfqfUqXUYvb1nkWi/n5/M711prrRB36dIlWrbzzjuHeOjQoSFu3759\ntN4nn3wS4vXXXz/Eq666arTe4sWLG43NzJ5++ukQP/744yH28+K89957If7ss88si+b418tcKKn2\nofm3fn4D/aw54H4ODM0X1/mHtPywmdnKK68c4tVXXz1zn95///0Qf/TRR9GyDz/8MMQ+dzyr5Lv/\n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\n6VBRnyqlKVaaWrPeeutF6+kwQ78NHcaYGjY6Z86cEI8cOTJapilWOkxOh82apUuBNic/XE/3TVNH\n/DBM/d6+1JkOHUwN19RtalqcTw1YuHBh5jb0GkkNOVd5y8oV6Twtjd9Xve51+KEfdqvDhP0Qzayy\n4X4YctZw5Y033jhab6ONNgqxH76aVQozVfLb02X6vfz5TqXK1TrfTnUY/Yknnhhif250qGhWaUuz\nOB3HD+/W47ztttuG2KfEPPfccyH2fUdWf1H04cN63ftzoCmDmhbo00X1vtijR49omZZo96mF6umn\nnw7xvHnzQuyv86zSl35/Ne1G77NmZl26dAmxP4/jxo0Lcaq96eese1ER2mje8tdZ6cX+3+kxSZVB\n1+35ZyUdFu5TFbU/1dQZn46Y99imUr1qKW1YU1y0hLNP5U2l9+sy7a/8c4o+I+mwfN/HaX/h762a\nEqDD/nv16hWtp+fRD/XXFI1Umps+z/t+vznlTf32/Ziup6m7ZnF6hd6r9BnF0z7ZHx99DvWpdpqu\npv2kbzd6XeTtV4rQN1aTvxb0POr5+eEPfxitp89Bmqro02cefPDBEOs9zCzuU7Wt++tOz6N/9tFl\n9fYcmrovpp6P9N611VZbhVjbpZlZv379Gv27/jlKf1ukfj9oG/Z9vJ7TyZMnR8t0ipSs+6zffikY\naQMAAAAAAFBAvLQBAAAAAAAoIF7aAAAAAAAAFFDZ5rTJKrFmFueFaRk9zZE3i0sXpvJqtWSiz03T\nORg0T9nnt2memZafNotLdOk2fH645si9/vrr0TIt+aV/S+fUMCtWjrDyebWae6jLfNkz/a4+l1v/\nXWoulA4dOoRY53PYZpttovX0+tE8cbM4f9uXb1apORxUar6bIuedpsqwpuaNSJVczjuPg25T24rO\nO2UWz23lrwUthbl48eIQ+3Oq++u/c9a8C6l5NOqBHgdfdnDPPfcMseYLa/9pFh8T7at0/hmzuA/1\n5aa1v9Y+3s9fNHDgwBD7sppvvvlmiLXPL8qcNt8e69R8Jaljm5r7YIcddgjxdtttFy3Te62eHy0n\naxbPX6FzuKXmT9B5Aczia0jnCdD+2u+HL3uqc0jo3HH+vqjntR7Kv+e9t+SdV02fZ3zpab1n+mcW\nnYdP25ifh6qUY15L/ad/9tR2oM+aOj+TWTx/TMeOHaNl2oa1Dfjyvjr3gfL9g97j/HnU/lvneNhg\ngw2i9SZOnBjiBQsWRMt0Xo3Us0Dq+ak5+evNz4nxLf99tK/xc9oMHTo0xHqNpEp563xhfn5MnV/K\nzymkvy10DhX/3JzqE/S6rdV5F0uV+s2pc64dfvjhIfbH9qqrrgqxPmP4uUe17fhjq39b+wBP762p\nOUNTbbHI84SprHuav5a1Leo8XWbx86DORaTn1iw+Xjo3lP5eMDObPn16iN9+++3M/dV5jvyzjd7H\nfX+tn/V3jL+3LitG2gAAAAAAABQQL20AAAAAAAAKqGzpUTqMyw/p0uGmOnzQlyfU4Uw6dNosHuap\n6/nhaDrkXofsr7vuutF6U6ZMCbEfNqrDjXffffcQ+++lZcR9+oEOt9KhlL7UW2roY5HoELS8qTN+\nKJ8u0+FjWmLTzGzYsGEh3mOPPULsS37rMGM/LFWHoqbKkmaVpfb7m1K0Yamp4YhZJWWbkiqUVSrc\nD0/OSlXUdByzeEi3T3PToeXaJ6RKxueVuj5rkT/Xej58CsXOO+8cYt/+lPZdTz75ZIjvv//+aL0n\nnngixP646hBTbbPdu3eP1hs8eHCIfVnNhx56KMSablWU4cNZ147+948//jhapulHmnbRs2fPaD0d\nJuxTyrQd3HPPPSG+++67o/X0Xqj74ftyvVf7/dX7nZb51v/u/50vlTtmzJgQ12LKqd/nUvYz7/dO\nlTTW8u6aXmoWt2eflqX9q6bQ+RSY1PfKut8VPd1Uj6d/btR+Q5/RfHvTZ0/fTufNmxfil19+OcTz\n58+P1tO/refUXxfaxrbYYotomfaVW265ZYj9fVFTVTV1wCx+RtLrpOjn8Vv+eOl3zyqFbRanPWma\np5nZjjvuGOLevXuHePTo0dF6+ptB70c+9U3TQ33aq6bVaJxKsU2di6Kep3JpyvON9o9XXHFFiH1b\n1DSorLLbZt9N31XanlP9t7ax1G+N1HN5rciaQsF/b73uNS3JzOyAAw4I8dZbbx1i38fpb/n77rsv\nxH7Kkvfeey/E/r6oqa6aMumfUfWa03ZvFqce633WP2Mt6zllpA0AAAAAAEAB8dIGAAAAAACggMqW\nHqXDjfxsybpMh0r5SjFaZcqnLOms3zrM0w+30uFLOkTJp1vp7NF+6Nv3v//9RrenQ8f9fvgqUDos\nUoceN6VKT5FkDXfzwwhTw2z1u+sQ1QMPPDBa78wzzwyxDlXz29O/5Yeq6bDgVPUu3Sd/LrKGSxYl\nJSNL3iGaqVQ2ve79UELdph5Pnx6lQx81RcZXwtD24Su5Pf/88yHW4dypdpNKYUhdn1n/plb4c63H\nwaep6NB+Xc+f60mTJoX4yiuvDLGvTqR9oa/koCkFukxTH83iSi0+3VTTDbStFz29VM9JqqqZprRs\nvPHG0Xp63/H3Gb3HTZgwIcSzZs2K1tN/l2oD2p79Mt1HTTdOpZD4dqrL9G/5yipF61OXVWrIe9Y1\nkqqgqefCp6cpn+J21113hVifqfyQ86z7vV9WS32oXlP+utQ2oanWM2bMiNbbf//9Q+yPrX5fvaf5\nv6WVv/Se6VPUNOWjf//+0TKtpKn30zfeeMOypJ5R9dgU7byVQq/Z1DOfpkOZxZVptE34amOaCqdp\nGL5Krf5tTXczi+9x2v/530V5UxDztstakrp/amWu1PnRZwdfzTCrql9qWgEvq69MPaP6ZyRtm6nn\nsVqUui71vPnqwJoSpeluvhrfLbfcEmJNY/TVo/RY+naq15Kmafm+Q99LaKq3WfyOIatvLQdG2gAA\nAAAAABQQL20AAAAAAAAKiJc2AAAAAAAABVS2OW2Uz+HSHE3N233rrbei9bRE8Jtvvhkt03yx1Bwx\nWSW5fM685rf5OTa0DKDuk89DfPXVV0M8fvz4aJn+7axShGa1k3ualZPvcy7zlgrVPPy99torWk/z\nF1PzHmgJN53DxtPz5udf0FxSXzY8q8x5LZWK9nm1WfMR+esyNQ+QtrFUOT/NG9Wy3jpPkVk8B9bE\niROjZdpH+DKtWVJzRqTya2txHo3U8dd8Yc0PNjNbddVVQ6zH1c+JcNFFF4X4hRdeCLEvH6vXi+8T\ntK1raWstZW0W5/j7nHK9fqZOnRpiP39a0eix8O1Il+n8GFpq1tNyxGZxe3n66adD7OevyMqN99eM\n8nnf3bp1C7H2o77d6P3O533r39M5Wnxb1L6+SP1rqXO46PH3fW1W/+TPjc75p3Nv6PxCZvHzkZZD\nNTN76qmnQqzXSDmOcZHO09L4fdX+bK211gqx9pNmcfvz7UP7L52fa8CAAdF6WhZa513QsrNmcSl3\nP++fzhGnUiW/fd+RNaddOcraV0NqjkNtO/6YaD+29tprR8u0j9Zt+GdP3aaWXPclgvUc6m8Js7hv\nTM2dqVLfOW9p8Fqi38PPW6Pfd5111omWTZ48OcQ6v0jq90pqfrzU/I956fXk56/Sv63Xgv9btfiM\nqvwzkPZjfn4pXabtbfr06dF6Opef9uP+XGv/vMUWW0TLjj766BBr/+B/c7z00ksh9u8v9Dd/Jeeq\nZaQNAAAAAABAAfHSBgAAAAAAoIAqkh6VKkunQ8S07LZZPATRD+/Wzzr0yA811iFRqSFKOgRRh0OZ\nmW2//fYh1mF3vgy5liP2aQU6rKoWS7ilSt7lHYbpt6FpSjqM1A9RnT9/fqN/1x87LeXnh4HredNh\nlTps2f+tmTNnRss0XUqvTT9krpaGpWbtn//vqWtW23BWuoP/rOktfti/Hk9fzk/TX/KmJqRKX6dK\nmxb93DUmld6ibcBf9zpUfs6cOSH+n//5n2i9xx57LMSawuOH6aZKc+pwX90nP1RW0z986oGmgLRv\n3z7EvoRn0eg15Yfpa+pFp06dQuyH3eq58/fMcePGhVj7q9R1ocv8OdC0J03BMYvThnXffeqApg37\n1OOsvtLvby22xZTUPSLr3urPjd7Hevbsmfm3dOj9M888Ey3Ttl6Oofb1cp70e2ifoqXVzeJSwv6a\n1eH32j58uW7dprY3f//M6vP839Lz7dMutM/Wf2MWp2alSs0X9Ryn9kuf/X1akt6PevXqFS3T+44+\nl/jfCNon635stNFGmdvz+6HPwBtvvHGIfcqvnkO/TM+V3l9q5RwuTdazpllcQt3/NtM0mbz9XCpF\nTZf5+13WM6XfX32O9tvXbeh5rNXzlsX/Xtd+zT/z6XfX86u/2czi3xbvvvtuiH1qq6bj/+xnP4uW\nabqU/k7107SMHTs2xK+//nq0zL+zqBRG2gAAAAAAABQQL20AAAAAAAAKqCLpUZ4O2dThfX74mK7n\nh6DpUCk/xCprPR1y5oca6/DGQw89NFqmwxZ1Gz4FJ1VNJe+s5EWVSpfJO2QvVU1IZ9zXGbnN4vPb\nuXPnEGu1KDOzUaNGhViHkPr97dOnT4h9BTDdvg4dN4uvGV95oVaUWkkpdb6zqqH5odk6PFHblD8H\nCxcuDLEf+pg1tDW1v6n+IVVtqdbTGH0fp8fZV17QVJq//e1vIR4xYkS0np7T1DBjXaZDif0yTZfx\nw/V1PV9hTKsHFr1iVJZUypJesxtuuGHmej41U4+1DjX2w6/1b2u79NeFVhnzVW+y+lGfzjV37twQ\n+/as+6F/259TPR6VrMRQLal7ZlZ6lG9vmka82Wabhdi3I71P+mp82p7z3sfzplrUUkpG6p6m7WPW\nrFnRenof8+kuWZXifEUh/VupPlr5PlWlKrKm/p3+bf+8XYuy+ld/rrVv9Cmreiz1XuWrzSh/HSg9\np/43gqYKa6qPppeaxdej/466Te0zU/fqIrdLs+xUPV8lTytzvfjii5nb0GPmj0vWNBm6bbO4Xfk+\nQZ+l8k7P4ZdlVT7zfaq/XmtBKvVSv4//fafTVWiakk8R13Oo1Um1TZmZHX744SH2lUu1Deu51mqL\nZvF15lPzs75nudsbI20AAAAAAAAKiJc2AAAAAAAABcRLGwAAAAAAgAKqypw2mq+nues+717z21Il\nZVNzcehnzdn1JROHDx8e4m233TZapn978uTJIb755puj9SZNmhRiPwdGVhm4Wpzfxix/jl6qBLTm\ndmtOp5buNotzc3XeIJ3XwizON/T5wmussUaj2/O5yVqmbffdd4+WjR49OsSa6+zzSvVzLeacmuUv\nEWwWX9upEtra5nr37h1iX+Jdc4TzlnBOtSPfFvX861wDPq84lftcpDzwvCXXO3ToEGL/XXUeqYce\neijE/vrN24/pfvg5hXQbs2fPDrGfR0HnX/DzIymdv6qW+lN/Dfn5ab7l56VIlW7fd999Qzx48OAQ\n+3KUepx0Hi/ftnUeh+222y5apnMr6Hfx833pHFX+etK2+cEHHzS6Pb9evfHXrLaPVInbjh07hniT\nTTYJ8eqrrx6tp/dTX7K0lDLfqfnDUs8FlczrryS9nv08d/rM4eeg0bmFdF4qPz+Xbl/bgJ9/5uCD\nDw6xvy/q39LnIi1JbhbPt+Hn/cuaJ7IcpeCbg+63fp/UPDBPPvlktEyfG/X3g583Srep91bftnWe\nDj9vl/aTOv9Gp06dLIu/j+s9xJ/fWqXtQNuYzoNpFveBeo80i9uYzoHir+1hw4aF+KSTTsrc3vjx\n40N81113Rcv0HD///PMh1vLTZvHzjr+/ZV1PtdoWs/i2qPPf3X777dEybcOLFy8OsX+20WOkvzn6\n9+8frae//Xxfq/3wgw8+GOLrr78+Wu+1114Lse+T9ZxW8n7HSBsAAAAAAIAC4qUNAAAAAABAAVUl\nPSqr/Jof6peVduHpsKlUmUkdAjVo0KBovT322CPEvjSYDmt75JFHQuzLZ+pwxFRaTGqolH6XIg0J\nTx3XVEm6rBJ6ZnFpdV32yiuvROvpcF8t++aHxenx99dS1vnQlBGzeMi/H+62wQYbhFivCR1y3Njf\n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\n/LWsx/3NN98MsS/5rUOzdVirl0pzSw1HV6khxLVIv7dvi88991yIb7755mjZ8ccfH2I9n1rC3Szu\nQ/11oHRosU9P01KLl1xySYgfe+yxaD1tm/Vwbszyt6vUta38MH3tRzWdIlVGVduHb2/rrLNOiP31\npP2tDtnXdm4Wpz15OvQ/VQK1Vu6LWVL777+rXgebbrppiP19UUve6jGfP39+tF7WuTYrrbR13uey\nWm6zWfcF3+elUsOyjplP3e7WrVuI99prrxD7dDhtY/5aWHfddUOsaSK+JLT23z51p1ZT25ZV6rlH\nl+nx8sdV75n6/KLPq34b/hzqfXLttdcOsU8N1s95py2oJaln1NR9Ue8lqXuO3uNSv9M0ZXzYsGHR\nepq66P+Wpljdc889IfbnMZXyW6vnrpxSqdQ69cJBBx0UrafHTtOezjnnnGg9TV2r5b6PkTYAAAAA\nAAAFxEsbAAAAAACAAuKlDQAAAAAAQAFVZE6bVMnAVE51VhlDszg3V0vn9evXL1pPy3wvWrQoxL5c\n9N133525LGvej1Rud9788FrNXdT91tjnbU6YMCHEfv6YJ554IsTbbrttiH0ut5ZC1LxVP5eMzpMy\nb968aJmeU12m8wKYxbnK/vxq+XItH1dLuft+fhH9jqk5mfQ7+hK1mmuq58eXqtSShzqHlG9vuk9+\nDoGsnG1/DjSv3H+XvHP31HKeq9l391+v7REjRkTL5syZE+KTTjopxFra0iyehypVslLb4g033BAt\nmzx5coj1OvDXZlYfU8vyfg89d6mS6al5NLJKiHu6/TXXXDNaprn7vv/WfHGdp8jP96DzOvht6DnX\nv+XLcxa1j02Vas07j52f40TbmD73+DK2ev/T9uvpv0sdR13mr6u8cyzVajv15yprfim/nrar1LLV\nVlstxIMGDYrW088bb7xxiP2x1Ha1+eabR8t0TqNVVlklxP48avtL3RdrcW6ivM/jTXluz1tuOuvf\n+O117NgxxH7+TX0G1v7P//ZJzVuj503PfS21y1Tfo/w9zT8/ZNHzmJo3RWOdv83M7Kmnngqxn+vt\nvvvuC/HLL78cYp3rZmnq4TdiKfR7++te+1BtKwMGDIjW0+N86623hnjUqFHRev73Sa1ipA0AAAAA\nAEAB8dIGAAAAAACggCqSHuWHt2l6hQ798sOhVl999RD70nk6pFhLQu+4447Reppqo2WgdYi+WTy8\n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\n","text/plain":["
"]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"id":"T4oOLRIVSwmG","colab_type":"code","colab":{}},"source":["from keras import regularizers\n","\n","encoding_dim = 32\n","\n","input_img = Input(shape=(784,))\n","# add a Dense layer with a L1 activity regularizer\n","encoded = Dense(encoding_dim, activation='relu',\n"," activity_regularizer=regularizers.l1(10e-5))(input_img)\n","decoded = Dense(784, activation='sigmoid')(encoded)\n","\n","autoencoder = Model(input_img, decoded)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"bObotUA5TAU0","colab_type":"text"},"source":["### Convolutional autoencoder"]},{"cell_type":"code","metadata":{"id":"RMw8NLIBS_p9","colab_type":"code","colab":{}},"source":["from keras.layers import Input, Dense, Conv2D, MaxPooling2D, UpSampling2D\n","from keras.models import Model\n","from keras import backend as K\n","\n","input_img = Input(shape=(28, 28, 1))\n","\n","x = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)\n","x = MaxPooling2D((2, 2), padding='same')(x)\n","x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)\n","x = MaxPooling2D((2, 2), padding='same')(x)\n","x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)\n","encoded = MaxPooling2D((2, 2), padding='same')(x)\n","\n","# at this point the representation is (4, 4, 8) i.e. 128-dimensional\n","\n","x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)\n","x = UpSampling2D((2, 2))(x)\n","x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)\n","x = UpSampling2D((2, 2))(x)\n","x = Conv2D(16, (3, 3), activation='relu')(x)\n","x = UpSampling2D((2, 2))(x)\n","decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)\n","\n","autoencoder = Model(input_img, decoded)\n","autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"OTsr0wJUTHMX","colab_type":"code","colab":{}},"source":["from keras.datasets import mnist\n","import numpy as np\n","\n","(x_train, _), (x_test, _) = mnist.load_data()\n","\n","x_train = x_train.astype('float32') / 255.\n","x_test = x_test.astype('float32') / 255.\n","x_train = np.reshape(x_train, (len(x_train), 28, 28, 1))\n","x_test = np.reshape(x_test, (len(x_test), 28, 28, 1))"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"R3NsxWCnTPAu","colab_type":"code","outputId":"60f48808-68a4-456a-98bd-93eb2b486e16","colab":{"base_uri":"https://localhost:8080/","height":139}},"source":["autoencoder.fit(x_train, x_train,\n"," epochs=10,\n"," batch_size=128,\n"," shuffle=True,\n"," validation_data=(x_test, x_test))"],"execution_count":0,"outputs":[{"output_type":"stream","text":["Train on 60000 samples, validate on 10000 samples\n","Epoch 1/10\n","60000/60000 [==============================] - 79s 1ms/step - loss: 0.2086 - val_loss: 0.1748\n","Epoch 2/10\n","60000/60000 [==============================] - 79s 1ms/step - loss: 0.1591 - val_loss: 0.1480\n","Epoch 3/10\n","10368/60000 [====>.........................] - ETA: 1:02 - loss: 0.1483"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"gOC1-c5_Tk5k","colab_type":"text"},"source":["#### Image denoising"]},{"cell_type":"code","metadata":{"id":"FfCy-7VFTju-","colab_type":"code","colab":{}},"source":["from keras.datasets import mnist\n","import numpy as np\n","\n","(x_train, _), (x_test, _) = mnist.load_data()\n","\n","x_train = x_train.astype('float32') / 255.\n","x_test = x_test.astype('float32') / 255.\n","x_train = np.reshape(x_train, (len(x_train), 28, 28, 1))\n","x_test = np.reshape(x_test, (len(x_test), 28, 28, 1))\n","\n","noise_factor = 0.5\n","x_train_noisy = x_train + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_train.shape) \n","x_test_noisy = x_test + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_test.shape) \n","\n","x_train_noisy = np.clip(x_train_noisy, 0., 1.)\n","x_test_noisy = np.clip(x_test_noisy, 0., 1.)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"3iSa8sTDTp8M","colab_type":"code","colab":{}},"source":["n = 10\n","plt.figure(figsize=(20, 2))\n","for i in range(n):\n"," ax = plt.subplot(1, n, i)\n"," plt.imshow(x_test_noisy[i].reshape(28, 28))\n"," plt.gray()\n"," ax.get_xaxis().set_visible(False)\n"," ax.get_yaxis().set_visible(False)\n","plt.show()"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"5USHH66tTtYE","colab_type":"code","colab":{}},"source":["input_img = Input(shape=(28, 28, 1)) # adapt this if using `channels_first` image data format\n","\n","x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)\n","x = MaxPooling2D((2, 2), padding='same')(x)\n","x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)\n","encoded = MaxPooling2D((2, 2), padding='same')(x)\n","\n","# at this point the representation is (7, 7, 32)\n","\n","x = Conv2D(32, (3, 3), activation='relu', padding='same')(encoded)\n","x = UpSampling2D((2, 2))(x)\n","x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)\n","x = UpSampling2D((2, 2))(x)\n","decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)\n","\n","autoencoder = Model(input_img, decoded)\n","autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"l5n2CrK5Tym8","colab_type":"code","colab":{}},"source":["autoencoder.fit(x_train_noisy, x_train,\n"," epochs=100,\n"," batch_size=128,\n"," shuffle=True,\n"," validation_data=(x_test_noisy, x_test),\n"," callbacks=[TensorBoard(log_dir='/tmp/tb', histogram_freq=0, write_graph=False)])"],"execution_count":0,"outputs":[]}]}