{"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"},"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"},"source":["Example (from https://blog.keras.io/building-autoencoders-in-keras.html)"]},{"cell_type":"code","metadata":{"id":"COQIwUfIRNyG","executionInfo":{"status":"ok","timestamp":1649645322353,"user_tz":240,"elapsed":4815,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}}},"source":["#!pip install keras==2.8\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":1,"outputs":[]},{"cell_type":"code","metadata":{"id":"ubDPsyMbbghD","outputId":"54d49f6d-3a1a-4991-e794-358d481ab008","executionInfo":{"status":"ok","timestamp":1649645322492,"user_tz":240,"elapsed":153,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}},"colab":{"base_uri":"https://localhost:8080/","height":312}},"source":["from keras.utils.vis_utils import plot_model\n","plot_model(autoencoder, show_shapes=True, show_layer_names=True)"],"execution_count":2,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""],"image/png":"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\n"},"metadata":{},"execution_count":2}]},{"cell_type":"code","metadata":{"id":"vdGC1xZMRkwc","executionInfo":{"status":"ok","timestamp":1649645322493,"user_tz":240,"elapsed":5,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}}},"source":["# this model maps an input to its encoded representation\n","encoder = Model(input_img, encoded)"],"execution_count":3,"outputs":[]},{"cell_type":"code","metadata":{"id":"ZPkV6n97b1xK","outputId":"9eab6576-4534-4b3f-9dc9-6ebf98af937e","executionInfo":{"status":"ok","timestamp":1649645322640,"user_tz":240,"elapsed":151,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}},"colab":{"base_uri":"https://localhost:8080/","height":201}},"source":["from keras.utils.vis_utils import plot_model\n","plot_model(encoder, show_shapes=True, show_layer_names=True)"],"execution_count":4,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""],"image/png":"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\n"},"metadata":{},"execution_count":4}]},{"cell_type":"code","metadata":{"id":"ySq9tyMRRvoi","executionInfo":{"status":"ok","timestamp":1649645322641,"user_tz":240,"elapsed":5,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}}},"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":5,"outputs":[]},{"cell_type":"code","metadata":{"id":"twZHrQqvb-JH","outputId":"f97e9b4e-eb81-4ca1-e751-fc31b86269ad","executionInfo":{"status":"ok","timestamp":1649645322831,"user_tz":240,"elapsed":195,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}},"colab":{"base_uri":"https://localhost:8080/","height":201}},"source":["plot_model(decoder, show_shapes=True, show_layer_names=True)"],"execution_count":6,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""],"image/png":"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\n"},"metadata":{},"execution_count":6}]},{"cell_type":"code","metadata":{"id":"hX4eCkh2RyZy","executionInfo":{"status":"ok","timestamp":1649645322983,"user_tz":240,"elapsed":156,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}}},"source":["autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')"],"execution_count":7,"outputs":[]},{"cell_type":"code","metadata":{"id":"LuOXhwhsR3Um","executionInfo":{"status":"ok","timestamp":1649645323503,"user_tz":240,"elapsed":524,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}}},"source":["from keras.datasets import mnist\n","import numpy as np\n","(x_train, _), (x_test, _) = mnist.load_data()"],"execution_count":8,"outputs":[]},{"cell_type":"code","metadata":{"id":"C6jgBv-gR6aw","outputId":"86b6e853-254f-4e7e-f1e0-968e4acce8e3","executionInfo":{"status":"ok","timestamp":1649645323669,"user_tz":240,"elapsed":170,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}},"colab":{"base_uri":"https://localhost:8080/"}},"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":9,"outputs":[{"output_type":"stream","name":"stdout","text":["(60000, 784)\n","(10000, 784)\n"]}]},{"cell_type":"code","metadata":{"id":"Otf16ABlSAm5","outputId":"99a995c8-96b7-4a00-ea0a-1869b771709d","colab":{"base_uri":"https://localhost:8080/"}},"source":["autoencoder.fit(x_train, x_train,\n"," epochs=50,\n"," batch_size=256,\n"," shuffle=True,\n"," validation_data=(x_test, x_test))"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/50\n","235/235 [==============================] - 73s 309ms/step - loss: 0.4377 - val_loss: 0.4386\n","Epoch 2/50\n","235/235 [==============================] - 70s 300ms/step - loss: 0.4329 - val_loss: 0.4334\n","Epoch 3/50\n","235/235 [==============================] - 70s 300ms/step - loss: 0.4276 - val_loss: 0.4277\n","Epoch 4/50\n","235/235 [==============================] - 70s 300ms/step - loss: 0.4217 - val_loss: 0.4214\n","Epoch 5/50\n","235/235 [==============================] - 71s 300ms/step - loss: 0.4150 - val_loss: 0.4141\n","Epoch 6/50\n","235/235 [==============================] - 70s 299ms/step - loss: 0.4074 - val_loss: 0.4057\n","Epoch 7/50\n","235/235 [==============================] - 70s 298ms/step - loss: 0.3983 - val_loss: 0.3956\n","Epoch 8/50\n","235/235 [==============================] - 69s 296ms/step - loss: 0.3873 - val_loss: 0.3831\n","Epoch 9/50\n","235/235 [==============================] - 70s 297ms/step - loss: 0.3743 - val_loss: 0.3692\n","Epoch 10/50\n","235/235 [==============================] - 71s 304ms/step - loss: 0.3602 - val_loss: 0.3544\n","Epoch 11/50\n","235/235 [==============================] - 69s 296ms/step - loss: 0.3455 - val_loss: 0.3393\n","Epoch 12/50\n","235/235 [==============================] - 70s 296ms/step - loss: 0.3310 - val_loss: 0.3251\n","Epoch 13/50\n","235/235 [==============================] - 70s 296ms/step - loss: 0.3177 - val_loss: 0.3124\n","Epoch 14/50\n","235/235 [==============================] - 70s 297ms/step - loss: 0.3063 - val_loss: 0.3020\n","Epoch 15/50\n","235/235 [==============================] - 69s 295ms/step - loss: 0.2970 - val_loss: 0.2936\n","Epoch 16/50\n","235/235 [==============================] - 70s 296ms/step - loss: 0.2897 - val_loss: 0.2871\n","Epoch 17/50\n","235/235 [==============================] - 70s 296ms/step - loss: 0.2839 - val_loss: 0.2818\n","Epoch 18/50\n","235/235 [==============================] - 70s 296ms/step - loss: 0.2792 - val_loss: 0.2775\n","Epoch 19/50\n","235/235 [==============================] - 70s 296ms/step - loss: 0.2752 - val_loss: 0.2738\n","Epoch 20/50\n","235/235 [==============================] - 71s 304ms/step - loss: 0.2717 - val_loss: 0.2704\n","Epoch 21/50\n","235/235 [==============================] - 69s 295ms/step - loss: 0.2686 - val_loss: 0.2674\n","Epoch 22/50\n","235/235 [==============================] - 69s 295ms/step - loss: 0.2657 - val_loss: 0.2645\n","Epoch 23/50\n","235/235 [==============================] - 69s 296ms/step - loss: 0.2630 - val_loss: 0.2620\n","Epoch 24/50\n","235/235 [==============================] - 70s 296ms/step - loss: 0.2605 - val_loss: 0.2596\n","Epoch 25/50\n","235/235 [==============================] - 69s 295ms/step - loss: 0.2582 - val_loss: 0.2574\n","Epoch 26/50\n","235/235 [==============================] - 69s 296ms/step - loss: 0.2562 - val_loss: 0.2554\n","Epoch 27/50\n","235/235 [==============================] - 69s 295ms/step - loss: 0.2543 - val_loss: 0.2536\n","Epoch 28/50\n","235/235 [==============================] - 70s 299ms/step - loss: 0.2525 - val_loss: 0.2519\n","Epoch 29/50\n","235/235 [==============================] - 70s 300ms/step - loss: 0.2509 - val_loss: 0.2503\n","Epoch 30/50\n","235/235 [==============================] - 70s 300ms/step - loss: 0.2494 - val_loss: 0.2489\n","Epoch 31/50\n","235/235 [==============================] - 70s 300ms/step - loss: 0.2479 - val_loss: 0.2475\n","Epoch 32/50\n","235/235 [==============================] - 70s 299ms/step - loss: 0.2466 - val_loss: 0.2462\n","Epoch 33/50\n","235/235 [==============================] - 70s 299ms/step - loss: 0.2453 - val_loss: 0.2449\n","Epoch 34/50\n","202/235 [========================>.....] - ETA: 9s - loss: 0.2442"]}]},{"cell_type":"code","metadata":{"id":"TmUZWaUUSG05","executionInfo":{"status":"ok","timestamp":1649645359057,"user_tz":240,"elapsed":1371,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}}},"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":11,"outputs":[]},{"cell_type":"code","metadata":{"id":"Nv1SVqcRSKoz","outputId":"5097c579-8916-44ce-b4e7-1d854ef8e5be","executionInfo":{"status":"ok","timestamp":1649645359857,"user_tz":240,"elapsed":805,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}},"colab":{"base_uri":"https://localhost:8080/","height":248}},"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":12,"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"iVBORw0KGgoAAAANSUhEUgAABG0AAADnCAYAAACkCqtqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOyddZxd1dWG18QgBAIkJFDcirsEd1rcpUCguLumuENLIDjBirsElyJFiheKa6EFCkWCFEhIIAnz/fH97s6z3pk7JJk7k8vkff5hHfaZe/c9Z++19zlZ71oNjY2NYYwxxhhjjDHGGGPqi04TuwPGGGOMMcYYY4wxpil+aWOMMcYYY4wxxhhTh/iljTHGGGOMMcYYY0wd4pc2xhhjjDHGGGOMMXWIX9oYY4wxxhhjjDHG1CF+aWOMMcYYY4wxxhhTh3QZn5MbGhpcH3wi0djY2FCLz/E9nKh80djY2KcWH+T7OPHwXOwQeC52ADwXOwSeix0Az8UOgediB8BzsUPQ7Fx0pI0x7ccHE7sDxpiI8Fw0pl7wXDSmPvBcNKY+aHYu+qWNMcYYY4wxxhhjTB3ilzbGGGOMMcYYY4wxdYhf2hhjjDHGGGOMMcbUIX5pY4wxxhhjjDHGGFOH+KWNMcYYY4wxxhhjTB3ilzbGGGOMMcYYY4wxdYhf2hhjjDHGGGOMMcbUIX5pY4wxxhhjjDHGGFOHdJnYHTCTJoccckixu3fvntoWWWSRYm+++eZVP2Pw4MHFfvrpp1Pb1Vdf3douGmOMMcYYY4wxExVH2hhjjDHGGGOMMcbUIX5pY4wxxhhjjDHGGFOH+KWNMcYYY4wxxhhjTB3inDam3bjxxhuL3VKuGvLTTz9Vbdt9992Lveaaa6a2xx57rNgffvjhuHbRTGTmmWeedPzWW28Ve//99y/2ueee2259mpTp0aNHsQcOHFhszr2IiBdeeKHYW2yxRWr74IMP2qh3xhhjjDETh2mnnbbYs8466zj9je6JDjzwwGK/9tprxX7nnXfSeS+//PKEdNF0IBxpY4wxxhhjjDHGGFOH+KWNMcYYY4wxxhhjTB1ieZRpMyiHihh3SRQlMX/5y1+KPeecc6bzNthgg2LPNddcqa1///7FPvXUU8fpe83EZ/HFF0/HlMd99NFH7d2dSZ5f/epXxd51112LrbLFJZdcstjrr79+ajv//PPbqHeGLLHEEsUeMmRIapt99tnb7Ht/+9vfpuM333yz2P/5z3/a7HvNz8M1MiLizjvvLPY+++xT7AsvvDCdN2bMmLbtWAekb9++xb7pppuK/dRTT6XzLr744mK///77bd6vClNPPXU6XnnllYt9//33F3vUqFHt1idjfgmst956xd5www1T26qrrlrsueeee5w+T2VPs802W7Enm2yyqn/XuXPncfp803FxpI0xxhhjjDHGGGNMHeKXNsYYY4wxxhhjjDF1iOVRpqYstdRSxd5kk02qnvf6668XW8MNv/jii2IPGzas2N26dUvnPfPMM8VedNFFU1vv3r3HscemnlhsscXS8fDhw4t92223tXd3Jjn69OmTjq+88sqJ1BMzvqy11lrFbinEutaoBGennXYq9lZbbdVu/TD/D9e+Cy64oOp55513XrEvu+yy1DZixIjad6yDwaoxEXlPQynSZ599ls6bWJIoVviLyL6e8tZ333237Tv2C6Nnz57pmJL7hRZaqNhaxdRSs/qGaRX23nvvYlMKHhHRvXv3Yjc0NLT6e7VKqjHjiiNtjDHGGGOMMcYYY+oQv7QxxhhjjDHGGGOMqUP80sYYY4wxxhhjjDGmDpmoOW20BDR1hP/9739T28iRI4t97bXXFvvTTz9N51mPO3FhiWDVflLzzfwLn3zyyTh99sEHH5yOF1hggarn3nPPPeP0mWbiQ004y9BGRFx99dXt3Z1Jjv3226/YG2+8cWrr16/feH8eS8lGRHTqNPbfBl5++eViP/744+P92SbTpcvYJXzdddedKH3QXBkHHXRQsXv06JHamKPKtA2cfzPPPHPV866//vpic39lqjPddNMV+8Ybb0xtvXr1KjZzCe27775t37EqHHXUUcWeY445Utvuu+9ebO+bm9K/f/9in3zyyaltlllmafZvNPfNl19+WfuOmZpB/7j//vu36Xe99dZbxeazkKkdLLlOXx2Rc6yyTHtExE8//VTsCy+8sNhPPvlkOq8e/KQjbYwxxhhjjDHGGGPqEL+0McYYY4wxxhhjjKlDJqo86rTTTkvHs88++zj9HcM6v/vuu9TWnmFnH330UbH1tzz//PPt1o964q677io2Q9Ui8r366quvxvuztXxs165dx/szTP0x33zzFVvlFBqCbmrPmWeeWWyGiU4om266adXjDz74oNi/+93v0nkqszE/z2qrrVbs5ZZbrti6HrUlWvqYstUpppgitVkeVXu0vPuRRx45Tn9H6WljY2NN+9RRWWKJJYqtIfbkhBNOaIfeNGXBBRdMx5SU33bbbanNa2tTKJc566yzit27d+90XrX5cu6556Zjyr0nZM9rxg2VwlDqRInL/fffn8774Ycfiv3NN98UW9cp7ksfeOCB1Pbaa68V+9lnny32iy++mM4bMWJE1c834w7TKUTkOca9po6JcWWZZZYp9ujRo1Pb22+/XewnnngitXHM/fjjjxP03eOCI22MMcYYY4wxxhhj6hC/tDHGGGOMMcYYY4ypQ/zSxhhjjDHGGGOMMaYOmag5bVjiOyJikUUWKfabb76Z2uaff/5it6QrXnbZZYv9n//8p9jVSvQ1B3VsQ4cOLTbLWSsffvhhOp5Uc9oQ5q+YUA499NBizzPPPFXPo5a0uWNTvxx22GHF1jHjedQ23HvvvcVmSe4JhaVNhw0bltpmm222YrPs7HPPPZfO69y5c6v70dFRPTfLNr/33nvFPuWUU9qtTxtttFG7fZdpysILL5yOl1xyyarncm9z3333tVmfOgp9+/ZNx5tttlnVc3feeedic9/Y1jCPzUMPPVT1PM1po/kgTcQhhxxSbJZwH1c0T9vaa69dbC0bzvw3bZkDo6PSUp6ZRRddtNgs9aw888wzxeZz5fvvv5/Om3XWWYvNXKYRtckDaJrC9wF77713sXWO9ezZs9m///jjj9Px3/72t2L/+9//Tm18BmFuxX79+qXz6BPWXXfd1Pbyyy8Xm2XDa40jbYwxxhhjjDHGGGPqEL+0McYYY4wxxhhjjKlDJqo86uGHH27xmGiptgpabnSxxRYrNsOcll566XHu18iRI4v9zjvvFFslWwyVYmi6aR3rr79+sVk6s1u3bum8zz//vNiHH354avv+++/bqHemtcw+++zpeKmllio251uESyPWilVWWSUdzzvvvMVmeO+4hvpq+CfDk1k6MyJi9dVXL3ZL5Yj33HPPYg8ePHic+jGpcdRRR6VjhogzFF8larWGa5+OLYeLty8tSXYUlRGYljnjjDPS8bbbblts7i8jIm6++eZ26ZOy0korFXv66adPbVdccUWxr7nmmvbq0i8GSncjInbcccdmz3vllVfS8WeffVbsNddcs+rnTz311MWm9Coi4tprry32p59++vOdncTR/f91111XbMqhIrI8uCXJIFFJFNH0F6b2XHTRRemYsraWynfzvcGrr75a7COOOCKdx+d6Zfnlly8296GXXXZZOo/vF+gDIiLOP//8Yt96663FrrVU1pE2xhhjjDHGGGOMMXWIX9oYY4wxxhhjjDHG1CETVR5VC77++ut0/MgjjzR7XkvSq5Zg6LFKsRiKdeONN07Q55umUC6jIZGE1/yxxx5r0z6Z2qFyCtKeVTc6OpSh3XDDDamtpXBTwmpeDPk8/vjj03ktyRH5Gbvttlux+/Tpk8477bTTij355JOntvPOO6/Yo0aN+rludyg233zzYmvFgnfffbfY7VlpjTI3lUM9+uijxf7f//7XXl2aZFl55ZWrtmlVmpbkiaYpjY2N6Zhj/b///W9qa8sKQN27d0/HDP3fa6+9iq393WmnndqsTx0Byh0iIqaaaqpis9qM7lm4Pm299dbFVknGXHPNVewZZpghtd1xxx3FXmeddYr91VdfjVPfJwWmnHLKYmsKBKZR+OKLL1Lb6aefXmynSqgfdF/Hqk277LJLamtoaCg2nwtUOj9w4MBiT2g6hd69exebVUyPO+64dB7TtKi0sr1wpI0xxhhjjDHGGGNMHeKXNsYYY4wxxhhjjDF1iF/aGGOMMcYYY4wxxtQhv/icNm1B3759i33BBRcUu1On/I6L5aitQ51wbr/99nT829/+ttnzrrrqqnSs5W/NL4OFF164ahvzmpjW0aXLWPc+rjlsNDfUVlttVWzVjY8rzGlz6qmnFnvQoEHpvCmmmKLYOg7uvPPOYr/33nsT1I9fKltssUWxeY0i8vrU1jBHUv/+/Ys9ZsyYdN5JJ51U7Ekt/1B7wRKltBXV+L/00ktt1qdJjfXWWy8ds5w6czlpDoZxhXlUVl111dS27LLLNvs3t9xyywR916TKZJNNlo6ZE+jMM8+s+ncsH3z55ZcXm746ImLOOees+hnMtdKW+ZB+yWy88cbF/sMf/pDaWIabZe8jIr755pu27ZiZINSPHXroocVmDpuIiI8//rjYzC373HPPTdB3M1fNLLPMktr4bHnvvfcWW/PYEu3v1VdfXey2zOXnSBtjjDHGGGOMMcaYOsQvbYwxxhhjjDHGGGPqEMujmmHvvfcuNsvSannxt99+u9361NH41a9+VWwN72bIKiUZDLuPiBg2bFgb9c7UGoZz77jjjqntxRdfLPaDDz7Ybn0y/w9LRWuJ2AmVRFWDMidKbCIill566Zp+1y+VqaeeOh1Xk0JETLj0YkJguXbK7d5888103iOPPNJufZpUGde50p7joyNy9tlnp+PVVlut2DPOOGNqY+l1hs5vuOGGE/Td/Awt5U3+9a9/FVtLTpuWYbluhfI3lfBXY6mllhrn737mmWeK7b1s87Qk/eS+8aOPPmqP7phWQolSRFNpNRk9enSxl1lmmWJvvvnm6bz55puv2b8fMWJEOp5//vmbtSPyPnf66aev2ify2WefpeP2koU70sYYY4wxxhhjjDGmDvFLG2OMMcYYY4wxxpg6xPKoiFhhhRXSsWYpr8BM5hERr732Wpv1qaNz6623Frt3795Vz7vmmmuKPalVjelIrLnmmsXu1atXarv//vuLzaoMpnZo5TvC0NO2hiH/2qeW+njccccVe7vttqt5v+oJrWgy00wzFfv6669v7+4U5pprrmb/v9fB9qclGUYtKheZ/+eFF15Ix4ssskixF1tssdS29tprF5tVUYYOHZrOu/LKK8fpu1mN5OWXX6563lNPPVVs75HGD/WnlLJRgqgSDFbA3GSTTYqt1WY4F7Vt1113LTbv9RtvvDFOfZ8UUCkM4Xw79thjU9sdd9xRbFfMqx/++te/pmNKqfmMEBEx66yzFvucc84pdktSUcqtVIrVEtUkUT/99FM6vu2224q93377pbZPPvlknL+vNTjSxhhjjDHGGGOMMaYO8UsbY4wxxhhjjDHGmDrEL22MMcYYY4wxxhhj6hDntImIddddNx137dq12A8//HCxn3766XbrU0eEeuElllii6nmPPvposVWran6ZLLroosVWTeott9zS3t2ZJNhjjz2KrdrcicUGG2xQ7MUXXzy1sY/aX+a06eh899136ZiafObUiMj5ob766qua9qNv377puFp+gSeeeKKm32uaZ8UVVyz2NttsU/W8b775ptguhVtbvv7662JraXseDxgwoNXfNeeccxabucAisk845JBDWv1dkyoPPfRQOubcYd4azTNTLa+Gft7ee+9d7Lvvvju1/frXvy4282Nw3Z7U6dOnT7F1T8Dcb8ccc0xqO+qoo4p94YUXFptl1iNy3pR333232K+//nrVPi244ILpmM+F9rcto2W4mQ9qmmmmSW3MLcu8s19++WU678MPPyw2xwSfOSIi+vXrN979vfjii9PxEUccUWzmq2pPHGljjDHGGGOMMcYYU4f4pY0xxhhjjDHGGGNMHTLJyqO6d+9ebJaOi4j48ccfi015zqhRo9q+Yx0ILeXN0DJK0BSG/g4bNqz2HTPtwgwzzFDslVZaqdhvv/12Oo9l9EztoBSpPWFIc0TEAgssUGz6gJbQMrmTku/VEGKW8d1ss81S2z333FPsQYMGjfd3LbTQQumYkozZZ589tVWTBNSL9K6jw/W0U6fq/9724IMPtkd3TBtDyYfOPcqv1FeacUclpVtuuWWxKdueeuqpq37GueeeW2yVxY0cObLYQ4YMSW2Uf6y11lrFnmuuudJ5k3IZ99NPP73YBx100Dj/Hf3jXnvt1axdKzj/mNphq622qvl3dWRUbsT5MSFcddVV6bgleRQl6RxnV1xxRTqPJcUnFo60McYYY4wxxhhjjKlD/NLGGGOMMcYYY4wxpg7xSxtjjDHGGGOMMcaYOmSSzWlz6KGHFltLz95///3Ffuqpp9qtTx2Ngw8+OB0vvfTSzZ53++23p2OX+e4Y7LDDDsVm+eD77rtvIvTGtBdHHnlkOmbZ05Z4//33i7399tunNpZ1nNSgP9TSv+utt16xr7/++vH+7C+++CIdM3fGdNNNN06fobpv0zZUK7muuQAuuuii9uiOqTFbbLFFOv79739fbOZciGha9tbUBpbs5nzbZptt0nmcc8w9xBw2yoknnpiO559//mJvuOGGzX5eRNO1cFKCeU1uvPHG1HbdddcVu0uX/Cg7yyyzFLul/F+1gDn8OGZYdjwi4qSTTmrTfpiIww47rNjjk1Nojz32KPaE7KPaE0faGGOMMcYYY4wxxtQhfmljjDHGGGOMMcYYU4dMMvIohpFHRBx99NHF/vbbb1PbCSec0C596uiMa4m+ffbZJx27zHfHYLbZZmv2/3/99dft3BPT1tx7773FnnfeeSfoM954441iP/HEE63uU0fhrbfeKjZL0kZELLbYYsWee+65x/uzWdZWufLKK9Nx//79mz1PS5Sb2jDzzDOnY5VoVPjoo4/S8fPPP99mfTJtxzrrrFO17e67707H//jHP9q6O5M8lErRnlDUT1LuQ3nUaqutls7r1atXsbVEeUeHJZbVr80zzzxV/26NNdYodteuXYt93HHHpfOqpWyYUChfXnLJJWv62aZ5dtlll2JTkqaSOfL666+n4yFDhtS+Y22EI22MMcYYY4wxxhhj6hC/tDHGGGOMMcYYY4ypQzq0PKp3797FPuecc1Jb586di83Q/oiIZ555pm07ZhIM/4yIGDVq1Hh/xjfffFP1MxgeOfXUU1f9jGmmmSYdj6u8iyGcAwYMSG3ff//9OH1GR2T99ddv9v/fdddd7dyTSROG6rZUQaGlsPyLL7642DPOOGPV8/j5P/3007h2MbHBBhtM0N9Nyrz00kvN2rXgX//61zidt9BCC6Xj1157rab9mFRZfvnl03G1OazVF80vE/XDw4cPL/YZZ5zR3t0xbcxNN91UbMqjfve736XzmD7AqRvGjYcffrjZ/085cUSWR40ePbrYl19+eTrvkksuKfYBBxyQ2qrJVk3b0K9fv3RM3zjllFNW/Tum3WC1qIiIH374oUa9a3scaWOMMcYYY4wxxhhTh/iljTHGGGOMMcYYY0wd4pc2xhhjjDHGGGOMMXVIh8tpw1w1999/f7HnmGOOdN57771XbJb/Nu3PK6+80urPuPnmm9PxJ598Uuzpp5++2KoXrjWffvppOj755JPb9PvqiRVXXDEdzzDDDBOpJyYiYvDgwcU+7bTTqp7HcrIt5aMZ11w143rehRdeOE7nmYkDcyI1d1zBOWzaBubkU7744otin3322e3RHdMGMLcC9ykREZ9//nmxXeK748F1kuvzRhttlM479thji33DDTektnfeeaeNetcxeeCBB9Ix9+csEb3rrrum8+aee+5ir7rqquP0XR999NEE9ND8HJr7cKqppmr2POYEi8h5o5588snad6ydcKSNMcYYY4wxxhhjTB3ilzbGGGOMMcYYY4wxdUiHk0fNNddcxV5yySWrnsdyzpRKmdqhpdQ17LOWbLHFFhP0dyzz15Ks48477yz2888/X/W8v/3tbxPUj47AJptsko4pVXzxxReL/fjjj7dbnyZlhgwZUuxDDz00tfXp06fNvnfo0KHp+M033yz2brvtVmxKGE390djY2OKxaVvWWmutqm0ffvhhsb/55pv26I5pAyiP0vl1zz33VP07SgKmnXbaYnNcmF8OL730UrGPOeaY1DZw4MBin3LKKaltu+22K/aIESPaqHcdB+5FInLZ9S233LLq36222mpV28aMGVNsztk//OEP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xw/Pi8jXcfjw4V80Njb2iRrAuajz7csvvyw2x2hExMwzz1xs3o+W7jevUUS+hjzv448/TufxHvB+6+fx+nH+RkT89NNPxeY91nvQpctYV6bXg59BW8cu+zvllFOmtso8HTZsWPzwww81mYvdu3dv7NmzZ7Nt9At6D2eYYYZmz+O9jYj473//W2ydixwjvB86jzh3+F0Kz9N7M9lkkzVr63zj/eB90u+u5ov079TXcpzVci5OPfXUVddF3jtt45qhv6Ma9EkR+VpzDVY/xHvckv/mHND7w7HKNr1XHAv8PP3uxsbGYut847rOz4sYO0gUWhQAACAASURBVBaGDx8eI0eOrPm6qOPmq6++arbPERHTTz99sblW6TzimNXP4D3s1atXsT/55JOq/dXrRejL9Tz+NvZD9zYtrZkcW5xT9MER+d5zHxWR5/PQoUNrNhenmWaaxop/1N/E69yST+Vvasm/8F5F5N/E3855GRHR0NDQ7HnKFFNMUbW/vD/sr+5leZ7OU45R+gf66Ih83bStMk9HjhwZo0aNqslcnGqqqRqnm266iGj6e3gdhg8fnto4F3me7im4Ls4555ypjZ/Je6/PGdyr8zrq9eG91rHEucg+8m8i8jhWv87PZJvORV5H9T/8vi+++KJmc7FXr16NM800U0RE/Oc//0ltLV0zPpvp+kT43DDbbLOlNu5vWprPlXEWke+xrrOE60FEnqe87rqO8Lrr/am2f9KxwN+le7pKv4YPH16zPeqUU07ZWFm7WnrG0msy44wzFpv+T+8n23T/ynWM/kn9ejUfqtdf1yDC38Zrrs8q/G76m4h8bzh+tH8tPS9yrf3666+bnYvj9dKmb9++cfrpp0dExLvvvpvaHnrooWJz8xIRseGGGxabf7fpppum8/70pz8V+/rrr6/6+RzgQ4YMSectt9xyxX7vvfeKrQ+U/O4vvvgitXEArrHGGsW+55570nkvvvhisffZZ5/Udu655xZ72223LTZvbETEE088UewNNtggtQ0ePDgiIt54442oFX369CnX+YMPPkhtvF76nb///e+LzevDyRkRcffddxf76KOPTm1/+ctfis1N0vnnn5/O22GHHYp9++23F3ujjTZK5/Gevvbaa6mNL3gWXnjhYuu45ab2kUceSW3zzDNPsWefffZi63X77LPPil1ZpCq89dZbxX7yySfzH7aCvn37xhlnnBERTTcUV111VbE5RiPyPeG90vu93XbbFVs3/ryGHNt6v+kkOU5a2kQtvfTSqY1OjPdYH2i40OvDJo+5EOi9Yr9WWWWV1PbYY49FRB7DraVnz56x9dZbR0TTxeFvf/tbsZ9//vnUtvPOOzfpV0QU31zh+OOPL/YRRxyR2q655ppic9P0z3/+M5230EILFfvJJ5+s8ksiFlxwwWJ/+OGHqY0v4Oeaa65i0/dF5A2UbhD43dtvv32xdQHng5POC/6jQK3n4plnnhkREf/6179S2wsvvFBsvS577LFHsfUBhPBha7755ktt77//frEffPDBYtNfRVR/+UY/HJHn+qOPPpra1lxzzWJzfOp8W2yxxYqtL9p5vzi3uW5HRNxyyy3FXnzxxVPb448/HhER9913X9SKPn36xCmnnBIRTdfoG2+8sdj6QvLAAw8sNv3p22+/nc6jn9SXIPR/FX8QEXHCCSdU7e/KK69cbH0QoZ9cccUVUxv3Ovw79j0iYoEFFii2jmnO548++qjYuomlP+XYiRh7DyMiBg8eXLO5OMMMM8Sll14aEU1/E6/z3//+99R2+OGHF5v7Cn3hQr/0u9/9LrU988wzxeYLTh2nfHBp6WUe59E//vGP1Ea/zIdX3efSL+s/zHCM0j/oi4yWXnJU5sZLL70UtWK66aaLY489NiLy3ioiX4fnnnsutR188MHFpt/t169fOo/r4sUXX5za+Jn0VfQBERHrr79+sbnHm3vuudN5LT1sci4uu+yyxdYHW45j9escn9zPVF5AV+A91IdZvkC49NJLazYXZ5pppvJ8dtBBB6W2d955p9g6prbccstic0+gD78XXnhhsS+55JLUdvnllxeb/4CuLxd22mmnYt92223Fnn/++dN5XINvuOGG1LbEEksUmy9y+b0R+brrP/Lz+3ivdCxceeWVxT7yyCNTW6VfDzzwQNSK3r17x4ABAyKi5WcnfV6vzN+IiL/+9a/F1v0G+6r711dffbXYfAly7733pvO4x+B90nu96qqrFlvH0uuvv15sXnN99rnrrruKTX8TEXH11VcXm8+OGozB+6vzmc/gN910U7NzsUEXipbo0aNHY2Ux10WYb7aXX3751MaXONwM6KLKH7DSSiulNj5M8PN0IeIxN1+6KZ511lmLzRcDEfkhn28zucBGRDz99NPF5uIY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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"T4oOLRIVSwmG","executionInfo":{"status":"ok","timestamp":1649645360060,"user_tz":240,"elapsed":206,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}}},"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":13,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"bObotUA5TAU0"},"source":["### Convolutional autoencoder"]},{"cell_type":"code","metadata":{"id":"RMw8NLIBS_p9","executionInfo":{"status":"ok","timestamp":1649645360177,"user_tz":240,"elapsed":121,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}}},"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":14,"outputs":[]},{"cell_type":"code","metadata":{"id":"OTsr0wJUTHMX","executionInfo":{"status":"ok","timestamp":1649645360644,"user_tz":240,"elapsed":469,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}}},"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":15,"outputs":[]},{"cell_type":"code","metadata":{"id":"R3NsxWCnTPAu","outputId":"4bf92bc4-5792-4684-8951-24aa8d112fdf","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1649646163304,"user_tz":240,"elapsed":802664,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}}},"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":16,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/10\n","469/469 [==============================] - 76s 161ms/step - loss: 0.6997 - val_loss: 0.6969\n","Epoch 2/10\n","469/469 [==============================] - 73s 157ms/step - loss: 0.6938 - val_loss: 0.6903\n","Epoch 3/10\n","469/469 [==============================] - 74s 157ms/step - loss: 0.6859 - val_loss: 0.6806\n","Epoch 4/10\n","469/469 [==============================] - 74s 157ms/step - loss: 0.6712 - val_loss: 0.6579\n","Epoch 5/10\n","469/469 [==============================] - 74s 158ms/step - loss: 0.6261 - val_loss: 0.5768\n","Epoch 6/10\n","469/469 [==============================] - 74s 157ms/step - loss: 0.5107 - val_loss: 0.4776\n","Epoch 7/10\n","469/469 [==============================] - 74s 157ms/step - loss: 0.4690 - val_loss: 0.4682\n","Epoch 8/10\n","469/469 [==============================] - 73s 157ms/step - loss: 0.4606 - val_loss: 0.4601\n","Epoch 9/10\n","469/469 [==============================] - 74s 157ms/step - loss: 0.4526 - val_loss: 0.4519\n","Epoch 10/10\n","469/469 [==============================] - 78s 166ms/step - loss: 0.4444 - val_loss: 0.4433\n"]},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":16}]},{"cell_type":"markdown","metadata":{"id":"gOC1-c5_Tk5k"},"source":["#### Image denoising"]},{"cell_type":"code","metadata":{"id":"FfCy-7VFTju-","executionInfo":{"status":"ok","timestamp":1649646166630,"user_tz":240,"elapsed":3332,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}}},"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":17,"outputs":[]},{"cell_type":"code","metadata":{"id":"3iSa8sTDTp8M","colab":{"base_uri":"https://localhost:8080/","height":398},"executionInfo":{"status":"error","timestamp":1649646167122,"user_tz":240,"elapsed":496,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}},"outputId":"0f666d9d-57d7-4183-d185-8ae34f5ead4c"},"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":18,"outputs":[{"output_type":"error","ename":"ValueError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m20\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0max\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_test_noisy\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m28\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m28\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.7/dist-packages/matplotlib/pyplot.py\u001b[0m in \u001b[0;36msubplot\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 1028\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1029\u001b[0m \u001b[0mfig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgcf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1030\u001b[0;31m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_subplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1031\u001b[0m \u001b[0mbbox\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbbox\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1032\u001b[0m \u001b[0mbyebye\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.7/dist-packages/matplotlib/figure.py\u001b[0m in \u001b[0;36madd_subplot\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1417\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_axstack\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mremove\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1418\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1419\u001b[0;31m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msubplot_class_factory\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprojection_class\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1420\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1421\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_add_axes_internal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.7/dist-packages/matplotlib/axes/_subplots.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, fig, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mnum\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m1\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mnum\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0mrows\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mcols\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 65\u001b[0m raise ValueError(\n\u001b[0;32m---> 66\u001b[0;31m f\"num must be 1 <= num <= {rows*cols}, not {num}\")\n\u001b[0m\u001b[1;32m 67\u001b[0m self._subplotspec = GridSpec(\n\u001b[1;32m 68\u001b[0m rows, cols, figure=self.figure)[int(num) - 1]\n","\u001b[0;31mValueError\u001b[0m: num must be 1 <= num <= 10, not 0"]},{"output_type":"display_data","data":{"text/plain":["
"]},"metadata":{}}]},{"cell_type":"code","metadata":{"id":"5USHH66tTtYE","executionInfo":{"status":"aborted","timestamp":1649646167120,"user_tz":240,"elapsed":165,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}}},"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":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"l5n2CrK5Tym8","executionInfo":{"status":"aborted","timestamp":1649646167121,"user_tz":240,"elapsed":165,"user":{"displayName":"Guray Erus","userId":"15374812584437350386"}}},"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":null,"outputs":[]}]}