diff --git a/15_autoencoders.ipynb b/15_autoencoders.ipynb index d423d07..d5f4a1a 100644 --- a/15_autoencoders.ipynb +++ b/15_autoencoders.ipynb @@ -2,40 +2,28 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "**Chapter 15 – Autoencoders**" ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "_This notebook contains all the sample code and solutions to the exercices in chapter 15._" ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "# Setup" ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "First, let's make sure this notebook works well in both python 2 and 3, import a few common modules, ensure MatplotLib plots figures inline and prepare a function to save the figures:" ] @@ -44,9 +32,7 @@ "cell_type": "code", "execution_count": 1, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -86,10 +72,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "A couple utility functions to plot grayscale 28x28 image:" ] @@ -98,9 +81,7 @@ "cell_type": "code", "execution_count": 2, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -113,9 +94,7 @@ "cell_type": "code", "execution_count": 3, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -132,20 +111,14 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "# PCA with a linear Autoencoder" ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Build 3D dataset:" ] @@ -154,9 +127,7 @@ "cell_type": "code", "execution_count": 4, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -174,10 +145,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Normalize the data:" ] @@ -185,11 +153,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.preprocessing import StandardScaler\n", @@ -200,20 +164,14 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Now let's build the Autoencoder..." ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Note: instead of using the `fully_connected()` function from the `tensorflow.contrib.layers` module (as in the book), we now use the `dense()` function from the `tf.layers` module, which did not exist when this chapter was written. This is preferable because anything in contrib may change or be deleted without notice, while `tf.layers` is part of the official API. As you will see, the code is mostly the same.\n", "\n", @@ -227,11 +185,7 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", @@ -259,11 +213,7 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "n_iterations = 1000\n", @@ -279,11 +229,7 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -294,9 +240,9 @@ }, { "data": { - "image/png": "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\nQs/5FtlsCAAAAABJRU5ErkJggg==\n", + "image/png": "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\nEs3/AQcsVH7eWduMAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -314,20 +260,14 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "# Stacked Autoencoders" ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Let's use MNIST:" ] @@ -335,11 +275,7 @@ { "cell_type": "code", "execution_count": 9, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -359,30 +295,21 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "## Train all layers at once" ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Let's build a stacked Autoencoder with 3 hidden layers and 1 output layer (ie. 2 stacked Autoencoders). We will use ELU activation, He initialization and L2 regularization." ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Note: since the `tf.layers.dense()` function is incompatible with `tf.contrib.layers.arg_scope()` (which is used in the book), we now use python's `functools.partial()` function instead. It makes it easy to create a `my_dense_layer()` function that just calls `tf.layers.dense()` with the desired parameters automatically set (unless they are overridden when calling `my_dense_layer()`)." ] @@ -390,11 +317,7 @@ { "cell_type": "code", "execution_count": 10, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "reset_graph()\n", @@ -440,10 +363,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Now let's train it! Note that we don't feed target values (`y_batch` is not used). This is unsupervised training." ] @@ -451,21 +371,17 @@ { "cell_type": "code", "execution_count": 11, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0 Train MSE: 0.0203432\n", - "1 Train MSE: 0.011473\n", - "2 Train MSE: 0.010229\n", - "3 Train MSE: 0.00990439\n", - "4 Train MSE: 0.0103764\n" + "0 Train MSE: 0.0205375\n", + "1 Train MSE: 0.0114228\n", + "2 Train MSE: 0.0102233\n", + "3 Train MSE: 0.00990161\n", + "4 Train MSE: 0.0103758\n" ] } ], @@ -489,10 +405,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "This function loads the model, evaluates it on the test set (it measures the reconstruction error), then it displays the original image and its reconstruction:" ] @@ -500,11 +413,7 @@ { "cell_type": "code", "execution_count": 12, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "def show_reconstructed_digits(X, outputs, model_path = None, n_test_digits = 2):\n", @@ -525,11 +434,7 @@ { "cell_type": "code", "execution_count": 13, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -541,9 +446,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd8AAAGoCAYAAAAHJ+8hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHOhJREFUeJzt3VuMnlX5N+DVTqfT6Z5W2qkUxFYsVYKytSC4TyExStRg\nVA40QCIxkUQSNZCYqCceKgcaNBpANGpCggarGCCgSKgCStkJFiqbANO9MJ3OdKab/8H35fv8J+te\n4Xkd7k7b6zq8n671vvPO9P3lSe77WTMOHTpUAIA8Mw/3GwCAY43wBYBkwhcAkglfAEgmfAEgmfAF\ngGTCFwCSCV8ASCZ8ASDZrMTX8igtjiYzDvcbOFoNDw/7ruCoMTQ0VP2ucOcLAMmELwAkE74AkEz4\nAkCyzIYrAJLNmFHvDXSc7OHlzhcAkglfAEgmfAEgmfAFgGTCFwCSCV8ASGbUCID/Z3JyMrzW399f\nrbfGlqJRp5Zov5kz6/eLR+LYlDtfAEgmfAEgmfAFgGTCFwCSCV8ASKbbGeA/9NKdO5Wv03r9qKu3\nl/ccdTW3Oof37dtXrQ8MDIRrog7liYmJzmsOHjxYrWf9zqaSO18ASCZ8ASCZ8AWAZMIXAJIJXwBI\nJnwBIJlRI4D/0Bpb6TrS0stevYwa7d+/P1wzZ86caj0aG4rqLQcOHAiv9fX1Veutn3PWrHo0RXu1\nXj8y1YdBdOXOFwCSCV8ASCZ8ASCZ8AWAZMIXAJLpdgb4D9HD+3tZ09or6lCOOnpLKWXevHnV+uDg\nYOf3Fu0VHWpQSinj4+PVeus9z507t1pvHcbQ9XfQev3oAIfWzxl1O/fytxFx5wsAyYQvACQTvgCQ\nTPgCQDLhCwDJhC8AJDNqBBy1Wg/Pj661HtI/NjZWrUfjLK+99lq4V3SAwfHHHx+uiUTjPKXEI0XR\ngQuLFy8O94p+ztbBDtHYzlQextB6/YiDFQDgGCN8ASCZ8AWAZMIXAJIJXwBIptu5lLJx48Zq/frr\nr6/WTzjhhHCv6AHnn//858M1S5Ys6VQH/reoc7X1IPyo2zjqaC6llBdffLFaf+GFFzrVSyllcnKy\nWm99vyxbtqxanzUr/io/6aSTqvXjjjuuWm91Ie/Zs6dajw5cKCXuXI5+/lLi79GoE3z+/PnhXrNn\nz67WW7/nyFR2SLvzBYBkwhcAkglfAEgmfAEgmfAFgGQzWt1bUyzthbpas2ZNtb558+aU11+0aFG1\nvm7dupTXz3LyySdX69dee221HnVpThNv/MNfj1HDw8OdvyuiZ/tGHc2ta88//3y45rnnnqvWH3nk\nkWp9eHg43GvmzPq9T2vKIXq28r/+9a9wzfLly6v16DMbGRkJ94o6hFsd2tGzpVvPY46eL33xxRdX\n6+9+97vDvaLnXrf+NqLfTS+Ghoaq3xXufAEgmfAFgGTCFwCSCV8ASCZ8ASCZ8AWAZA5WKKX8+te/\nrtaj8YF3vvOd4V5PPPFEtf6Xv/wlXPOb3/ymWv/DH/4QrnnrW99arbdGDrpqPax9xYoV1Xr04PmW\naATp61//eue94D+1HnYfPfC/9ZD+aGwmeuD/wMBAuFc0zrJw4cJwTXRQQ2s0pusBAq+88kp4LTpA\nYfXq1eGarVu3VutPP/10uCYaMzz11FOr9VNOOSXcK/qdTeU4US/c+QJAMuELAMmELwAkE74AkEz4\nAkAyBytMA1EHYfQQ91LibuctW7ZMxVsqpZQye/bs8FrU7Ry9r1JK2b59e7V+2223VeuXXHJJ490d\ndg5WeINEByu0Opej77HWw/ujNa0H7u/Zs6da3717d7V+4MCBcK+oqzk6PKGUeJphcnIyXHPiiSdW\n67t27arWW98hb3nLW6r16PuglFI2bNhQrf/iF78I10T7XXnlldV6dOBCKfHn3PrdtK515WAFAJgm\nhC8AJBO+AJBM+AJAMuELAMmELwAkc7DCNDBnzpxqPXqIeMvatWv/27fzukQHRezYsSNc8573vKda\nX79+/ZS8J45uvYxFtg42OHjwYLXe398frlm0aFG1Hh2s0Hp4f/TeRkdHwzVDQ0PVenR4QCmlLFiw\noFrfuXNntX722WeHey1durRaHxkZCddEI2LR519K/POsXLmyWh8cHAz3iv5upnKcqBfufAEgmfAF\ngGTCFwCSCV8ASCZ8ASCZbmdCra7LT3ziE9V6q4Pxe9/7XrXe6lSE16N16EKkr6+vWm91KEcdslGH\ndOtwkug9tzqX58+f3/l1ovccdVsvXrw43Ct6b88880y45qmnnuq0VymlnH/++dV6dLBD9LssJf6c\nW7/nqEN6Kg8icucLAMmELwAkE74AkEz4AkAy4QsAyYQvACQzakTopptuCq8NDw9X69GD10uJxwTg\nv9XLw/Oj8ZTJyclwTTSeMzExUa3v3bs33CsaTxobGwvXRKLDWUqJx/+iz6Y1gvP8889X67feemu4\nZtOmTdX6unXrwjUf+chHqvUTTjihWm+95+jnb42ntUYmp4o7XwBIJnwBIJnwBYBkwhcAkglfAEim\n25ny7LPPVuvXXHNN570eeOCB8NrQ0FDn/SBbq3N2fHy8Wt+3b1+13upcjg5DiDqqSyll1qz6V3b0\n+qXEnbvRAQr79+8P9/rjH/9YrW/YsCFcE3UVt7qdTzrppGo96lBvdSdHXd2twxhaXfJTxZ0vACQT\nvgCQTPgCQDLhCwDJhC8AJNPtTLn99tur9dYzbi+99NJqfdWqVVPynuBwaXX7Rl2wUbdx9MznUuJu\n58HBwXBN1KEbdWGXEndPR13Irc7pxx57rFp/5ZVXwjUXX3xxtX7++eeHaxYuXFitR59/q9s5+jlb\nXe0Z3PkCQDLhCwDJhC8AJBO+AJBM+AJAMuELAMmMGh0jWmNDt912W7XeesD7d77znWq99bByyHbo\n0KHwWjSe0nqofrRfNDa0YMGCcK/+/v5Or1FKKf/+97+r9dao0dy5c6v16Dth06ZN4V6PPvpotb5m\nzZpwTTRStHLlynBN9NlEP2cv3zvRCFIp8e+gtaYrd74AkEz4AkAy4QsAyYQvACQTvgCQTLfzMeIn\nP/lJeO2+++6r1j/3uc+FaxygwJFgqjtaow7pXg5JiA5w2Lt3b7gm6sRudVVH3c4vv/xytf673/0u\n3Gvz5s3V+kUXXRSuWbduXbUeHZ5QSny4Q6sTPRJ1TrcmQHQ7A8BRSPgCQDLhCwDJhC8AJBO+AJBM\n+AJAMqNGR5lHHnmkWv/yl78crlm8eHG1/u1vf3tK3hNMR9GoT8usWfWvzDlz5nT696XEY0st8+bN\n61QvJf4577jjjmo9Omil9Tof/OAHwzVDQ0PVeuswhGjUKHK4D0nohTtfAEgmfAEgmfAFgGTCFwCS\nCV8ASKbb+Qg1NjZWrX/2s5+t1lsPJL/sssuqdYcncKSLOl1LibuNW124XfcaHR0N1/TSbR0d4NDq\n3N20aVO1fvPNN1frW7duDfe64oorqvXTTz89XBMd+tD6Top+BxMTE53+fSlxx/n4+Hi4JoM7XwBI\nJnwBIJnwBYBkwhcAkglfAEgmfAEgmVGjaaz14PWPfvSj1frTTz9dra9duzbc61vf+la3NwZHiNao\nUaQ1tjNzZv1+JRpbaY0TRf+/o0MaSonHZp5//vlwzfe///1q/eGHH67WL7zwwnCvT3/609X6iSee\nGK6Jfgd79+4N10Sf28DAQLXeOsCil7+B6Pc8ldz5AkAy4QsAyYQvACQTvgCQTPgCQDLdztPYrl27\nwmv33ntvp71uueWW8NqSJUs67QVHg6irufXA/6hDOeqojQ5CKCXu0J07d264ZnJyslrfsGFDuOav\nf/1rtX7WWWdV61dffXW419lnn12ttyYz9uzZU623upCjju/+/v5qvdVVHr1Oq6s9gztfAEgmfAEg\nmfAFgGTCFwCSCV8ASKbbeRp49dVXq/V169Z13utnP/tZtX7GGWd03guOZn19fdV61FFcStzVG3U1\nt545HHXutjqHH3/88Wr9zjvvDNds27atWv/Yxz5WrUcdzaXEzzweGxsL10SfZ6sTPPrdRF3Nrc7p\n1ucZyeiQducLAMmELwAkE74AkEz4AkAy4QsAyYQvACQzajQN3HjjjdX6li1bOu91wQUXVOuH+yHi\ncDhEozEt0QhQKfHYTDRS1Bo1iv5Pbt26NVxz++23V+sbN24M10SHFKxatapaX7BgQbhXNOrTGs+K\nfgetzzkaD4o+s9aoUeRwfye68wWAZMIXAJIJXwBIJnwBIJnwBYBkup2TbN68Obz2zW9+M++NAE2t\nLtiBgYFqPerobe01MjJSrf/pT38K19x///3htci5555brZ988snVetTRXEpvHcJRx3cvHcoHDhyo\n1luHJxzuruaIO18ASCZ8ASCZ8AWAZMIXAJIJXwBIJnwBIJlRoyT33XdfeO21117rvN/atWur9cHB\nwc57Af9fazSlr6+vWo9GjVpjO9H/+7GxsXDNSSedVK2vXLkyXHPqqadW60uWLKnW9+3bF+4VjfRE\nI0ClxJ9Za81UHqAwXbnzBYBkwhcAkglfAEgmfAEgmfAFgGS6naex888/P7x25513Vuu6neGN07Xb\nt9U5PD4+Xq1HBx6U0lvncNQhvWzZsmq9v78/3Kt1gEEk6lCeys7l6Xp4Qos7XwBIJnwBIJnwBYBk\nwhcAkglfAEgmfAEg2YzEB1UfPU/EhlKOvNmGI8Tw8PAx8V0RjQe1vpN7GduJrs2ePbtanzUrnkDt\n5T0fiWNAU2loaKj6AbjzBYBkwhcAkglfAEgmfAEgmfAFgGSZ3c4AQHHnCwDphC8AJBO+AJBM+AJA\nMuELAMmELwAkE74AkEz4AkAy4QsAyYQvACQTvgCQTPgCQDLhCwDJhC8AJBO+AJBM+AJAMuELAMmE\nLwAkE74AkEz4AkAy4QsAyYQvACQTvgCQTPgCQDLhCwDJhC8AJBO+AJBM+AJAMuELAMmELwAkE74A\nkGxW4msdSnwteKPNONxv4Gi1bds23xXHuBkz6v+9Dh068v40li1bVv1h3PkCQDLhCwDJhC8AJBO+\nAJAss+EKgP+rl6aiaE0vprJ5qZe9Zs48tu/9ju2fHgAOA+ELAMmELwAkE74AkEz4AkAy4QsAyYwa\nAbxBWqNBvYznHDx4sFO99R5mzap//R84cKDzXq010UhRL2taP2fXvQ636fmuAOAoJnwBIJnwBYBk\nwhcAkglfAEim2znJz3/+8/Da6Ohotf7www+Ha370ox91ev1vfOMb4bUPfehD1foHPvCBTq8BR4NW\nF3J0Lerc3b9/f7jXxMREtT42NhauGRkZCa9Fog7lffv2Vet9fX3hXv39/dX6vHnzwjWDg4PV+pw5\nc8I1XUWd26X01lU+lQdYRNz5AkAy4QsAyYQvACQTvgCQTPgCQDLhCwDJZvTSht2jtBc6nL70pS9V\n6z/84Q+T38nr9453vKNa//Of/xyuWbRo0Rv1do4Ub/wswjFq27ZtKd8VXceGSillfHy8Wo/Gg7Zt\n2xbu9dRTT1XrDz30ULjm6aefrtZfeeWVcM3Q0FC1Hv2cc+fODfdau3ZttR6NK5ZSyllnnVWtv+lN\nbwrXRAcoRL+zaGyqlHhsqJV9vayJLFu2rLqZO18ASCZ8ASCZ8AWAZMIXAJIJXwBI5mCFHkQdzaVM\nbVfzGWecEV771Kc+Va1v3ry5Wr/55pvDvZ588slq/dZbbw3XXHHFFeE1mC6irtnWtaijuXVt+/bt\n1frGjRvDve65555qfdOmTeGaycnJan316tXhmoULF3aqR98hpcTd2zt37gzXRJ3DvRyGEHU1t7qQ\nowMsZs+eHa7p+r5K6X4YgztfAEgmfAEgmfAFgGTCFwCSCV8ASCZ8ASCZUaOGF154oVr/8Y9/3Hmv\nc845J7x2xx13VOutB5xHbfLRw9KfeeaZcK/777+/Wt+xY0e4Bo4EXcc/Simlv78/vDYyMlKtz5xZ\nv49pjS319fVV6+vXrw/XnHvuudX6hRdeGK457rjjqvVHH320Wv/lL38Z7rV79+5qfdeuXeGaaNQn\n+ixbovGw6DVaosMwSillcHCw835dufMFgGTCFwCSCV8ASCZ8ASCZ8AWAZLqdG6Ju39bDtaOu5rvu\nuitcM3/+/G5vrOGmm26q1h988MHOe11yySX/5buBHFFXc6vbufX/uOvrRJ2zQ0ND4V7nnXdetf7h\nD384XBMdttKajNizZ0+1/tJLL1Xrzz77bLhX1KHc+iyjyYzWoRdR93J0sMLAwEC4V9S9Hu1VSnyA\nRdShXoqDFQBg2hO+AJBM+AJAMuELAMmELwAk0+3ccOaZZ1brrWceR519Gc8KLSV+7nQvzz6FI13r\nOc1R5+r+/fvDNcuXL6/Wo27jVnfs6aef3qleSimzZtW/slvPSX788cer9Q0bNlTrTzzxRLhX1KF9\n8sknh2uWLl1arbc6tHfu3Bleq2l9v0ZdyK3fc9e9euHOFwCSCV8ASCZ8ASCZ8AWAZMIXAJIJXwBI\nZtSoB4sWLTrcb6Hccsst1fqmTZs677V+/fpqffXq1Z33gsNh5sz6fURrNCQaQ2qNJ0XmzJnTea9o\nDKl1SMHo6Gi1vnXr1nBNdKjKc889V61H41SllPKud72rWl+zZk24JhqPig6jKKWU8fHxaj0aD4oO\nQiillHnz5lXrrYMVejl0oyt3vgCQTPgCQDLhCwDJhC8AJBO+AJBMt/M09ve//z289sUvfrFajzr4\nVqxYEe51/fXXV+u9dH3CG6XVudxLd2q0X+swhAMHDnTaK+r0LaWUgwcPdn79qNt5eHg4XPPss89W\n69F7XrVqVbjX2WefXa23Dkl4+eWXO71+KXH3ePSZtT7nqHO69TlHXdWtv7Ouhy648wWAZMIXAJIJ\nXwBIJnwBIJnwBYBkwhcAkhk1msYeeOCB8FrroeA1V111VXjt7W9/e6e9YLqJRkCi0aBS4tGQ6JCG\nUuJRl2g0pTUCMzAw0GmvUuIDFO65555wze9///tqfeHChdX6ueeeG+51+umnV+utnzP6rmqNJ0Vj\njtHn39LL79nBCgBwFBK+AJBM+AJAMuELAMmELwAk0+08DVx++eXV+q9+9avOe33lK1+p1r/2ta91\n3gumk6l8qH0pvT08P+q2jbqqBwcHw72iLuBt27aFa+68885qfcOGDeGa6NCFdevWVesXXHBBuNfK\nlSur9b1794ZrRkZGqvVFixaFa6LPM/r8e+mCjrrNW1p/G107pN35AkAy4QsAyYQvACQTvgCQTPgC\nQDLhCwDJjBol2bNnT3gtevD5+Ph4uGb58uXV+nXXXVetz549u/Hu4MjWy8EK0ZqJiYlwTfT/qK+v\nr/Hu6kZHR6v1hx56KFxz9913V+vROFEppbz//e+v1i+55JJq/cwzzwz3ij6z1phNLyM9k5OT1Xp0\ngEPr9aPfWWs8qfV3E+k67ubOFwCSCV8ASCZ8ASCZ8AWAZMIXAJLpdk5y6aWXhtdaD1KPXH311dX6\nkiVLOu8FR6teDmOIOm1LKaW/v79anzmzfh8THZ5QSimvvfZatb5ly5ZwzZNPPlmtr1ixIlxz8cUX\nV+tnnXVWtT5v3rxwr+iQhOiQilLi30HrMIbos1m4cGG4JtJL53LXQxJK0e0MANOe8AWAZMIXAJIJ\nXwBIJnwBIJlu5yn28MMPV+v33ntv570++clPhteuueaazvvBsab1/N7oWus5zdG1qAt6x44d4V4b\nN26s1u+6665wTbTfBRdcEK457bTTqvXo52+951dffbVabz07Puoeb3UHd31WdtdO41LaXdDRtejZ\n0r1w5wsAyYQvACQTvgCQTPgCQDLhCwDJhC8AJDNq1IOxsbHw2rXXXlutT0xMdH6d6MHnpbRb+4H/\nIzrwoHUtGhsqpZQ5c+ZU69H/7+iAgFJKefDBB6v1v/3tb+GaoaGhav1973tfuGb58uXVejQ20zpY\n4rjjjqvWW59ZNJ7UGvWJXicaQWqNlEW/g9Z4UvTz9DLSFHHnCwDJhC8AJBO+AJBM+AJAMuELAMl0\nO/fghhtuCK/dfffdnfe7/PLLq3WHJ8Dr00sXarSm9VD/qEM36uh97LHHwr0ef/zxan3JkiXhms98\n5jPV+kUXXRSuiTqkow7tvXv3hnsNDAxU661u5+jzbHVVL1iwoNN72759e7jXvn37qvV58+aFa6Jp\nktbf2aFDh8JrNe58ASCZ8AWAZMIXAJIJXwBIJnwBIJnwBYBkRo16cN11103pft/97nerdYcnwOsT\njXlM5QhSKfGoy/DwcLXeOiRh586d1frSpUvDNeedd17nNdEBEtGo0cjISLhXdIBBazxrfHy885po\ndGjHjh3V+nPPPRfuFR3SsHDhwnBN9DfQdZyoxZ0vACQTvgCQTPgCQDLhCwDJhC8AJNPtPA3s2bOn\nWo+6FKda9LD0Xh4wHz3EvGVsbKxav/766zvv1RL9PK3u9dYD45n+Wp3L0f+vXv7uoy7cf/7zn+Fe\nmzdvrtajgxBKKeXBBx+s1luHMUT/J0dHR6v1l19+OdwrOvAgqpcSH2DQ+n574oknqvV//OMf1fr8\n+fPDvdavX1+tR7/LUuKu5la3c9fOene+AJBM+AJAMuELAMmELwAkE74AkEz4AkAyo0bTwAknnHBY\nX/+qq66q1t/85jeHa6IHyf/gBz+YkveUqfX5X3nllYnvhKkWHQRQSjxi1xonicaQojGT6DVKiR/4\n3xrX++1vf1ut33PPPeGa6Oc5/vjjq/Vdu3aFe61YsaJanzt3brhm0aJF1fqLL74YrtmyZUu1Ho1U\nnXPOOeFe0ShnSzQGZdQIAI5gwhcAkglfAEgmfAEgmfAFgGS6nXtw2WWXhdduvPHGxHcyNW644YaU\n15k1q/7n1nqQfeQLX/hCtX7eeed13uu9731v5zUcGVodqK1O6Ej0MP6oc/m0004L99q9e3e1vnfv\n3nDNyMhItd46wGH//v3V+uLFi6v16CCEUkrZunVrtd6aGIj+f7e6uqPu6TVr1lTrp5xySrjXsmXL\nqvXo+6ila0dziztfAEgmfAEgmfAFgGTCFwCSCV8ASDaj9azKKZb2QofTT3/602p9YmJiSl9n06ZN\n1fpUPlv5q1/9anjtbW97W+f9Pv7xj1frUTfiNDd1bY/8L9u2bev8XRF1oUbP6G2tmT17drhmfHy8\nWn/11Ver9ZdeeincK3p+cavbOepq3r59e7gm+o7fsWNHtR79jKXEz2letWpVuGb+/PnhtUjUib16\n9epqfWhoKNxr6dKl1fqcOXPCNf39/dV6Lx3Sy5Ytq/6hufMFgGTCFwCSCV8ASCZ8ASCZ8AWAZMIX\nAJIZNYLeGDV6g/QyahRpPQg/GilqrYm+L6ORpsnJyXCv6JCG1jhLtGbXrl3hmj179lTrw8PD1fro\n6Gi41/HHH1+tL1++PFwTvedePufos2mNDQ0ODnZ6X63X6YVRIwCYJoQvACQTvgCQTPgCQDLhCwDJ\npq6lC+AIEnW79nIYw8GDB6v1VtdstFdfX1+4JurqXbJkSbgmsn///k71UuL33OocjvaLPrPWflH3\neGuv6Fovv+epnA5y5wsAyYQvACQTvgCQTPgCQDLhCwDJhC8AJDNqBBy1WqMh0ThLa2ym66hJawQm\nGmfp7+/vvGbfvn3hmtZITc3evXvDa9HoVC+HQfQi+llahzRE11qfS8aBQ+58ASCZ8AWAZMIXAJIJ\nXwBIJnwBIJluZ+CY1EtHa7Sml47aaE10eEDr9VuHIUTdxtGaVudwL6KO79br9HIYwpHm6PlJAOAI\nIXwBIJnwBYBkwhcAkglfAEgmfAEgmVEjgNdpKsdworGh1jjNVI7gTOUhBS1Za4407nwBIJnwBYBk\nwhcAkglfAEgmfAEg2YxeHi4OAPTOnS8AJBO+AJBM+AJAMuELAMmELwAkE74AkEz4AkAy4QsAyYQv\nACQTvgCQTPgCQDLhCwDJhC8AJBO+AJBM+AJAMuELAMmELwAkE74AkEz4AkAy4QsAyYQvACQTvgCQ\nTPgCQLL/AXem60W7kAi9AAAAAElFTkSuQmCC\n", + "image/png": "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\nxfrHPvaxcKwVK1YU69H9drJe9Wysce0NGQASEMgAkIBABoAEBDIAJCCQASABXdY0TdM0L730UrF+\n3XXXtR7roYceKtaHhoZajwWdmM71hqN1psfHx1vVmybumo7Wy446pmvnRF3eUdfwkiVLwmvs37+/\nWP/zn/9crN91113hWNHnuHbt2mI9Wq+6aeKu9Oh3rHVMR2N10pE/Vd6QASABgQwACQhkAEhAIANA\nAgIZABIQyACQgGlPNE3TNBs3bizWJycnw3OuvPLKYv3UU0+dlnuCDKLpL9FUmtq0p2hKUnd3d7Fe\nm/YUTdcZGxsr1nt6eor1aDpSbaynn366WN+2bVs41mWXXVasr1+/vlhfvHhxOFYnG2VEos8x+lym\nc0rd/88bMgAkIJABIAGBDAAJCGQASEAgA0ACuqyPMFHX9J133lms9/b2hmP94Ac/KNajrkWYKW07\nZGuds207d6Nu5qZpmoULFxbrUZd17b52795drEcbWPT39xfr0QYSTdM0Tz31VLH+5JNPFutnnnlm\nOFbUTX3iiScW69Fn0jRx93cnz57o9z+U3dQRb8gAkIBABoAEBDIAJCCQASABgQwACeiyPsL87Gc/\nK9YffPDBYv3zn/98OJY1qzlcRGsjN03csR11X9e6rNt2Ou/bty8cKzpn0aJFxfrAwECxvnXr1vAa\nd999d7H+4osvFuuXXnppONbatWuL9WjN6mjd76Zp3xld69iOZp5EfxPz5x+691hvyACQgEAGgAQE\nMgAkIJABIAGBDAAJCGQASMC0p8PQpk2bwmNf//rXi/WlS5cW69///ven5Z5gJkXTX6IpTLUNFiLR\nRga1aU/ROW03sGiaeBpTVI9+x3vuuSe8RrTpTDR96+KLLw7HGhoaKtajz2R8fDwcq+33W9soIprG\nFE17iq7xv13nYHhDBoAEBDIAJCCQASABgQwACQhkAEhAl/UcNjo6Wqx/7nOfC8+JujmvuuqqYt0G\nEhxOoi7YWpdzV1e7x2Rto4qRkZFivZMu76ibO+oa/sc//lGs33bbbeE13njjjWL96quvLtbPOeec\ncKxo04vos69t4hB9XlHHdu07HBsbC4+VTLWTusYbMgAkIJABIAGBDAAJCGQASEAgA0ACuqzngKhr\n8+Mf/3ix/vzzz4djrV69ulj/3ve+1/7GIKloveFO1ieOjkX1Wtdu1B0c3VdfX184Vnd3d7H+6quv\nFus33XRTsf7444+H1/jwhz9crH/mM58p1t/znveEY0W/YzRbpNZ53tvbW6xHXdaddEbXurwPFW/I\nAJCAQAaABAQyACQgkAEgAYEMAAkIZABIwLSnOWDXrl3F+gMPPNB6rNtvv71YX7ZsWeuxIKtomksn\n01+izQ+iaU+1a0QbQkSbH/T394djTU5OFusbN24s1h9++OFi/bzzzguvce211xbra9asKdZrG2vs\n3bs3PFbSyZSvttPKmqY+5a3tz0914wlvyACQgEAGgAQEMgAkIJABIAGBDAAJ6LJOZPfu3cX6hRde\n2GqcX/ziF+GxWkclHKmiTQmaJu5mjjpqow7gpom7qaNzal27Tz/9dLF+zz33FOtvvPFGsf6JT3wi\nvMYFF1xQrEcbL0QbRTRN3AEddZ7XvpO23dS1Luu2ptpJXeMNGQASEMgAkIBABoAEBDIAJCCQASAB\nXdaJ3HLLLcX6li1bWo1z0UUXhcfartsKh5OoO7im7brJnXRZR/+XUWd008RrVj/66KPFerQu9qpV\nq8JrLF68uFiP1veOPpOmiX/HTjrMD9fnmDdkAEhAIANAAgIZABIQyACQgEAGgAQEMgAkYNrTDNu8\neXN47Lvf/e7M3QhwUKKpUtGmCLWpVdGxPXv2FOt/+ctfwrH+/ve/F+vRlKC1a9cW66ecckp4jWga\nU3SN2lSlttObahtCROdE07HmyjQpb8gAkIBABoAEBDIAJCCQASABgQwACeiynmEPPvhgeOztt99u\nNdbq1auL9WgReaCsky7cqGO6NlbUtRx1WY+NjYVjrVy5slg/8cQTi/UzzzyzWD/66KPDa4yPjxfr\nUTdzVK/p5JxaN/dc5g0ZABIQyACQgEAGgAQEMgAkIJABIAFd1nPAhz70oWL93nvvLdZ1WUM7nXTt\nRudMTk6G50xMTBTrUTd1bZ3pqMs76lo+6aSTivXBwcHwGl1d5YiYzi7n6RxrrqxZHfGGDAAJCGQA\nSEAgA0ACAhkAEhDIAJCAQAaABObN0iLdh+fK4BxJ5vb8ijlk+/bth/3z4sCBA63qnYwVPet7enrC\nsaJpT51sCBGJpiodThtIDA0NHdTzwhsyACQgkAEgAYEMAAkIZABIQCADQAKz1WUNAPwXb8gAkIBA\nBoAEBDIAJCCQASABgQwACQhkAEhAIANAAgIZABIQyACQgEAGgAQEMgAkIJABIAGBDAAJCGQASEAg\nA0ACAhkAEhDIAJCAQAaABAQyACQgkAEgAYEMAAkIZABIQCADQAICGQASEMgAkIBABoAEBDIAJCCQ\nASABgQwACQhkAEhAIANAAgIZABIQyACQgEAGgAS6Zum6787SdWG6zJvtGzhSDA8Pe14cgebNi//F\n3n13bv1JDA4OHtTzwhsyACQgkAEgAYEMAAkIZABIYLaaugD4P6IGplrzUq3pqY3pbJDqZKz5870X\n/l8+CQBIQCADQAICGQASEMgAkIBABoAEBDIAJGDaE8AM6WR6U+TAgQOt6tG1u7riGHjnnXdajRX9\nfNPE05uic2rToaLfse21s5kbdwkAhzmBDAAJCGQASEAgA0ACAhkAEtBlPcN++ctfhsdGRkaK9See\neKJY/8lPftL6+t/5zneK9UsuuaRY/+hHP9r6GnA4iTqgo3qt03j//v3F+sTERLE+OjoajrVnz55W\n97VgwYJifXx8PLxG1J3c3d1drA8MDIRj9ff3F+t9fX3hOW1FHeOddLFP1+YdbXhDBoAEBDIAJCCQ\nASABgQwACQhkAEhgXifdZ9NgVi46k772ta8V6z/+8Y9n+E4Ozvve975i/a9//Wt4zpIlSw7V7cwF\nM9+CeYQaHh4+5M+L2nMw6poeGxsr1mud0cPDw8X6c889V6w//vjj4VjPP/98sb5t27ZifWhoqFiv\ndYUfddRRxfrq1auL9Wi2RtM0zfnnn1+sH3fcccV6bb3q6PuKOsZrHdPRWNO57vjg4OBBPS+8IQNA\nAgIZABIQyACQgEAGgAQEMgAkIJABIAGbS0zRTExvOu+884r1T3/608X65s2bw7Fuu+22Yv1f//pX\nsf6b3/wmHOtLX/pSeAwyiqbS1KbYRNObovqbb74ZjvXII48U6w888ECxvmnTpnCsycnJYv3UU08t\n1qNpiosWLQqvET1LoulbO3fuDMeKNqroZEOIaHpTdE60eUfTNE1PT094rO19TXVDCm/IAJCAQAaA\nBAQyACQgkAEgAYEMAAnosj4Ir732Wnjspz/9aaux1qxZEx77wx/+UKxHC7xH3YG1xeJffPHFYv1v\nf/tbsb5jx45wLJhrOumC7e7uLtb37t1brEfdxE0Td2ZH52zYsCEc64Mf/GCxftFFFxXrRx99dLH+\n1FNPhde44447ivX//Oc/repNE3c679mzJzwnEnXF17qpI9FmIP39/a3HmipvyACQgEAGgAQEMgAk\nIJABIAGBDAAJ6LI+CLVO42hd06ib+r777gvHWrhwYbsbC9x6663hsccee6zVWFdcccUU7wZmXtRN\nHdVr6xO3vUat03doaKhYX7duXbF+ySWXhGNFa9xHszKirvB///vf4TW2bNlSrEed0bU1waNZIZ10\nTEdrWff29hbrUad8baxorfAFCxaEY1nLGgAOAwIZABIQyACQgEAGgAQEMgAkIJABIAHTng7C+eef\nHx6LpkRFLf4zsWB5bcOLThZfh8NFNP2lNpVl//79xfrg4GCxHk07app4WszZZ59drJ9zzjnhWF1d\n5cd3NCXpmWeeKdbvvvvu8BrROdE0rZNPPjkc65hjjinWo89r586d4ViR6Plam44Ufb+RqU5tqvGG\nDAAJCGQASEAgA0ACAhkAEhDIAJCALuspWrJkyaxd+/bbby/Wn3zyydZjbdiwoVhftWpV67Fgts2f\nX37XiDpka5sP1I6V9PX1tR4rut/aZg0jIyPF+htvvFGsP/roo8X6q6++Gl7j+OOPL9bPPffcYv2M\nM84Ix4o62UdHR4v1sbGxcKyoMzqq1zrfo80lOtlwZKq8IQNAAgIZABIQyACQgEAGgAQEMgAkoMt6\nDvjnP/9ZrH/1q18t1qOuwaZpmuXLlxfrN954Y7HetsMUZkptTeG2HbK1saLu4Hfeeaf1WNH609FY\n0c83TdO8/fbbxfr27duL9ZdeeikcK3LqqacW62vWrCnWa93M27Zta3XtWrd61H0efVe1Z2J0TtSx\nXfvbmuo6196QASABgQwACQhkAEhAIANAAgIZABIQyACQgGlPc8BDDz1UrNda+SPXXHNNsX766ae3\nHguyiqamdDJVqe3GD9F0maaJp9gMDAy0HivaROJPf/pTsf773/++WK9tkLN27dpi/eyzzy7Wa9Mk\nJyYmivX+/v7WY03nxg/Rd2JzCQA4QglkAEhAIANAAgIZABIQyACQgC7rRK6++upi/Ve/+lWrcb7x\njW+Ex771rW+1Gguyms5F/mvdzNF1oi7rqJO7aeKO4mjGxPDwcDjWvffeW6zfddddxXq06cS6devC\na6xfv75YX7FiRbG+b9++cKw9e/YU61GXd+1zbPud1PT29rb6+drf3VQ7s70hA0ACAhkAEhDIAJCA\nQAaABAQyACSgy3qG7d27NzwWrTU7NjZWrB9//PHF+g033BBeo6enp3J3cHhou5Z1rTs2WoM5+l+K\n1kauGRkZKdafeOKJ8Jz777+/WI+6qS+++OJi/fLLLw+vcf755xfr0edV+xyjbubonMnJyXCsrq5y\ndEVj1Z57bbvl23bwt+ENGQASEMgAkIBABoAEBDIAJCCQASABXdYz7MorrwyP1datLbn22muL9WXL\nlrUaB44UURdurXM26vaNOnfnz4/fc6KO7bfffrtY37JlSzjWs88+W6wvX768WL/00kuL9Q984APh\nNQYGBor1aF3qTtafHh0dbXWNpmmaRYsWFevR91i7r0gnneS17/5geEMGgAQEMgAkIJABIAGBDAAJ\nCGQASEAgA0ACpj0dItGi8A888EDrsT71qU8V69ddd13rseBIFm0kENWbJt4sIpri0t3dHY715ptv\nFuuPPPJIsX7fffe1Hmv9+vXF+llnnVWs1373HTt2FOvRNK1oA4mmaZrx8fFiPZqqFG0gUTunk40f\noilRUb12X1PlDRkAEhDIAJCAQAaABAQyACQgkAEgAV3WUxQtjH799dcX69Hi8jXR4u/R4vZAWdQZ\nXdsUIPo/6+vrK9Zr/+PRhgmPPfZYsR7N1miaphkaGirWP/KRjxTrg4ODxXrURd40cafx0UcfXazX\nOszfeuutVtdYunRpOFZ0z9HGD1FXeNPEndnR79JJJ/fB8oYMAAkIZABIQCADQAICGQASEMgAkIAu\n6ym6+eabi/X777+/9VhXX311sW7NaminbSdsrcs6OhZ1B+/evTsc6+mnn25Vj7qZm6ZpPvvZzxbr\nGzZsKNaXL19erNe6wvft21esR2tW12Z+RJ/j5ORksb5o0aLW9xWt7z02NhaONTAwUKxHv0vtbyvq\n8j5Y3pABIAGBDAAJCGQASEAgA0ACAhkAEhDIAJCAaU9TdMMNN0zbWD/84Q+LdZtIQDvR9JNONgaI\nzomm3mzfvj0cK9osYufOncX6scceG461bt26VudE04462QzjwIEDxXpto4po6lF0TjSFqWniz+vl\nl18u1mvTxxYvXlysR9/7VKc21XhDBoAEBDIAJCCQASABgQwACQhkAEhAl3Uie/fuLdZrC99Pl2ix\n+FrXZLS4/vj4eOvrj46OFus33nhj67Ei0e9S65Tv7u6etusz+6LO2Vr3dfR3E/3917qDn3vuuWJ9\n8+bNxfrQ0FA4VtSxHXVZR/+XIyMj4TW2bt1arEedyQsXLgzHio5Fz7dnnnkmHOvZZ59tdY1ow42m\nib/HqJu61mXdSRf/f/OGDAAJCGQASEAgA0ACAhkAEhDIAJCALutEVqxYMWvXvuaaa4r1E044ITwn\nWrP3pptumpZ7mim1z/3LX/7yDN4Jh1q0BnM0y6Am6r6uddpG14nWWq7NWNi4cWOx/sc//jE8p+S4\n444Lj+3atatYj7q/BwYGwrGWLFlSrL/++uvF+pYtW8KxjjnmmGL9ggsuKNajNbmbJv6+ou5vXdYA\ncJgTyACQgEAGgAQEMgAkIJABIAGBDAAJmPY0RVdddVWxfsstt8zwnUzNzTfffMiv0dUV/7nVNrEo\n+eIXvxgeW7duXaux1q9f3+rnmbuiaSnRdKjaOdGmBMuWLQvHev/731+s7969u1jft29fOFY0leeF\nF14o1vfv31+sL126NLxGNI0pmvJYm0IY/Y9HU7v6+/vDsU4//fRi/bTTTivWBwcHW99XZKpTm2q8\nIQNAAgIZABIQyACQgEAGgAQEMgAkMK+2UPYhNCsXnUk///nPi/WJiYlpu8aTTz5ZrE/n5g7f/OY3\nw2NRR2Pk8ssvD4/VuiCTOnStlvw/hoeHWz8v2m4YUOuc7enpKdbHxsaK9ahjummaZuvWrcV6tJHC\nyMhIONbmzZuL9eHh4fCckh07doTHoi7vqDN71apV4VgLFy4s1qPPPtqMomma5r3vfW+xHj1Hos0o\nmqZp+vr6ivXu7u5ivTZbJDI4OHhQzwtvyACQgEAGgAQEMgAkIJABIAGBDAAJ6LKGzuiyniGddFlH\noo7eqJO6dk707Kx1bEfrSUfrYtc6eqNzdu3aVaxHHdvbtm0LrxGdc+yxxxbrQ0ND4Vi19cJLatkU\nfS5Rx3RtXexOPvu2dFkDwBwikAEgAYEMAAkIZABIQCADQAICGQASMO0JOmPa0wyZiWlPCxYsCM/p\nZEOKttePpt7U7iva/KC3t7fVPUVTsWrH2v4etbGi6VC1sSYnJ1uN1cn3G9U7yUzTngBgDhHIAJCA\nQAaABAQyACQgkAEggelbPRsguahDttbRGx3rpNs26gKOupajTuraOePj48V61DVcs2/fvmI92nih\nk80wOtG2873WEd9285BDyRsyACQgkAEgAYEMAAkIZABIQCADQAK6rIEjXicdtdE5tY7ett3B0ZrN\nteu3XTO6do1O1uuOtO0wj36+aTrrGJ8LDs/fCgDmGIEMAAkIZABIQCADQAICGQASEMgAkIBpTwAd\nmM4pQdEUptr0nmhaUNspQT09PeGxTjZraDvWdP384cAbMgAkIJABIAGBDAAJCGQASEAgA0AC8zpZ\nVB0AmF7ekAEgAYEMAAkIZABIQCADQAICGQASEMgAkIBABoAEBDIAJCCQASABgQwACQhkAEhAIANA\nAgIZABIQyACQgEAGgAQEMgAkIJABIAGBDAAJCGQASEAgA0ACAhkAEhDIAJCAQAaABAQyACQgkAEg\nAYEMAAn8D1DzB/p6j0AZAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -557,20 +462,14 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "## Tying weights" ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "It is common to tie the weights of the encoder and the decoder (`weights_decoder = tf.transpose(weights_encoder)`). Unfortunately this makes it impossible (or very tricky) to use the `tf.layers.dense()` function, so we need to build the Autoencoder manually:" ] @@ -579,9 +478,7 @@ "cell_type": "code", "execution_count": 14, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -600,11 +497,7 @@ { "cell_type": "code", "execution_count": 15, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "activation = tf.nn.elu\n", @@ -645,9 +538,7 @@ "cell_type": "code", "execution_count": 16, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -657,11 +548,7 @@ { "cell_type": "code", "execution_count": 17, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -670,7 +557,7 @@ "0 Train MSE: 0.0150667\n", "1 Train MSE: 0.0164884\n", "2 Train MSE: 0.0173757\n", - "3 Train MSE: 0.0168781\n", + "3 Train MSE: 0.0168782\n", "4 Train MSE: 0.0155875\n" ] } @@ -697,9 +584,6 @@ "cell_type": "code", "execution_count": 18, "metadata": { - "collapsed": false, - "deletable": true, - "editable": true, "scrolled": true }, "outputs": [ @@ -712,9 +596,9 @@ }, { "data": { - "image/png": "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\nAITB0AIAhMHQAgCEUcnPtADgv8r5PEjxPuPJ+TxopJ8dqd6Rfl+luAePurecz55ylOIzOJ60AABh\nMLQAAGEwtAAAYTC0AABhMLQAAGGQHgRQcTnptJzkXU7vP//8U/gaf//9t+ydOLHYf/cfOXJE1uvq\n6kzNS9ipenV1deGv532/6nvw3sdybfvIwZMWACAMhhYAIAyGFgAgDIYWACAMghgl8Oqrr5ra4cOH\nZe93331nas8++2zhr/XQQw/J+qWXXmpql1xySeHrAuWSE67IWaGkggU5vcPDw4V7Dxw4IHsVFdqo\nra2VvX19faZ27Ngx2au+NxXk8OqTJuk/9+rrVVVVyd6c91wpxXoonrQAAGEwtAAAYTC0AABhMLQA\nAGEwtAAAYUwoxeFkBVXsC5XLHXfcIevPPPNMhe/EWrRokal98cUXsnfq1Knlvp0TqTy7Y/B/dHV1\nFf59HunqH+/1KqU3ODgoe4eGhkxNJfdSSun33383tZ9++kn2Hjx40NRyDlVUa5hmz54te9vb2wv3\nqvSg93uvUoXe/ar0oLfKyksrKurrzZkzR/4u86QFAAiDoQUACIOhBQAIg6EFAAiDNU4OFbooReBi\nyZIlpnbNNdfI3m3btpnaiy++KHs3b95saq+//rrsveWWW/7bLQInjPpA3ltrpOqHDh2Svbt37za1\n7du3y94ff/zR1Hbt2iV7VZBC1U466ST5ehUm8c7uUkGKzs7Owr3ePaj33AtX5JzTVV9fL+sKa5wA\nAGMSQwsAEAZDCwAQBkMLABAGQwsAEMa4Tw92dXXJ+nPPPVf4Guedd56pffjhh7JXrVfxDlxTKSIv\n8fTll1+a2v79+2UvUA6lWAmn/s0fPXpU9qoVSj09PbJXpf+8pOGUKVNMbdWqVbK3o6PD1FQSbs+e\nPfL1Xl1R76/3t2PatGmm5iUC1QGX3nuurpFzoKd3Dzl40gIAhMHQAgCEwdACAITB0AIAhDHugxhe\nWEF9iKgCFyml9Omnn5paQ0PDyG4spfTCCy+Y2rffflv49VdeeeWI7wEoB2/1j1o15K0fUh/qqzVD\nKaXU1tZmaipEkZI+t2rWrFmyd/r06aa2b98+U/v444/l69XKqN7eXtmr/qYsWLBA9ra0tJja5MmT\nZa96H70ghrqGF8RQa7a8M7ZyAho8aQEAwmBoAQDCYGgBAMJgaAEAwmBoAQDCGPfpwaVLl8q6ShV6\n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\nBKKXNJw2bZqpdXR0yN6VK1eampd+ViubvBRmTnow598TT1oAgDAYWgCAMBhaAIAwGFoAgDAmlOsD\nVaFiX6hcXnrpJVn3VscUtWnTJlkf6Wqle++9V9bnz59f+BpXXHGFqZ188snHfU8VYA/8Qcl1dXUV\n/n1Wf2O8s6zUuqWc4I933V9//dXUVOAipZR2795tajt27JC9ao3T4OCgqbW2tsrXt7S0mFpNTY3s\nVXUviKFCF14QY86cOabmrXFS52l5Px8VuvB61b+R9vZ2+bvMkxYAIAyGFgAgDIYWACAMhhYAIAyG\nFgAgDNKDGGtID1bASNOD3oGEqtdLyKmkoderDpL01kOpujoYMqWUurq6TE2th1Lrj1LSabycv8lq\nXVNKem2Ut26prq7O1Lz3Ud2b+h5yexXSgwCA8BhaAIAwGFoAgDAYWgCAMDhPC0DF5az+8T68V4GJ\n6upq2auCEN51VX3GjBmy9/TTTy90X164Qq2dGh4elr05Z41551YpKtCizu7KvW5O6ILztAAAYxJD\nCwAQBkMLABAGQwsAEAZDCwAQBulBAGWVs6pI1b1etZZIrWvKpdJ7XkrPW0f1/3lpSfXeeAdZemuY\nFLWGyUvzqfesXMm/nMSmhyctAEAYDC0AQBgMLQBAGAwtAEAYBDEAVFzOGUzeB/0qQJDT660qqqmp\nMTVvfZFaraRWSakzq1LSZ295oY2ckIkKiOSEX3LWNXnKdVYjT1oAgDAYWgCAMBhaAIAwGFoAgDAY\nWgCAMEgPAiirUqz5KXpdb92SkpMIzLmGWsPU398vX6+Sgt4hkCM9IDNHuZJ/pcCTFgAgDIYWACAM\nhhYAIAyGFgAgjAmj+QM3AAD+N560AABhMLQAAGEwtAAAYTC0AABhMLQAAGEwtAAAYTC0AABhMLQA\nAGEwtAAAYTC0AABhMLQAAGEwtAAAYTC0AABhMLQAAGEwtAAAYTC0AABhMLQAAGEwtAAAYTC0AABh\nMLQAAGEwtAAAYTC0AABhMLQAAGH8B+VGgpqOIIDlAAAAAElFTkSuQmCC\n", + "image/png": "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\nmTQWD1szVORFy+Xpp582Ne8Bc66tW7eaWqkjm/74xz/K+oIFC7LW33LLLbJ+4YUXjvqaxpDebAhj\nrqurK/v7rH5v1NgjNcYppfywkDdKaf/+/aamwhn79u2T63fv3m1qajzU4OCgqbW2tspztrS0mFpN\nTU1WLSUd2FDhDC+wMW/ePFNT46G8/bzU30SFM7y/nfo30d7ePuL3mTsvAEA4NC8AQDg0LwBAODQv\nAEA4BDZwviCwUSGlBjbUPlPe75IKJ6hwhzouJb0fmJraoWop6X2+urq6TE1N7fAmVKggRJHfZTVN\nQ03z8Cbm1NXVmZr6/Lxryr1+L/ChENgAAJyXaF4AgHBoXgCAcGheAIBwaF4AgHDYzwtAReWOF0pJ\nJ9ZUMrC6ulquV4k/dU4vGTdr1ixTW7hwYdY1eWk9NcpqeHjY1IrsceZ9fopKa6q9w4qcs0iykP28\nAAATBs0LABAOzQsAEA7NCwAQDoENAOMmd5SQ9xBf1dXYIzUGqggVmEhJhyPUeCvF289KfSYqxOGN\nd1LUeCcvRKE+q7EIXHjnLPJaP8WdFwAgHJoXACAcmhcAIByaFwAgHAIbACqqyH5Wqq4CB956daya\nJlFTUyPXqykTavKFmvCh9s1KSe/9pcIdRUIoRfZIU/Ui0zRyz1lu3HkBAMKheQEAwqF5AQDCoXkB\nAMKheQEAwiFtCGDclDpKKPecaoyTJzdBWGS9Gu/U398v16tkoRpPVeoeZ0WMR1qwVNx5AQDCoXkB\nAMKheQEAwqF5AQDCmRThwRwAAD/FnRcAIByaFwAgHJoXACAcmhcAIByaFwAgHJoXACAcmhcAIBya\nFwAgHJoXACAcmhcAIByaFwAgHJoXACAcmhcAIByaFwAgHJoXACAcmhcAIByaFwAgHJoXACAcmhcA\nIByaFwAgHJoXACAcmhcAIByaFwAgHJoXACAcmhcAIByaFwAgnP8Dby1/k4rBte8AAAAASUVORK5C\nYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -727,30 +611,21 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "## Training one Autoencoder at a time in multiple graphs" ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "There are many ways to train one Autoencoder at a time. The first approach it to train each Autoencoder using a different graph, then we create the Stacked Autoencoder by simply initializing it with the weights and biases copied from these Autoencoders." ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Let's create a function that will train one autoencoder and return the transformed training set (i.e., the output of the hidden layer) and the model parameters." ] @@ -759,9 +634,7 @@ "cell_type": "code", "execution_count": 19, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -818,10 +691,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Now let's train two Autoencoders. The first one is trained on the training data, and the second is trained on the previous Autoencoder's hidden layer output:" ] @@ -829,11 +699,7 @@ { "cell_type": "code", "execution_count": 20, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -845,7 +711,7 @@ "3 Train MSE: 0.0192315\n", "0 Train MSE: 0.00410999\n", "1 Train MSE: 0.00461446\n", - "2 Train MSE: 0.00455271\n", + "2 Train MSE: 0.0045527\n", "3 Train MSE: 0.00431479\n" ] } @@ -857,10 +723,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Finally, we can create a Stacked Autoencoder by simply reusing the weights and biases from the Autoencoders we just trained:" ] @@ -868,11 +731,7 @@ { "cell_type": "code", "execution_count": 21, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "reset_graph()\n", @@ -889,17 +748,13 @@ { "cell_type": "code", "execution_count": 22, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAa8AAAFsCAYAAAB7FzYbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGrJJREFUeJzt3UusX1X5N/BV6JXS0gstl1LaWigUkIuIIDhQB0xMNGoY\nIAMNmkhMNJFEDSQm6kRnysSg0YCiAxMTNQ5U0AQtAlorIALW0pZSiy2U1t6vwDvxff9vur7r3316\nTnu62s9n+GSvvff5HX7nYWd/+6wJb731VgGAnpwx3jcAACOleQHQHc0LgO5oXgB0R/MCoDuaFwDd\n0bwA6I7mBUB3NC8AuqN5AdCdieN0XTOpGGsTxvsGTlfbtm3zfWZMzZkz56jfZ09eAHRH8wKgO5oX\nAN0Zr3deAKeEtK3UhAlewR5vnrwA6I7mBUB3NC8AuqN5AdAdzQuA7kgbAqe1lAx8880347GpfsYZ\n9TPAxIn1n9bWOc8888xBx77xxhuD7yklIFvr0/VT7WTjyQuA7mheAHRH8wKgO5oXAN0R2AC6NpJR\nTKMd25SCDJMmTRp0nVZgItVHEthI9alTp1a1Vggj1VPgoxU4GS+evADojuYFQHc0LwC6o3kB0B2B\nDaAbQ6dhtIIZQ4MIBw4ciOtTuCFN2Dh8+PCg40opZfLkyVXt0KFD8dhkypQpVS3d50g+k3T91vqR\nfP5jyZMXAN3RvADojuYFQHc0LwC6o3kB0B1pQ+CkkxJwpeRRSKnWSvbt27evqu3fv7+qtdJyKdmX\nknkpbTht2rR4znT9dP+t8U4prZg+k3RcKflek9Z4qPRZpXttjbc6Vp68AOiO5gVAdzQvALqjeQHQ\nHYENoBspXJBqEyfmP20HDx6sailw0QoXpPOeddZZVS0FO3bu3BnPmQIb6Z5mzZoV1+/atWvQfbYC\nH+nYoXuMlZLDJSnEMZLxVEN48gKgO5oXAN3RvADojuYFQHdOy8DGk08+WdXuu+++eOyCBQuqWvqX\n8h//+Mfj+jlz5gyqAf+jFQ7Ys2dPVdu9e3dVa+3HtX379qr2n//8p6qlEEUppcyYMaOqzZ49u6ql\nwMWaNWviOV9//fWqdsEFF1S1c889N65PIZR0/8uWLYvrzzvvvKo2ffr0qjbawEYrmHGse3958gKg\nO5oXAN3RvADojuYFQHc0LwC6M+FYR3OM0rhc9P+67LLLqlorCTRa55xzTlW76aabjsu1xtrixYtj\n/Z577qlqF1988XG+m6M6tsgSo7Zt27ZRfZ/TKKLWHlMpGZjSeuvWrYvrN2zYUNVSgrGVVkwpvkmT\nJlW11157rao999xz8ZxJ+huVxlCVUsq2bduqWhpPdeWVV8b173vf+6ra0qVLB52zlOHJwlaqMI2t\nmjNnzlG/z568AOiO5gVAdzQvALqjeQHQndNyPNTPf/7zqvb000/HY9NLzvTi9U9/+lNc/4tf/KKq\n/eY3v6lqS5YsqWrr16+P5xyqtadRGj2zcePGwedNQY4vfelLg9dz6msFwVI9jR1K45VKyUGOtJ/V\n1q1b4/o0HiqNN0rnLCWPoko/U/ruXXTRRfGcM2fOrGpp5NSOHTvi+hdffLGqpRBH+jlLyeGQ9B1v\njYeaPHlyrB9prMOBnrwA6I7mBUB3NC8AuqN5AdCd0zKwsXz58kG1lquvvrqq3X777fHYb3zjG1Xt\npZdeqmopsNGaEjBU60VqCmyk66cpAaWUcvnll4/qvjj1taYppJf2acJCa32aZpFCHGmyTev6KYgw\nd+7cuD4FSdK9pn2/WgGqdP9p6kgrsPHss89WtVdffbWqtaaGDJ2G0Qp8JOnY1tQU+3kBcNrQvADo\njuYFQHc0LwC6o3kB0J3TMm14Ik2dOrWqDU3rjSQBORJplFUap3PjjTfG9bfeeuuY3xOnh5RCG8l+\nXmn9tGnTqlprFFNK1aZ9qvbt2xfXpz21Uqo33dPBgwfjOVPaLtUee+yxuD7df/o5L7300rh+/vz5\nVS2lJUeSCky/05GkFYfw5AVAdzQvALqjeQHQHc0LgO4IbJzC9uzZE+sf/vCHq1oakfOtb30rrk8v\no+FYpSBAa5TS/v37q1raD6tl3rx5VS0FCVp7T6VwRKqlcEYag9Wqp+/uli1bBq+/5pprqlorKLZo\n0aKqlsZwpRBGKTlcM9bhjMSTFwDd0bwA6I7mBUB3NC8AuiOwcQp78MEHY33z5s1VLe1flF7kwlhr\nBRmGSnt3tUIcaUJGCke0wgmpnsIlqdb6OVNgZe3atVVt27ZtcX0KR6RgyqxZs+L6dGy61xTqatUF\nNgAg0LwA6I7mBUB3NC8AuiOwcYpIL3jvvvvuweufeOKJqnb++eeP6p7gSGlyRZrQ0Jqwkaa7TJ8+\nfdBxreunWms6TbqvNGEjbYXUsmnTpqr2+9//vqq98MILcX2ahjF79uyqtmDBgrg+BS5SMKW1pUtr\nGsnx5skLgO5oXgB0R/MCoDuaFwDd0bwA6I604Snil7/8ZVU7dOhQPPa2226ram9729vG/J7gSGkU\n0kj280pjh1LaLyXwSskpwpR2bK1Px+7du7eqTZ48uart2LEjnnP16tVVbeXKlVVt586dcf1ll11W\n1a644oqq1hoPlT6/9Dm3xlulzyQlENPveTQ8eQHQHc0LgO5oXgB0R/MCoDsCGx1KQYyf/exnVS29\niC2llK9//etVbbR7KsGxGklgo7Wn1JEOHDgQ67t27Rp0bGvkUQoypFFUaZTSSy+9FM+ZwlZPPvlk\nVZszZ05cf+WVV1a1G2+8saq1AhtDQzQtrb8zR2p9psca5PDkBUB3NC8AuqN5AdAdzQuA7ghsdOj7\n3/9+VVuxYkVV+9jHPhbXm6bBya71Ej8FJtKEh1ZgY//+/VUt7V3V2o9rxowZVS0FNl599dWq9vjj\nj8dz/vnPf65qaT+ua6+9Nq5/17veVdVSuKO1x1mSAiet38nQ/bxM2ADgtKd5AdAdzQuA7mheAHRH\n8wKgO9KGJ7Gnn3461j/72c9WtTT65Wtf+9qY3xOMtZQWHMmxaZRUShCWkvfpSntvzZw5M66fO3du\nVUsJxg0bNlS1P/zhD/Gcaf3VV19d1d7+9rfH9UuWLKlqrftP0j5hKRk4kvFO6TNt/U6OlScvALqj\neQHQHc0LgO5oXgB0R2DjJLFv376qdvvtt8dj04vPO+64o6oZA0UPRrKfVNp3bs+ePVUtBTNKyaGD\nFG5ojVJK370tW7ZUtYcffriq/f3vf4/nTPthLVq0qKrdcsstcX0aZZU+p5EEJtK+aWlkVOv6Yx3O\nSDx5AdAdzQuA7mheAHRH8wKgOwIb4yC9DP3ABz5Q1VavXh3XL1++vKp99atfHf2NwXGWghhpj66R\nBDaSXbt2xXra5yoFJtLUjlJK2b17d1V76qmnqloKZ7QCD5deemlVu+aaa6paK4CV9hhL9u7dG+sp\nxJL+RqXfUynDfycjmdAxhCcvALqjeQHQHc0LgO5oXgB0R/MCoDvShuNg27ZtVe3RRx8dvP6hhx6q\nailFBSeblGIbSdos7ROV0natc6YUYkoWppFTpZSyffv2qrZq1aqqtmnTpqo2f/78eM40Cirt3TV9\n+vS4PqUA0x5hrZFNKQU5dI+u1vo0nutYU4UtnrwA6I7mBUB3NC8AuqN5AdAdgY3jbMeOHVXtpptu\nGrT2Rz/6Uaxfd911o7onGC/ppX0KcbRGDg0NErTWp3BGCmGkUFUppfzlL3+pao8//nhVe+WVV6ra\nvHnz4jmXLVs26Nj0OZWSR1YdPnw4HpukzyR9zq2RWSkw0rrXseTJC4DuaF4AdEfzAqA7mhcA3RHY\nOM4eeOCBqrZu3bpBa9/znvfE+lj/S3UYTylc0ZoGkaTvQ2saxYEDBwZdK4U4Sill7dq1VS2FI1Lg\n4oYbbojnvP7666ta+kxa+4GlfbJGEqIYusdaS/r8TsTfKE9eAHRH8wKgO5oXAN3RvADojuYFQHek\nDcfImjVrYv0rX/nKib0ROAWkBF0p7cTdkVrjkdL6Q4cOVbVW2nHatGlV7aqrrhp0T0uXLo31tB9Z\nuv+RJPjS/bcShGm81kjSnum8rd/fWPLkBUB3NC8AuqN5AdAdzQuA7ghsjJEVK1bE+s6dOwetX758\neVVLL4fhdNAKJwwNB7SCHSmckcYmTZ06Na5ftGhRVbvgggvisUdauHBhrM+cObOqpcBEa7xT+jsx\nksBHulZrP7TkRIQzEk9eAHRH8wKgO5oXAN3RvADojsDGOLj55pur2iOPPFLVBDbg2KSpES1TpkwZ\nvD4FOVKQIgVLWt/nSZMmVbUUgmiFKFIIJR3bCmz0uj+gJy8AuqN5AdAdzQuA7mheAHRH8wKgOxPG\nabTH+MwT4VTWZ2TqFLBt27aT7vvcGqWUjGQ8UmtPrCOlv6utv7VD/waPJBWYju0pVThnzpyj3qwn\nLwC6o3kB0B3NC4DuaF4AdGe8AhsAcMw8eQHQHc0LgO5oXgB0R/MCoDuaFwDd0bwA6I7mBUB3NC8A\nuqN5AdAdzQuA7mheAHRH8wKgO5oXAN3RvADojuYFQHc0LwC6o3kB0B3NC4DuaF4AdEfzAqA7mhcA\n3dG8AOiO5gVAdzQvALqjeQHQHc0LgO5oXgB0R/MCoDuaFwDdmThO131rnK7LqWvCeN/A6Wr9+vW+\nz4ypJUuWHPX77MkLgO5oXgB0R/MCoDvj9c4L4KQwYUL9eiXVSinlrbfq13vp2DfeeKOqnXHG8GeF\nodcppZQ333xz8LGnEk9eAHRH8wKgO5oXAN3RvADojuYFQHekDQFGIaX9Jk+eXNVSArHl8OHDg9cP\nTUtOnJj/3A9NNo4kgXkiePICoDuaFwDd0bwA6I7mBUB3BDbGyI9//ONY37NnT1VbtWpVVfvud787\n+Fpf/vKXq9r73//+qvbe97538DnhZDKScECqjSQcceDAgaqWAhOtY1M4I91/65w7duyoameeeWZV\nawUuzjrrrEH3dOjQobh+0qRJg67fCmaM1ygqT14AdEfzAqA7mhcA3dG8AOjOhHH619Hj80+yx8hn\nPvOZqvad73xnHO7kf1xxxRVV7bHHHovHnnPOOcf7dsbDqb+B0Ulq/fr1Y/59HsnfpRSE2L9/fzx2\n7969VW379u1VbcOGDXH9pk2bqloKZW3cuLGqjWQ/r0suuaSqzZs3Lx67YMGCQbUU7ChleGAj1Vr1\n0U7oWLJkyVG/z568AOiO5gVAdzQvALqjeQHQHc0LgO4YD3UUxyNZeN1111W1j370o1VtzZo1cf0P\nfvCDqvb8889XtZ/+9Kdx/Sc/+cmj3SKcMCltlvbIKiWPONq5c2dVSwnCUkpZu3ZtVXvqqaeq2nPP\nPRfXv/baa1UtpQgPHjxY1VrjoWbPnj3o2ClTpsT1F198cVU7++yzq9rMmTPj+qF7j7USnClFmH5/\nrbThsY6X8uQFQHc0LwC6o3kB0B3NC4DuCGz818svvxzr3/ve9watv+GGG2L917/+dVUbuv9Oa0+i\nF198sar98Y9/rGpbt26N6+FkMtq9t9LIpy1btsT1KYixefPmqtYaobZ8+fKqNmfOnKo2d+7cqtYK\nYKXvcwpntEIsKfCSgi2tYETaJyydszUeKoVL0sip1v0fK09eAHRH8wKgO5oXAN3RvADojsDGf7XC\nDenFZQpn/Pa3v43r0790H+rBBx+M9ZUrVw5a/6EPfeiYrw0nSgoCpMBBSwo3TJ8+PR6bAhdLliyp\natdee21cv3jx4kH39K9//auqtaZ+pL3Ddu3aVdVaf6NS4CKFYFqfaQpXpGkarfVpwki6/kj28xrC\nkxcA3dG8AOiO5gVAdzQvALqjeQHQHWnD/3rHO94R6ynhk0Y5TZs2bczvqTWaKu0VBD1IybKUQmsl\n01IyMaUN08imUnIKLu2Hlfbca10r7fH19NNPV7XWyKpXX3110PVnzJgR1+/bt6+qpc85HVfK8FFS\nrb87af2sWbPisYn9vAA4bWheAHRH8wKgO5oXAN0R2DiK1r4+Y+2hhx6qas8888zg9bfeemtVW7p0\n6ajuCcZaejmfwgUpGFFK3hMq7fHVGsuWzpvGQ02dOjWuT3uH/eMf/6hqK1asqGqrV6+O50z7+82c\nObOqXXTRRXH9ggULqtrQYEtL+p209l3bs2dPVUvhkjRGqpT2PmFH48kLgO5oXgB0R/MCoDuaFwDd\nEdgYB0899VRV+/SnP13V0ovoUkq54IILqtp9991X1dI+PXAitPZoSi/nDx8+XNVaL/dT6CCFQFrT\nJC688MKqlsIRrfWbN2+uao888khV++tf/1rV0h5ZpZQyf/78qpYCD1dddVVcf/7551e1oZ9zKXk6\nUApnpGBGKaXMnj170PWPdZJGiycvALqjeQHQHc0LgO5oXgB0R/MCoDvShuPgiSeeqGqtZGFy1113\nVbVly5aN6p7gREgptpRMa40MSuOhUqo2jVxq1dM9pT22Sinl4Ycfrmpp7FPa82/RokXxnHPnzq1q\nKQG5cOHCuD79TOvWratqrT3OUgowff7pZ2qtT2nTVoLUfl4AnDY0LwC6o3kB0B3NC4DuCGwcZ3fe\neWdV+8lPfjJo7ec///lY/+IXvziqe4LjrfUSPtXTi/zWy/3WnlKjWb9r166qtnLlyrj++eefr2qv\nvPJKVUujlNIYqFLynoHvfOc7q1prP67XX3+9qu3cubOqzZo1K66fOLFuAyPZI+3gwYNVrfX5J61R\nYkfjyQuA7mheAHRH8wKgO5oXAN0R2Bgju3fvjvVf/epXVS3t63PeeedVtXvvvTees/Uv3eFklyZk\npJf7rWBG+m8/vfBP1yklBxleeumlqvbss8/G9Vu3bq1qKdyQJmSkfbNKKWXBggVVLU3N2LFjR1y/\nfv36qpY+09Z+XocOHRq0vvWZpvpY792VePICoDuaFwDd0bwA6I7mBUB3BDbGyG233Rbrra0VjvS5\nz32uqrW2MIBepSBAClyMZEJH2hKlFfhI4YTNmzdXtTQho5Q85eLmm2+uaimc0ZpQsXjx4qqWAh9p\nEkgpOTCStjRpBT7ShI/0+aVJGqXk30lanyZ5lGLCBgCnEc0LgO5oXgB0R/MCoDuaFwDdkTY8BqtW\nrapqjz766OD1H/nIR6ra3XffPZpbgtNCSqylZF1LGg/12muvDbpOKTmZl/bpmjdvXlVrJSDTPlt7\n9+6taq1UXkolp2u1PqeUIkzXb42HSudNqczW9Y91lJQnLwC6o3kB0B3NC4DuaF4AdEdg4yj27dtX\n1e65556q1hqdklx//fVVzR5dnA5S6GAk44HSXnjpu5PGQJVSyrp166rahg0bqtqaNWvi+hTOSLUU\nTjj33HPjOWfMmFHVUuBh27Ztcf3Q8VitwEQaLzV16tSq1hqZNVrGQwFw2tC8AOiO5gVAdzQvALoj\nsHEU999/f1X73e9+N3j9nXfeWdVM0+B0lV7Op8kNrWkUSQpnbN26NR6bwhkbN26samnqRimlLFu2\nrKqlvbcuvPDCqtbany+FM9LP1JpEkT7TFGwZurdgKaXMnTu3qqUQRyk5iJJ+p61ghgkbAJw2NC8A\nuqN5AdAdzQuA7mheAHRH2vAo7r333lGt/+Y3v1nVjIKC/11r76g0yijtPfXPf/4zrn/xxRer2ubN\nm6va2WefHdfPnj27qi1cuLCqpQRiGjVXSt5jbCSjmFIy8+WXX65qr7zySlyfkokXX3xxVVu6dGlc\nn8ZbnXXWWfHYseTJC4DuaF4AdEfzAqA7mhcA3RHYOM52795d1c44Y+z/nyGNmGnt35Ne8KYX4S3p\nxfN99903eH2S7rUVlkn7F9GvNDao9R2ZOLH+k5UCD61wxPbt2wddP52ztf6FF16oamnvrVYII13r\n8OHDVa31fU6Biy1btlS1f//733F9+j4tWbKkqrVCGMc63mm0PHkB0B3NC4DuaF4AdEfzAqA7AhvH\n2YIFC07Ide66666qlvYUKiVPFPj2t7895vc0Wq3P7lOf+tQJvhOOpxREaIUT0nSaVEvBilLynlQp\nXJGmdpRSyqpVq6paCjKcc845Va21R1j6WdMkj9ZnkgIfKbCRzllKnqaR9vNqTR1J93UiQhyevADo\njuYFQHc0LwC6o3kB0B3NC4DuSBsexR133FHVHnjggXG4k//d/fffP+bnTKN4Smmnno70iU98Itbf\n/e53D1p/yy23DDqOU09rP6+UYkvJvssuuyyuTyOSli1bVtVWrlwZ1//tb3+raimZmMZbpTFOpeTv\n2fLly6vaSBKYaY+tSy65JK6/6qqrqlpK+qakZin5d5J+/rFOIHryAqA7mhcA3dG8AOiO5gVAdyak\nvWxOgHG56Fj54Q9/WNUOHjw4qnM+88wzVW20I5u+8IUvxHrrxe2RPvjBD8b6/Pnzj/mejqPx2VSI\nsn79+sHf5/T3ZmgAqJQcbkjhjq1bt8b1KbCxevXqqrZ27dq4/rnnnqtqGzdurGppBNusWbPiORcv\nXlzVLr/88nhskvbjSqPhFi5cGNen8VDnnntuVWv9ntL10+9pJIGNJUuWHPVgT14AdEfzAqA7mhcA\n3dG8AOiOwAanCoGNcTKSwMZQrZf7aZpEOrYVLjhw4EBVO3ToUFVrBbDSPmGbNm2qajt27KhqKdhQ\nSt4nKwUm9uzZM3h9+vmnTZsW16f9yIZOzWhda7QENgA4JWleAHRH8wKgO5oXAN3RvADojrQhpwpp\nw3Ey2rThaP8GpRRfKwE3ZcqUqpYSjC2tPe6OlJKBhw8fHnzO9Jm00oYpGfjGG28c7Rb/n7RPV0pg\nts451vt0lSJtCMApSvMCoDuaFwDd0bwA6M6wt48Ax8lIXvinEUUp3NAKR6S9v3bv3j3ouFJyuGFo\nYKQV9hgajmiFUNLPnz6n1nin9FmNU5BvRDx5AdAdzQuA7mheAHRH8wKgOwIbQDdSkCAFPlohkKGT\nJ1qBhRRu2LdvX1VL4YoU9iglh0NGEqJI69PP3wqhpPMO/ZzHkycvALqjeQHQHc0LgO5oXgB0R/MC\noDvShkA3UgouJQhHm4wbySiloSOr9u/fH885NBnYShsej2TgyZYsTDx5AdAdzQuA7mheAHRH8wKg\nOxN62LcFAP5/nrwA6I7mBUB3NC8AuqN5AdAdzQuA7mheAHRH8wKgO5oXAN3RvADojuYFQHc0LwC6\no3kB0B3NC4DuaF4AdEfzAqA7mhcA3dG8AOiO5gVAdzQvALqjeQHQHc0LgO5oXgB0R/MCoDuaFwDd\n0bwA6I7mBUB3/g/1FM9tbGao5wAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -912,20 +767,14 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "## Training one Autoencoder at a time in a single graph" ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Another approach is to use a single graph. To do this, we create the graph for the full Stacked Autoencoder, but then we also add operations to train each Autoencoder independently: phase 1 trains the bottom and top layer (ie. the first Autoencoder) and phase 2 trains the two middle layers (ie. the second Autoencoder)." ] @@ -934,9 +783,7 @@ "cell_type": "code", "execution_count": 23, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -983,11 +830,7 @@ { "cell_type": "code", "execution_count": 24, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "optimizer = tf.train.AdamOptimizer(learning_rate)\n", @@ -1011,9 +854,7 @@ "cell_type": "code", "execution_count": 25, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -1024,27 +865,23 @@ { "cell_type": "code", "execution_count": 26, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training phase #1\n", - "0 Train MSE: 0.0074068\n", + "0 Train MSE: 0.00740679\n", "1 Train MSE: 0.00782866\n", "2 Train MSE: 0.00772802\n", "3 Train MSE: 0.00740893\n", "Training phase #2\n", - "0 Train MSE: 0.279671\n", - "1 Train MSE: 0.00553525\n", - "2 Train MSE: 0.00291541\n", - "3 Train MSE: 0.00238866\n", - "Test MSE: 0.00976381\n" + "0 Train MSE: 0.295499\n", + "1 Train MSE: 0.00594454\n", + "2 Train MSE: 0.00310264\n", + "3 Train MSE: 0.00249803\n", + "Test MSE: 0.00979144\n" ] } ], @@ -1074,10 +911,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "## Cache the frozen layer outputs" ] @@ -1086,9 +920,6 @@ "cell_type": "code", "execution_count": 27, "metadata": { - "collapsed": false, - "deletable": true, - "editable": true, "scrolled": true }, "outputs": [ @@ -1102,11 +933,11 @@ "2 Train MSE: 0.00734359\n", "3 Train MSE: 0.00783768\n", "Training phase #2\n", - "0 Train MSE: 0.229686\n", - "1 Train MSE: 0.00474355\n", - "2 Train MSE: 0.00255261\n", - "3 Train MSE: 0.00206523\n", - "Test MSE: 0.00978721\n" + "0 Train MSE: 0.200137\n", + "1 Train MSE: 0.00520852\n", + "2 Train MSE: 0.00259211\n", + "3 Train MSE: 0.00210128\n", + "Test MSE: 0.0097786\n" ] } ], @@ -1145,10 +976,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "## Visualizing the Reconstructions" ] @@ -1156,11 +984,7 @@ { "cell_type": "code", "execution_count": 28, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1171,9 +995,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1201,10 +1025,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "## Visualizing the extracted features" ] @@ -1212,11 +1033,7 @@ { "cell_type": "code", "execution_count": 29, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1228,9 +1045,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1252,20 +1069,14 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "# Unsupervised pretraining" ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Let's create a small neural network for MNIST classification:" ] @@ -1273,11 +1084,7 @@ { "cell_type": "code", "execution_count": 30, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "reset_graph()\n", @@ -1299,7 +1106,7 @@ "\n", "weights1_init = initializer([n_inputs, n_hidden1])\n", "weights2_init = initializer([n_hidden1, n_hidden2])\n", - "weights3_init = initializer([n_hidden2, n_hidden3])\n", + "weights3_init = initializer([n_hidden2, n_outputs])\n", "\n", "weights1 = tf.Variable(weights1_init, dtype=tf.float32, name=\"weights1\")\n", "weights2 = tf.Variable(weights2_init, dtype=tf.float32, name=\"weights2\")\n", @@ -1307,7 +1114,7 @@ "\n", "biases1 = tf.Variable(tf.zeros(n_hidden1), name=\"biases1\")\n", "biases2 = tf.Variable(tf.zeros(n_hidden2), name=\"biases2\")\n", - "biases3 = tf.Variable(tf.zeros(n_hidden3), name=\"biases3\")\n", + "biases3 = tf.Variable(tf.zeros(n_outputs), name=\"biases3\")\n", "\n", "hidden1 = activation(tf.matmul(X, weights1) + biases1)\n", "hidden2 = activation(tf.matmul(hidden1, weights2) + biases2)\n", @@ -1329,10 +1136,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Regular training (without pretraining):" ] @@ -1340,20 +1144,16 @@ { "cell_type": "code", "execution_count": 31, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0 Train accuracy: 0.94 Test accuracy: 0.9247\n", - "1 Train accuracy: 0.973333 Test accuracy: 0.9328\n", - "2 Train accuracy: 0.986667 Test accuracy: 0.9406\n", - "3 Train accuracy: 0.98 Test accuracy: 0.9425\n" + "0 Train accuracy: 0.973333 Test accuracy: 0.9334\n", + "1 Train accuracy: 0.98 Test accuracy: 0.936\n", + "2 Train accuracy: 0.973333 Test accuracy: 0.9382\n", + "3 Train accuracy: 0.986667 Test accuracy: 0.9494\n" ] } ], @@ -1381,10 +1181,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Now reusing the first two layers of the autoencoder we pretrained:" ] @@ -1392,21 +1189,17 @@ { "cell_type": "code", "execution_count": 32, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Restoring parameters from ./my_model_cache_frozen.ckpt\n", - "09% Train accuracy: 0.94\tTest accuracy: 0.9255\n", - "1 Train accuracy: 0.973333\tTest accuracy: 0.9423\n", - "2 Train accuracy: 0.993333\tTest accuracy: 0.941\n", - "3 Train accuracy: 0.973333\tTest accuracy: 0.9458\n" + "0 Train accuracy: 0.94\tTest accuracy: 0.9266\n", + "1 Train accuracy: 0.98\tTest accuracy: 0.94\n", + "2 Train accuracy: 1.0\tTest accuracy: 0.946\n", + "3 Train accuracy: 0.98\tTest accuracy: 0.9401\n" ] } ], @@ -1437,20 +1230,14 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "# Stacked denoising Autoencoder" ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Note: the book uses `tf.contrib.layers.dropout()` rather than `tf.layers.dropout()` (which did not exist when this chapter was written). It is now preferable to use `tf.layers.dropout()`, because anything in the contrib module may change or be deleted without notice. The `tf.layers.dropout()` function is almost identical to the `tf.contrib.layers.dropout()` function, except for a few minor differences. Most importantly:\n", "* you must specify the dropout rate (`rate`) rather than the keep probability (`keep_prob`), where `rate` is simply equal to `1 - keep_prob`,\n", @@ -1459,10 +1246,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Using Gaussian noise:" ] @@ -1471,9 +1255,7 @@ "cell_type": "code", "execution_count": 33, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -1491,11 +1273,7 @@ { "cell_type": "code", "execution_count": 34, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "noise_level = 1.0\n", @@ -1517,11 +1295,7 @@ { "cell_type": "code", "execution_count": 35, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "optimizer = tf.train.AdamOptimizer(learning_rate)\n", @@ -1534,11 +1308,7 @@ { "cell_type": "code", "execution_count": 36, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1577,10 +1347,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Using dropout:" ] @@ -1589,9 +1356,7 @@ "cell_type": "code", "execution_count": 37, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -1609,11 +1374,7 @@ { "cell_type": "code", "execution_count": 38, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "dropout_rate = 0.3\n", @@ -1637,11 +1398,7 @@ { "cell_type": "code", "execution_count": 39, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "optimizer = tf.train.AdamOptimizer(learning_rate)\n", @@ -1654,11 +1411,7 @@ { "cell_type": "code", "execution_count": 40, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1698,11 +1451,7 @@ { "cell_type": "code", "execution_count": 41, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1728,10 +1477,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "# Sparse Autoencoder" ] @@ -1739,11 +1485,7 @@ { "cell_type": "code", "execution_count": 42, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1783,9 +1525,7 @@ "cell_type": "code", "execution_count": 43, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -1799,11 +1539,7 @@ { "cell_type": "code", "execution_count": 44, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "def kl_divergence(p, q):\n", @@ -1832,9 +1568,7 @@ "cell_type": "code", "execution_count": 45, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -1845,11 +1579,7 @@ { "cell_type": "code", "execution_count": 46, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1979,11 +1709,7 @@ { "cell_type": "code", "execution_count": 47, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -2009,10 +1735,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Note that the coding layer must output values from 0 to 1, which is why we use the sigmoid activation function:" ] @@ -2021,9 +1744,7 @@ "cell_type": "code", "execution_count": 48, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -2032,10 +1753,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "To speed up training, you can normalize the inputs between 0 and 1, and use the cross entropy instead of the MSE for the cost function:" ] @@ -2044,9 +1762,7 @@ "cell_type": "code", "execution_count": 49, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -2059,10 +1775,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "# Variational Autoencoder" ] @@ -2070,11 +1783,7 @@ { "cell_type": "code", "execution_count": 50, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "reset_graph()\n", @@ -2116,11 +1825,7 @@ { "cell_type": "code", "execution_count": 51, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "eps = 1e-10 # smoothing term to avoid computing log(0) which is NaN\n", @@ -2133,9 +1838,7 @@ "cell_type": "code", "execution_count": 52, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -2151,11 +1854,7 @@ { "cell_type": "code", "execution_count": 53, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -2235,11 +1934,7 @@ { "cell_type": "code", "execution_count": 54, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [], "source": [ "reset_graph()\n", @@ -2288,20 +1983,14 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "## Generate digits" ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Let's train the model and generate a few random digits:" ] @@ -2309,11 +1998,7 @@ { "cell_type": "code", "execution_count": 55, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -2399,11 +2084,7 @@ { "cell_type": "code", "execution_count": 56, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "data": { @@ -2426,11 +2107,7 @@ { "cell_type": "code", "execution_count": 57, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -2460,10 +2137,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Note that the latent loss is computed differently in this second variant:" ] @@ -2472,9 +2146,7 @@ "cell_type": "code", "execution_count": 58, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [ @@ -2484,20 +2156,14 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "## Encode & Decode" ] }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Encode:" ] @@ -2505,11 +2171,7 @@ { "cell_type": "code", "execution_count": 59, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -2531,10 +2193,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Decode:" ] @@ -2542,11 +2201,7 @@ { "cell_type": "code", "execution_count": 60, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -2564,10 +2219,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Let's plot the reconstructions:" ] @@ -2575,11 +2227,7 @@ { "cell_type": "code", "execution_count": 61, - "metadata": { - "collapsed": false, - "deletable": true, - "editable": true - }, + "metadata": {}, "outputs": [ { "data": { @@ -2603,10 +2251,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "## Interpolate digits" ] @@ -2615,9 +2260,6 @@ "cell_type": "code", "execution_count": 62, "metadata": { - "collapsed": false, - "deletable": true, - "editable": true, "scrolled": true }, "outputs": [ @@ -2690,9 +2332,7 @@ { "cell_type": "markdown", "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "source": [ "# Exercise solutions" @@ -2700,10 +2340,7 @@ }, { "cell_type": "markdown", - "metadata": { - "deletable": true, - "editable": true - }, + "metadata": {}, "source": [ "Coming soon..." ] @@ -2712,9 +2349,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, - "deletable": true, - "editable": true + "collapsed": true }, "outputs": [], "source": [] @@ -2736,7 +2371,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.5.2" }, "nav_menu": { "height": "381px",