From 0bd46010306bc8a06bfa119da292448315eda2b0 Mon Sep 17 00:00:00 2001
From: Jean-Luc Parouty <Jean-Luc.Parouty@grenoble-inp.fr>
Date: Sat, 19 Dec 2020 18:29:35 +0100
Subject: [PATCH] Update notebooks for continous integration

---
 VAE/01-VAE-with-MNIST.nbconvert.ipynb | 429 +++++++++++++-------------
 VAE/modules/vae.py                    |  22 +-
 fidle/log/finished.json               |   6 +
 3 files changed, 228 insertions(+), 229 deletions(-)

diff --git a/VAE/01-VAE-with-MNIST.nbconvert.ipynb b/VAE/01-VAE-with-MNIST.nbconvert.ipynb
index d5a02ba..6075916 100644
--- a/VAE/01-VAE-with-MNIST.nbconvert.ipynb
+++ b/VAE/01-VAE-with-MNIST.nbconvert.ipynb
@@ -51,12 +51,109 @@
    "execution_count": 1,
    "metadata": {},
    "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<style>\n",
+       "\n",
+       "div.warn {    \n",
+       "    background-color: #fcf2f2;\n",
+       "    border-color: #dFb5b4;\n",
+       "    border-left: 5px solid #dfb5b4;\n",
+       "    padding: 0.5em;\n",
+       "    font-weight: bold;\n",
+       "    font-size: 1.1em;;\n",
+       "    }\n",
+       "\n",
+       "\n",
+       "\n",
+       "div.nota {    \n",
+       "    background-color: #DAFFDE;\n",
+       "    border-left: 5px solid #92CC99;\n",
+       "    padding: 0.5em;\n",
+       "    }\n",
+       "\n",
+       "div.todo:before { content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1My44OTEyIiBoZWlnaHQ9IjE0My4zOTAyIiB2aWV3Qm94PSIwIDAgNTMuODkxMiAxNDMuMzkwMiI+PHRpdGxlPjAwLUJvYi10b2RvPC90aXRsZT48cGF0aCBkPSJNMjMuNDU2OCwxMTQuMzAxNmExLjgwNjMsMS44MDYzLDAsMSwxLDEuODE1NywxLjgyNEExLjgyMDksMS44MjA5LDAsMCwxLDIzLjQ1NjgsMTE0LjMwMTZabS0xMC42NjEyLDEuODIyQTEuODI3MiwxLjgyNzIsMCwxLDAsMTAuOTgsMTE0LjMsMS44MiwxLjgyLDAsMCwwLDEyLjc5NTYsMTE2LjEyMzZabS03LjcwNyw0LjU4NzR2LTVzLjQ4NjMtOS4xMjIzLDguMDIxNS0xMS45Njc1YTE5LjIwODIsMTkuMjA4MiwwLDAsMSw2LjA0ODYtMS4yNDU0LDE5LjE3NzgsMTkuMTc3OCwwLDAsMSw2LjA0ODcsMS4yNDc1YzcuNTM1MSwyLjgzNDcsOC4wMTc0LDExLjk2NzQsOC4wMTc0LDExLjk2NzR2NS4wMjM0bC4wMDQyLDcuNjgydjIuNGMuMDE2Ny4xOTkyLjAzMzYuMzkyMS4wMzM2LjU4NzEsMCwuMjEzOC0uMDE2OC40MTA5LS4wMzM2LjYzMzJ2LjA1ODdoLS4wMDg0YTguMzcxOSw4LjM3MTksMCwwLDEtNy4zNzM4LDcuNjU0N3MtLjk5NTMsMy42MzgtNi42OTMzLDMuNjM4LTYuNjkzNC0zLjYzOC02LjY5MzQtMy42MzhhOC4zNyw4LjM3LDAsMCwxLTcuMzcxNi03LjY1NDdINS4wODQzdi0uMDU4N2MtLjAxODktLjIyLS4wMjk0LS40MTk0LS4wMjk0LS42MzMyLDAtLjE5MjkuMDE2Ny0uMzgzNy4wMjk0LS41ODcxdi0yLjRtMTguMDkzNy00LjA0YTEuMTU2NSwxLjE1NjUsMCwxLDAtMi4zMTI2LDAsMS4xNTY0LDEuMTU2NCwwLDEsMCwyLjMxMjYsMFptNC4wODM0LDBhMS4xNTk1LDEuMTU5NSwwLDEsMC0xLjE2MzYsMS4xN0ExLjE3NSwxLjE3NSwwLDAsMCwyNy4yNjE0LDEyNC4zNzc5Wk05LjM3MzksMTE0LjYzNWMwLDMuMTA5MywyLjQxMzIsMy4zMSwyLjQxMzIsMy4zMWExMzMuOTI0MywxMzMuOTI0MywwLDAsMCwxNC43MzQ4LDBzMi40MTExLS4xOTI5LDIuNDExMS0zLjMxYTguMDc3Myw4LjA3NzMsMCwwLDAtMi40MTExLTUuNTUxOWMtNC41LTMuNTAzMy05LjkxMjYtMy41MDMzLTE0Ljc0MTEsMEE4LjA4NTEsOC4wODUxLDAsMCwwLDkuMzczOSwxMTQuNjM1WiIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxjaXJjbGUgY3g9IjMzLjE0MzYiIGN5PSIxMjQuNTM0IiByPSIzLjgzNjMiIHN0eWxlPSJmaWxsOiMwMTAxMDEiLz48cmVjdCB4PSIzNS42NjU5IiB5PSIxMTIuOTYyNSIgd2lkdGg9IjIuMDc3IiBoZWlnaHQ9IjEwLjU0NTgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxLjYgMjQxLjExMjEpIHJvdGF0ZSgtMTU1Ljc0NikiIHN0eWxlPSJmaWxsOiMwMTAxMDEiLz48Y2lyY2xlIGN4PSIzOC44NzA0IiBjeT0iMTEzLjQyNzkiIHI9IjIuNDA4NSIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxjaXJjbGUgY3g9IjUuMjI0OCIgY3k9IjEyNC41MzQiIHI9IjMuODM2MyIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxyZWN0IHg9IjEuNDE2NCIgeT0iMTI0LjYzMDEiIHdpZHRoPSIyLjA3NyIgaGVpZ2h0PSIxMC41NDU4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0LjkwOTcgMjU5LjgwNikgcm90YXRlKC0xODApIiBzdHlsZT0iZmlsbDojMDEwMTAxIi8+PGNpcmNsZSBjeD0iMi40MDkxIiBjeT0iMTM3LjA5OTYiIHI9IjIuNDA4NSIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxwYXRoIGQ9Ik0xOC4wNTExLDEwMC4xMDY2aC0uMDE0NlYxMDIuNjFoMi4zdi0yLjQyNzlhMi40MjI5LDIuNDIyOSwwLDEsMC0yLjI4NTQtLjA3NTVaIiBzdHlsZT0iZmlsbDojMDEwMTAxIi8+PHBhdGggZD0iTTM5LjQyMTQsMjcuMjU4djEuMDVBMTEuOTQ1MiwxMS45NDUyLDAsMCwwLDQ0LjU5NTQsNS43OWEuMjQ0OS4yNDQ5LDAsMCwxLS4wMjM1LS40MjI3TDQ2Ljc1LDMuOTUxNWEuMzg5Mi4zODkyLDAsMCwxLC40MjYyLDAsMTQuODQ0MiwxNC44NDQyLDAsMCwxLTcuNzU0MywyNy4yNTkxdjEuMDY3YS40NS40NSwwLDAsMS0uNzA0Ny4zNzU4bC0zLjg0MTktMi41MWEuNDUuNDUsMCwwLDEsMC0uNzUxNmwzLjg0MTktMi41MWEuNDUuNDUsMCwwLDEsLjY5NDYuMzc1OFpNNDMuMjMsMi41ODkyLDM5LjM4NzguMDc5NGEuNDUuNDUsMCwwLDAtLjcwNDYuMzc1OHYxLjA2N2ExNC44NDQyLDE0Ljg0NDIsMCwwLDAtNy43NTQzLDI3LjI1OTEuMzg5LjM4OSwwLDAsMCwuNDI2MSwwbDIuMTc3Ny0xLjQxOTNhLjI0NS4yNDUsMCwwLDAtLjAyMzUtLjQyMjgsMTEuOTQ1MSwxMS45NDUxLDAsMCwxLDUuMTc0LTIyLjUxNDZ2MS4wNWEuNDUuNDUsMCwwLDAsLjcwNDYuMzc1OGwzLjg1NTMtMi41MWEuNDUuNDUsMCwwLDAsMC0uNzUxNlpNMzkuMDUyMywxNC4yNDU4YTIuMTIwNiwyLjEyMDYsMCwxLDAsMi4xMjA2LDIuMTIwNmgwQTIuMTI0LDIuMTI0LDAsMCwwLDM5LjA1MjMsMTQuMjQ1OFptNi4wNzMyLTQuNzc4MS44MjU0LjgyNTVhMS4wNTY4LDEuMDU2OCwwLDAsMSwuMTE3NSwxLjM0MjFsLS44MDIsMS4xNDQyYTcuMTAxOCw3LjEwMTgsMCwwLDEsLjcxMTQsMS43MTEybDEuMzc1Ny4yNDE2YTEuMDU2OSwxLjA1NjksMCwwLDEsLjg3NTcsMS4wNHYxLjE2NDNhMS4wNTY5LDEuMDU2OSwwLDAsMS0uODc1NywxLjA0bC0xLjM3MjQuMjQxNkE3LjExLDcuMTEsMCwwLDEsNDUuMjcsMTkuOTNsLjgwMTksMS4xNDQyYTEuMDU3LDEuMDU3LDAsMCwxLS4xMTc0LDEuMzQyMmwtLjgyODguODQ4OWExLjA1NywxLjA1NywwLDAsMS0xLjM0MjEuMTE3NGwtMS4xNDQyLS44MDE5YTcuMTMzOCw3LjEzMzgsMCwwLDEtMS43MTEzLjcxMTNsLS4yNDE2LDEuMzcyNGExLjA1NjgsMS4wNTY4LDAsMCwxLTEuMDQuODc1N0gzOC40Njg0YTEuMDU2OCwxLjA1NjgsMCwwLDEtMS4wNC0uODc1N2wtLjI0MTYtMS4zNzI0YTcuMTM1NSw3LjEzNTUsMCwwLDEtMS43MTEzLS43MTEzbC0xLjE0NDEuODAxOWExLjA1NzEsMS4wNTcxLDAsMCwxLTEuMzQyMi0uMTE3NGwtLjgzNTUtLjgyNTVhMS4wNTcsMS4wNTcsMCwwLDEtLjExNzQtMS4zNDIxbC44MDE5LTEuMTQ0MmE3LjEyMSw3LjEyMSwwLDAsMS0uNzExMy0xLjcxMTJsLTEuMzcyNC0uMjQxNmExLjA1NjksMS4wNTY5LDAsMCwxLS44NzU3LTEuMDRWMTUuNzgyNmExLjA1NjksMS4wNTY5LDAsMCwxLC44NzU3LTEuMDRsMS4zNzU3LS4yNDE2YTcuMTEsNy4xMSwwLDAsMSwuNzExNC0xLjcxMTJsLS44MDItMS4xNDQyYTEuMDU3LDEuMDU3LDAsMCwxLC4xMTc1LTEuMzQyMmwuODI1NC0uODI1NEExLjA1NjgsMS4wNTY4LDAsMCwxLDM0LjMyNDUsOS4zNmwxLjE0NDIuODAxOUE3LjEzNTUsNy4xMzU1LDAsMCwxLDM3LjE4LDkuNDUxbC4yNDE2LTEuMzcyNGExLjA1NjgsMS4wNTY4LDAsMCwxLDEuMDQtLjg3NTdoMS4xNjc3YTEuMDU2OSwxLjA1NjksMCwwLDEsMS4wNC44NzU3bC4yNDE2LDEuMzcyNGE3LjEyNSw3LjEyNSwwLDAsMSwxLjcxMTIuNzExM0w0My43NjY2LDkuMzZBMS4wNTY5LDEuMDU2OSwwLDAsMSw0NS4xMjU1LDkuNDY3N1ptLTIuMDMsNi44OTg3QTQuMDQzMyw0LjA0MzMsMCwxLDAsMzkuMDUyMywyMC40MWgwQTQuMDQ2NSw0LjA0NjUsMCwwLDAsNDMuMDk1NSwxNi4zNjY0WiIgc3R5bGU9ImZpbGw6I2UxMjIyOSIvPjxwb2x5Z29uIHBvaW50cz0iMzkuNDEzIDM0Ljc1NyAzOS41MzcgMzQuNzU3IDM5LjY3NSAzNC43NTcgMzkuNjc1IDEwOS41MSAzOS41MzcgMTA5LjUxIDM5LjQxMyAxMDkuNTEgMzkuNDEzIDM0Ljc1NyAzOS40MTMgMzQuNzU3IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojOTk5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjMwODg1NDQ1MDU2MDE2MThweDtmaWxsLXJ1bGU6ZXZlbm9kZCIvPjwvc3ZnPg==);\n",
+       "    float:left;\n",
+       "    margin-right:20px;\n",
+       "    margin-top:-20px;\n",
+       "    margin-bottom:20px;\n",
+       "}\n",
+       "div.todo{\n",
+       "    font-weight: bold;\n",
+       "    font-size: 1.1em;\n",
+       "    margin-top:40px;\n",
+       "}\n",
+       "div.todo ul{\n",
+       "    margin: 0.2em;\n",
+       "}\n",
+       "div.todo li{\n",
+       "    margin-left:60px;\n",
+       "    margin-top:0;\n",
+       "    margin-bottom:0;\n",
+       "}\n",
+       "\n",
+       "div .comment{\n",
+       "    font-size:0.8em;\n",
+       "    color:#696969;\n",
+       "}\n",
+       "\n",
+       "\n",
+       "\n",
+       "</style>\n",
+       "\n"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "**FIDLE 2020 - Practical Work Module**"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Version              : 0.6.1 DEV\n",
+      "Notebook id          : VAE1\n",
+      "Run time             : Saturday 19 December 2020, 17:56:34\n",
+      "TensorFlow version   : 2.0.0\n",
+      "Keras version        : 2.2.4-tf\n",
+      "Datasets dir         : /home/pjluc/datasets/fidle\n",
+      "Running mode         : full\n",
+      "Update keras cache   : False\n",
+      "Save figs            : True\n",
+      "Path figs            : ./run/figs\n"
+     ]
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "<br>**FIDLE 2020 - Variational AutoEncoder (VAE)**"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "\n",
-      "FIDLE 2020 - Variational AutoEncoder (VAE)\n",
       "TensorFlow version   : 2.0.0\n",
       "VAE version          : 1.28\n"
      ]
@@ -66,12 +163,14 @@
     "import numpy as np\n",
     "import sys, importlib\n",
     "\n",
-    "import modules.vae\n",
-    "import modules.loader_MNIST\n",
+    "sys.path.append('..')\n",
+    "import fidle.pwk as pwk\n",
     "\n",
     "from modules.vae          import VariationalAutoencoder\n",
     "from modules.loader_MNIST import Loader_MNIST\n",
     "\n",
+    "datasets_dirs = pwk.init('VAE1')\n",
+    "\n",
     "VariationalAutoencoder.about()"
    ]
   },
@@ -117,15 +216,41 @@
    "execution_count": 3,
    "metadata": {},
    "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "<br>**Model initialized.**"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Outputs will be in  : ./run/MNIST.001\n"
+     ]
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "<br>**Encoder :**"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Model initialized.\n",
-      "Outputs will be in  : ./run/MNIST.001\n",
-      "\n",
-      " ---------- Encoder -------------------------------------------------- \n",
-      "\n",
       "Model: \"model_1\"\n",
       "__________________________________________________________________________________________________\n",
       "Layer (type)                    Output Shape         Param #     Connected to                     \n",
@@ -152,10 +277,25 @@
       "Total params: 105,220\n",
       "Trainable params: 105,220\n",
       "Non-trainable params: 0\n",
-      "__________________________________________________________________________________________________\n",
-      "\n",
-      " ---------- Encoder -------------------------------------------------- \n",
-      "\n",
+      "__________________________________________________________________________________________________\n"
+     ]
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "<br>**Decoder :**"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
       "Model: \"model_2\"\n",
       "_________________________________________________________________\n",
       "Layer (type)                 Output Shape              Param #   \n",
@@ -178,9 +318,7 @@
       "Trainable params: 102,017\n",
       "Non-trainable params: 0\n",
       "_________________________________________________________________\n",
-      "Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.\n",
-      "Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.\n",
-      "Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.\n",
+      "\n",
       "Config saved in     : ./run/MNIST.001/models/vae_config.json\n"
      ]
     }
@@ -204,12 +342,12 @@
     "           {'type':'Conv2DTranspose', 'filters':1,  'kernel_size':(3,3), 'strides':1, 'padding':'same', 'activation':'sigmoid'}\n",
     "         ]\n",
     "\n",
-    "vae = modules.vae.VariationalAutoencoder(input_shape    = input_shape, \n",
-    "                                         encoder_layers = encoder, \n",
-    "                                         decoder_layers = decoder,\n",
-    "                                         z_dim          = z_dim, \n",
-    "                                         verbose        = verbose,\n",
-    "                                         run_tag        = tag)\n",
+    "vae = VariationalAutoencoder(input_shape    = input_shape, \n",
+    "                             encoder_layers = encoder, \n",
+    "                             decoder_layers = decoder,\n",
+    "                             z_dim          = z_dim, \n",
+    "                             verbose        = verbose,\n",
+    "                             run_tag        = tag)\n",
     "vae.save(model=None)"
    ]
   },
@@ -257,7 +395,7 @@
     "batch_size        = 100\n",
     "epochs            = 100\n",
     "initial_epoch     = 0\n",
-    "k_size            = 1      # 1 mean using 100% of the dataset"
+    "k_size            = .1      # 1 mean using 100% of the dataset"
    ]
   },
   {
@@ -269,210 +407,42 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Train on 60000 samples, validate on 10000 samples\n",
+      "Train on 6000 samples, validate on 1000 samples\n",
       "Epoch 1/100\n",
-      "  100/60000 [..............................] - ETA: 23:20 - loss: 231.3020 - vae_r_loss: 231.3009 - vae_kl_loss: 0.0012WARNING:tensorflow:Method (on_train_batch_end) is slow compared to the batch update (0.204730). Check your callbacks.\n",
-      "60000/60000 [==============================] - 7s 115us/sample - loss: 64.2543 - vae_r_loss: 61.7709 - vae_kl_loss: 2.4833 - val_loss: 52.9003 - val_vae_r_loss: 49.1967 - val_vae_kl_loss: 3.7036\n",
+      "6000/6000 [==============================] - 6s 988us/sample - loss: 104.4901 - vae_r_loss: 101.9539 - vae_kl_loss: 2.5361 - val_loss: 67.7148 - val_vae_r_loss: 66.5085 - val_vae_kl_loss: 1.2063\n",
       "Epoch 2/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 51.2057 - vae_r_loss: 47.0966 - vae_kl_loss: 4.1091 - val_loss: 49.8133 - val_vae_r_loss: 45.4482 - val_vae_kl_loss: 4.3652\n",
+      "6000/6000 [==============================] - 5s 841us/sample - loss: 69.0901 - vae_r_loss: 68.0103 - vae_kl_loss: 1.0798 - val_loss: 64.4509 - val_vae_r_loss: 62.6715 - val_vae_kl_loss: 1.7794\n",
       "Epoch 3/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 49.1852 - vae_r_loss: 44.6769 - vae_kl_loss: 4.5083 - val_loss: 48.4312 - val_vae_r_loss: 43.8612 - val_vae_kl_loss: 4.5701\n",
+      "6000/6000 [==============================] - 5s 841us/sample - loss: 64.8233 - vae_r_loss: 63.1682 - vae_kl_loss: 1.6551 - val_loss: 59.2293 - val_vae_r_loss: 56.8333 - val_vae_kl_loss: 2.3960\n",
       "Epoch 4/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 48.0964 - vae_r_loss: 43.4097 - vae_kl_loss: 4.6867 - val_loss: 48.0231 - val_vae_r_loss: 43.2757 - val_vae_kl_loss: 4.7474\n",
+      "6000/6000 [==============================] - 5s 838us/sample - loss: 59.9215 - vae_r_loss: 57.2821 - vae_kl_loss: 2.6394 - val_loss: 56.9929 - val_vae_r_loss: 54.2415 - val_vae_kl_loss: 2.7514\n",
       "Epoch 5/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 47.3871 - vae_r_loss: 42.5845 - vae_kl_loss: 4.8026 - val_loss: 47.2221 - val_vae_r_loss: 42.6021 - val_vae_kl_loss: 4.6200\n",
+      "6000/6000 [==============================] - 5s 889us/sample - loss: 58.3423 - vae_r_loss: 55.4671 - vae_kl_loss: 2.8752 - val_loss: 56.2066 - val_vae_r_loss: 53.4385 - val_vae_kl_loss: 2.7681\n",
       "Epoch 6/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 46.8934 - vae_r_loss: 41.9934 - vae_kl_loss: 4.9000 - val_loss: 46.9390 - val_vae_r_loss: 41.8111 - val_vae_kl_loss: 5.1278\n",
+      "6000/6000 [==============================] - 6s 951us/sample - loss: 57.2656 - vae_r_loss: 54.1724 - vae_kl_loss: 3.0932 - val_loss: 54.8276 - val_vae_r_loss: 51.0939 - val_vae_kl_loss: 3.7337\n",
       "Epoch 7/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 46.4743 - vae_r_loss: 41.4820 - vae_kl_loss: 4.9924 - val_loss: 46.2958 - val_vae_r_loss: 41.2182 - val_vae_kl_loss: 5.0776\n",
-      "Epoch 8/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 46.1191 - vae_r_loss: 41.0788 - vae_kl_loss: 5.0403 - val_loss: 46.2291 - val_vae_r_loss: 41.0391 - val_vae_kl_loss: 5.1900\n",
-      "Epoch 9/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 45.7910 - vae_r_loss: 40.7070 - vae_kl_loss: 5.0840 - val_loss: 45.9437 - val_vae_r_loss: 40.7491 - val_vae_kl_loss: 5.1946\n",
-      "Epoch 10/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 45.5396 - vae_r_loss: 40.3924 - vae_kl_loss: 5.1471 - val_loss: 45.9343 - val_vae_r_loss: 40.7377 - val_vae_kl_loss: 5.1966\n",
-      "Epoch 11/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 45.2789 - vae_r_loss: 40.0885 - vae_kl_loss: 5.1904 - val_loss: 45.4758 - val_vae_r_loss: 40.3435 - val_vae_kl_loss: 5.1323\n",
-      "Epoch 12/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 45.1051 - vae_r_loss: 39.8695 - vae_kl_loss: 5.2355 - val_loss: 45.4878 - val_vae_r_loss: 40.1696 - val_vae_kl_loss: 5.3181\n",
-      "Epoch 13/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 44.8887 - vae_r_loss: 39.6061 - vae_kl_loss: 5.2826 - val_loss: 45.1749 - val_vae_r_loss: 39.8426 - val_vae_kl_loss: 5.3323\n",
-      "Epoch 14/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 44.7158 - vae_r_loss: 39.3846 - vae_kl_loss: 5.3312 - val_loss: 45.0787 - val_vae_r_loss: 39.6166 - val_vae_kl_loss: 5.4621\n",
-      "Epoch 15/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 44.5586 - vae_r_loss: 39.2236 - vae_kl_loss: 5.3350 - val_loss: 44.8298 - val_vae_r_loss: 39.6147 - val_vae_kl_loss: 5.2150\n",
-      "Epoch 16/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 44.3802 - vae_r_loss: 39.0108 - vae_kl_loss: 5.3694 - val_loss: 44.6618 - val_vae_r_loss: 39.2968 - val_vae_kl_loss: 5.3649\n",
-      "Epoch 17/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 44.2723 - vae_r_loss: 38.8741 - vae_kl_loss: 5.3981 - val_loss: 44.8400 - val_vae_r_loss: 39.4563 - val_vae_kl_loss: 5.3837\n",
-      "Epoch 18/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 44.1674 - vae_r_loss: 38.7606 - vae_kl_loss: 5.4068 - val_loss: 44.7985 - val_vae_r_loss: 39.3888 - val_vae_kl_loss: 5.4097\n",
-      "Epoch 19/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 44.0322 - vae_r_loss: 38.5949 - vae_kl_loss: 5.4373 - val_loss: 44.6795 - val_vae_r_loss: 39.3680 - val_vae_kl_loss: 5.3115\n",
-      "Epoch 20/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 43.9153 - vae_r_loss: 38.4687 - vae_kl_loss: 5.4466 - val_loss: 44.5306 - val_vae_r_loss: 39.0573 - val_vae_kl_loss: 5.4733\n",
-      "Epoch 21/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 43.8438 - vae_r_loss: 38.3777 - vae_kl_loss: 5.4661 - val_loss: 44.5254 - val_vae_r_loss: 39.0821 - val_vae_kl_loss: 5.4433\n",
-      "Epoch 22/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 43.7249 - vae_r_loss: 38.2270 - vae_kl_loss: 5.4978 - val_loss: 44.4218 - val_vae_r_loss: 38.9123 - val_vae_kl_loss: 5.5095\n",
-      "Epoch 23/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 43.6932 - vae_r_loss: 38.1905 - vae_kl_loss: 5.5027 - val_loss: 44.7400 - val_vae_r_loss: 39.4295 - val_vae_kl_loss: 5.3105\n",
-      "Epoch 24/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 43.6025 - vae_r_loss: 38.0754 - vae_kl_loss: 5.5271 - val_loss: 44.1321 - val_vae_r_loss: 38.5209 - val_vae_kl_loss: 5.6112\n",
-      "Epoch 25/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 43.4873 - vae_r_loss: 37.9447 - vae_kl_loss: 5.5426 - val_loss: 44.4036 - val_vae_r_loss: 38.8846 - val_vae_kl_loss: 5.5190\n",
-      "Epoch 26/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 43.3999 - vae_r_loss: 37.8558 - vae_kl_loss: 5.5441 - val_loss: 44.2643 - val_vae_r_loss: 38.8511 - val_vae_kl_loss: 5.4132\n",
-      "Epoch 27/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 43.3879 - vae_r_loss: 37.8274 - vae_kl_loss: 5.5606 - val_loss: 44.1832 - val_vae_r_loss: 38.7677 - val_vae_kl_loss: 5.4155\n",
-      "Epoch 28/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 43.2868 - vae_r_loss: 37.7082 - vae_kl_loss: 5.5785 - val_loss: 44.3540 - val_vae_r_loss: 38.8401 - val_vae_kl_loss: 5.5138\n",
-      "Epoch 29/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 43.1959 - vae_r_loss: 37.6151 - vae_kl_loss: 5.5807 - val_loss: 44.1458 - val_vae_r_loss: 38.7440 - val_vae_kl_loss: 5.4018\n",
-      "Epoch 30/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 43.2025 - vae_r_loss: 37.6125 - vae_kl_loss: 5.5900 - val_loss: 44.0534 - val_vae_r_loss: 38.6051 - val_vae_kl_loss: 5.4484\n",
-      "Epoch 31/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 43.1147 - vae_r_loss: 37.4968 - vae_kl_loss: 5.6179 - val_loss: 44.0018 - val_vae_r_loss: 38.4451 - val_vae_kl_loss: 5.5567\n",
-      "Epoch 32/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 43.0382 - vae_r_loss: 37.4231 - vae_kl_loss: 5.6151 - val_loss: 44.0717 - val_vae_r_loss: 38.4346 - val_vae_kl_loss: 5.6371\n",
-      "Epoch 33/100\n",
-      "60000/60000 [==============================] - 4s 67us/sample - loss: 43.0075 - vae_r_loss: 37.3852 - vae_kl_loss: 5.6223 - val_loss: 43.9579 - val_vae_r_loss: 38.3620 - val_vae_kl_loss: 5.5959\n",
-      "Epoch 34/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.9493 - vae_r_loss: 37.3046 - vae_kl_loss: 5.6447 - val_loss: 43.9678 - val_vae_r_loss: 38.6328 - val_vae_kl_loss: 5.3351\n",
-      "Epoch 35/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.8854 - vae_r_loss: 37.2427 - vae_kl_loss: 5.6427 - val_loss: 44.0184 - val_vae_r_loss: 38.2289 - val_vae_kl_loss: 5.7894\n",
-      "Epoch 36/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 42.8633 - vae_r_loss: 37.2043 - vae_kl_loss: 5.6590 - val_loss: 43.9505 - val_vae_r_loss: 38.4289 - val_vae_kl_loss: 5.5216\n",
-      "Epoch 37/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.8121 - vae_r_loss: 37.1433 - vae_kl_loss: 5.6688 - val_loss: 44.0720 - val_vae_r_loss: 38.3158 - val_vae_kl_loss: 5.7562\n",
-      "Epoch 38/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 42.7729 - vae_r_loss: 37.0933 - vae_kl_loss: 5.6796 - val_loss: 43.9354 - val_vae_r_loss: 38.2530 - val_vae_kl_loss: 5.6825\n",
-      "Epoch 39/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.7009 - vae_r_loss: 37.0158 - vae_kl_loss: 5.6851 - val_loss: 43.9757 - val_vae_r_loss: 38.3211 - val_vae_kl_loss: 5.6547\n",
-      "Epoch 40/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.6597 - vae_r_loss: 36.9727 - vae_kl_loss: 5.6870 - val_loss: 43.9979 - val_vae_r_loss: 38.3241 - val_vae_kl_loss: 5.6738\n",
-      "Epoch 41/100\n",
-      "60000/60000 [==============================] - 4s 66us/sample - loss: 42.6643 - vae_r_loss: 36.9573 - vae_kl_loss: 5.7070 - val_loss: 43.8959 - val_vae_r_loss: 38.0727 - val_vae_kl_loss: 5.8232\n",
-      "Epoch 42/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 42.6094 - vae_r_loss: 36.9091 - vae_kl_loss: 5.7003 - val_loss: 43.7527 - val_vae_r_loss: 38.0132 - val_vae_kl_loss: 5.7396\n",
-      "Epoch 43/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.5943 - vae_r_loss: 36.8753 - vae_kl_loss: 5.7190 - val_loss: 44.2513 - val_vae_r_loss: 38.7346 - val_vae_kl_loss: 5.5166\n",
-      "Epoch 44/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.5383 - vae_r_loss: 36.8210 - vae_kl_loss: 5.7174 - val_loss: 43.9450 - val_vae_r_loss: 38.3041 - val_vae_kl_loss: 5.6410\n",
-      "Epoch 45/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.4976 - vae_r_loss: 36.7647 - vae_kl_loss: 5.7328 - val_loss: 43.8147 - val_vae_r_loss: 38.0132 - val_vae_kl_loss: 5.8015\n",
-      "Epoch 46/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.4661 - vae_r_loss: 36.7304 - vae_kl_loss: 5.7358 - val_loss: 43.7803 - val_vae_r_loss: 37.9472 - val_vae_kl_loss: 5.8331\n",
-      "Epoch 47/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.4550 - vae_r_loss: 36.7013 - vae_kl_loss: 5.7537 - val_loss: 43.7559 - val_vae_r_loss: 37.9233 - val_vae_kl_loss: 5.8325\n",
-      "Epoch 48/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.4446 - vae_r_loss: 36.6954 - vae_kl_loss: 5.7491 - val_loss: 43.8857 - val_vae_r_loss: 38.3286 - val_vae_kl_loss: 5.5571\n",
-      "Epoch 49/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 42.3392 - vae_r_loss: 36.5929 - vae_kl_loss: 5.7463 - val_loss: 43.7458 - val_vae_r_loss: 38.0185 - val_vae_kl_loss: 5.7273\n",
-      "Epoch 50/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.3563 - vae_r_loss: 36.5882 - vae_kl_loss: 5.7680 - val_loss: 43.8635 - val_vae_r_loss: 38.3168 - val_vae_kl_loss: 5.5467\n",
-      "Epoch 51/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.2795 - vae_r_loss: 36.5151 - vae_kl_loss: 5.7644 - val_loss: 43.8254 - val_vae_r_loss: 38.0452 - val_vae_kl_loss: 5.7802\n",
-      "Epoch 52/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 42.2664 - vae_r_loss: 36.5060 - vae_kl_loss: 5.7604 - val_loss: 43.6070 - val_vae_r_loss: 37.8889 - val_vae_kl_loss: 5.7181\n",
-      "Epoch 53/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.2173 - vae_r_loss: 36.4402 - vae_kl_loss: 5.7771 - val_loss: 43.8760 - val_vae_r_loss: 38.1647 - val_vae_kl_loss: 5.7113\n",
-      "Epoch 54/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.2542 - vae_r_loss: 36.4783 - vae_kl_loss: 5.7759 - val_loss: 43.7798 - val_vae_r_loss: 38.0381 - val_vae_kl_loss: 5.7416\n",
-      "Epoch 55/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.1756 - vae_r_loss: 36.3872 - vae_kl_loss: 5.7884 - val_loss: 43.6665 - val_vae_r_loss: 37.7873 - val_vae_kl_loss: 5.8791\n",
-      "Epoch 56/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.1478 - vae_r_loss: 36.3798 - vae_kl_loss: 5.7681 - val_loss: 43.8873 - val_vae_r_loss: 38.0000 - val_vae_kl_loss: 5.8872\n",
-      "Epoch 57/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.1221 - vae_r_loss: 36.3316 - vae_kl_loss: 5.7905 - val_loss: 43.7110 - val_vae_r_loss: 37.9034 - val_vae_kl_loss: 5.8076\n",
-      "Epoch 58/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.1140 - vae_r_loss: 36.3114 - vae_kl_loss: 5.8026 - val_loss: 43.7163 - val_vae_r_loss: 37.9340 - val_vae_kl_loss: 5.7824\n",
-      "Epoch 59/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.0872 - vae_r_loss: 36.2736 - vae_kl_loss: 5.8136 - val_loss: 43.6869 - val_vae_r_loss: 37.8728 - val_vae_kl_loss: 5.8141\n",
-      "Epoch 60/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.0810 - vae_r_loss: 36.2625 - vae_kl_loss: 5.8184 - val_loss: 43.7259 - val_vae_r_loss: 37.9156 - val_vae_kl_loss: 5.8103\n",
-      "Epoch 61/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.0468 - vae_r_loss: 36.2302 - vae_kl_loss: 5.8166 - val_loss: 43.7498 - val_vae_r_loss: 37.8267 - val_vae_kl_loss: 5.9231\n",
-      "Epoch 62/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 42.0145 - vae_r_loss: 36.1916 - vae_kl_loss: 5.8229 - val_loss: 43.7140 - val_vae_r_loss: 37.8304 - val_vae_kl_loss: 5.8835\n",
-      "Epoch 63/100\n",
-      "60000/60000 [==============================] - 4s 67us/sample - loss: 42.0032 - vae_r_loss: 36.1780 - vae_kl_loss: 5.8252 - val_loss: 43.7475 - val_vae_r_loss: 37.8840 - val_vae_kl_loss: 5.8635\n",
-      "Epoch 64/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.9338 - vae_r_loss: 36.1049 - vae_kl_loss: 5.8289 - val_loss: 43.6136 - val_vae_r_loss: 37.8724 - val_vae_kl_loss: 5.7413\n",
-      "Epoch 65/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.9362 - vae_r_loss: 36.1025 - vae_kl_loss: 5.8337 - val_loss: 43.6487 - val_vae_r_loss: 37.8507 - val_vae_kl_loss: 5.7980\n",
-      "Epoch 66/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 41.8900 - vae_r_loss: 36.0639 - vae_kl_loss: 5.8261 - val_loss: 43.5734 - val_vae_r_loss: 37.7662 - val_vae_kl_loss: 5.8072\n",
-      "Epoch 67/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.8897 - vae_r_loss: 36.0485 - vae_kl_loss: 5.8413 - val_loss: 43.5914 - val_vae_r_loss: 37.8426 - val_vae_kl_loss: 5.7488\n",
-      "Epoch 68/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.8992 - vae_r_loss: 36.0566 - vae_kl_loss: 5.8426 - val_loss: 43.5969 - val_vae_r_loss: 37.8075 - val_vae_kl_loss: 5.7893\n",
-      "Epoch 69/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.8573 - vae_r_loss: 36.0016 - vae_kl_loss: 5.8557 - val_loss: 43.8489 - val_vae_r_loss: 38.0409 - val_vae_kl_loss: 5.8079\n",
-      "Epoch 70/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.8076 - vae_r_loss: 35.9602 - vae_kl_loss: 5.8474 - val_loss: 43.6968 - val_vae_r_loss: 37.9238 - val_vae_kl_loss: 5.7730\n",
-      "Epoch 71/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.8028 - vae_r_loss: 35.9475 - vae_kl_loss: 5.8553 - val_loss: 43.7155 - val_vae_r_loss: 38.1099 - val_vae_kl_loss: 5.6056\n",
-      "Epoch 72/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.8149 - vae_r_loss: 35.9601 - vae_kl_loss: 5.8548 - val_loss: 43.7084 - val_vae_r_loss: 37.9777 - val_vae_kl_loss: 5.7306\n",
-      "Epoch 73/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.7663 - vae_r_loss: 35.8984 - vae_kl_loss: 5.8679 - val_loss: 43.7315 - val_vae_r_loss: 37.8491 - val_vae_kl_loss: 5.8824\n",
-      "Epoch 74/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.7511 - vae_r_loss: 35.8783 - vae_kl_loss: 5.8727 - val_loss: 43.6386 - val_vae_r_loss: 37.8350 - val_vae_kl_loss: 5.8036\n",
-      "Epoch 75/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.7247 - vae_r_loss: 35.8505 - vae_kl_loss: 5.8741 - val_loss: 43.5769 - val_vae_r_loss: 37.8107 - val_vae_kl_loss: 5.7661\n",
-      "Epoch 76/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.7198 - vae_r_loss: 35.8361 - vae_kl_loss: 5.8838 - val_loss: 43.5807 - val_vae_r_loss: 37.8855 - val_vae_kl_loss: 5.6952\n",
-      "Epoch 77/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.7191 - vae_r_loss: 35.8425 - vae_kl_loss: 5.8766 - val_loss: 43.6381 - val_vae_r_loss: 37.8796 - val_vae_kl_loss: 5.7585\n",
-      "Epoch 78/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.6607 - vae_r_loss: 35.7753 - vae_kl_loss: 5.8853 - val_loss: 43.5942 - val_vae_r_loss: 37.8272 - val_vae_kl_loss: 5.7670\n",
-      "Epoch 79/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.6496 - vae_r_loss: 35.7729 - vae_kl_loss: 5.8767 - val_loss: 43.5868 - val_vae_r_loss: 37.6704 - val_vae_kl_loss: 5.9164\n",
-      "Epoch 80/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.6863 - vae_r_loss: 35.7959 - vae_kl_loss: 5.8904 - val_loss: 43.6931 - val_vae_r_loss: 37.7754 - val_vae_kl_loss: 5.9177\n",
-      "Epoch 81/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.6309 - vae_r_loss: 35.7477 - vae_kl_loss: 5.8832 - val_loss: 43.7312 - val_vae_r_loss: 37.8486 - val_vae_kl_loss: 5.8826\n",
-      "Epoch 82/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 41.6640 - vae_r_loss: 35.7682 - vae_kl_loss: 5.8958 - val_loss: 43.4520 - val_vae_r_loss: 37.5032 - val_vae_kl_loss: 5.9488\n",
-      "Epoch 83/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.6302 - vae_r_loss: 35.7293 - vae_kl_loss: 5.9009 - val_loss: 43.7112 - val_vae_r_loss: 37.9028 - val_vae_kl_loss: 5.8084\n",
-      "Epoch 84/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.6229 - vae_r_loss: 35.7291 - vae_kl_loss: 5.8938 - val_loss: 43.6432 - val_vae_r_loss: 37.7486 - val_vae_kl_loss: 5.8945\n",
-      "Epoch 85/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.5947 - vae_r_loss: 35.6854 - vae_kl_loss: 5.9093 - val_loss: 43.6102 - val_vae_r_loss: 37.7369 - val_vae_kl_loss: 5.8733\n",
-      "Epoch 86/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 41.5378 - vae_r_loss: 35.6368 - vae_kl_loss: 5.9010 - val_loss: 43.4183 - val_vae_r_loss: 37.5776 - val_vae_kl_loss: 5.8407\n",
-      "Epoch 87/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.5435 - vae_r_loss: 35.6271 - vae_kl_loss: 5.9164 - val_loss: 43.7228 - val_vae_r_loss: 37.7464 - val_vae_kl_loss: 5.9764\n",
-      "Epoch 88/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.5234 - vae_r_loss: 35.6144 - vae_kl_loss: 5.9090 - val_loss: 43.7529 - val_vae_r_loss: 37.8977 - val_vae_kl_loss: 5.8552\n",
-      "Epoch 89/100\n",
-      "60000/60000 [==============================] - 4s 67us/sample - loss: 41.5304 - vae_r_loss: 35.6144 - vae_kl_loss: 5.9160 - val_loss: 43.7499 - val_vae_r_loss: 37.8566 - val_vae_kl_loss: 5.8934\n",
-      "Epoch 90/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.5063 - vae_r_loss: 35.5879 - vae_kl_loss: 5.9184 - val_loss: 43.7301 - val_vae_r_loss: 37.9131 - val_vae_kl_loss: 5.8170\n",
-      "Epoch 91/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.4964 - vae_r_loss: 35.5761 - vae_kl_loss: 5.9203 - val_loss: 43.6984 - val_vae_r_loss: 37.8731 - val_vae_kl_loss: 5.8253\n",
-      "Epoch 92/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.4689 - vae_r_loss: 35.5399 - vae_kl_loss: 5.9290 - val_loss: 43.4703 - val_vae_r_loss: 37.5691 - val_vae_kl_loss: 5.9012\n",
-      "Epoch 93/100\n",
-      "60000/60000 [==============================] - 4s 65us/sample - loss: 41.4461 - vae_r_loss: 35.5280 - vae_kl_loss: 5.9180 - val_loss: 43.5956 - val_vae_r_loss: 37.5976 - val_vae_kl_loss: 5.9980\n",
-      "Epoch 94/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.4367 - vae_r_loss: 35.5115 - vae_kl_loss: 5.9253 - val_loss: 43.6109 - val_vae_r_loss: 37.5420 - val_vae_kl_loss: 6.0688\n",
-      "Epoch 95/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.4046 - vae_r_loss: 35.4755 - vae_kl_loss: 5.9291 - val_loss: 43.6073 - val_vae_r_loss: 37.7104 - val_vae_kl_loss: 5.8969\n",
-      "Epoch 96/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.4297 - vae_r_loss: 35.4970 - vae_kl_loss: 5.9327 - val_loss: 43.5483 - val_vae_r_loss: 37.6635 - val_vae_kl_loss: 5.8848\n",
-      "Epoch 97/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.3969 - vae_r_loss: 35.4541 - vae_kl_loss: 5.9428 - val_loss: 43.5062 - val_vae_r_loss: 37.6395 - val_vae_kl_loss: 5.8667\n",
-      "Epoch 98/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.3957 - vae_r_loss: 35.4513 - vae_kl_loss: 5.9444 - val_loss: 43.7233 - val_vae_r_loss: 37.9261 - val_vae_kl_loss: 5.7972\n",
-      "Epoch 99/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.3839 - vae_r_loss: 35.4444 - vae_kl_loss: 5.9395 - val_loss: 43.6083 - val_vae_r_loss: 37.6019 - val_vae_kl_loss: 6.0064\n",
-      "Epoch 100/100\n",
-      "60000/60000 [==============================] - 4s 64us/sample - loss: 41.3783 - vae_r_loss: 35.4441 - vae_kl_loss: 5.9342 - val_loss: 43.6412 - val_vae_r_loss: 37.8037 - val_vae_kl_loss: 5.8375\n",
-      "\n",
-      "Train duration : 391.89 sec. - 0:06:31\n"
+      "3000/6000 [==============>...............] - ETA: 2s - loss: 56.2138 - vae_r_loss: 52.9293 - vae_kl_loss: 3.2845"
+     ]
+    },
+    {
+     "ename": "KeyboardInterrupt",
+     "evalue": "",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
+      "\u001b[0;32m<ipython-input-6-757a620922f3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      4\u001b[0m           \u001b[0mepochs\u001b[0m            \u001b[0;34m=\u001b[0m \u001b[0mepochs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m           \u001b[0minitial_epoch\u001b[0m     \u001b[0;34m=\u001b[0m \u001b[0minitial_epoch\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m           \u001b[0mk_size\u001b[0m            \u001b[0;34m=\u001b[0m \u001b[0mk_size\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      7\u001b[0m          )\n",
+      "\u001b[0;32m~/dev/fidle/VAE/modules/vae.py\u001b[0m in \u001b[0;36mtrain\u001b[0;34m(self, x_train, x_test, data_generator, batch_size, epochs, initial_epoch, k_size)\u001b[0m\n\u001b[1;32m    223\u001b[0m                                           \u001b[0minitial_epoch\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minitial_epoch\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    224\u001b[0m                                           \u001b[0mcallbacks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcallbacks_list\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 225\u001b[0;31m                                           \u001b[0mvalidation_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mx_test\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mn_test\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx_test\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mn_test\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[0m\u001b[1;32m    226\u001b[0m                                           )\n\u001b[1;32m    227\u001b[0m             \u001b[0;31m#\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m~/anaconda3/envs/fidle/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)\u001b[0m\n\u001b[1;32m    726\u001b[0m         \u001b[0mmax_queue_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmax_queue_size\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    727\u001b[0m         \u001b[0mworkers\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mworkers\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 728\u001b[0;31m         use_multiprocessing=use_multiprocessing)\n\u001b[0m\u001b[1;32m    729\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    730\u001b[0m   def evaluate(self,\n",
+      "\u001b[0;32m~/anaconda3/envs/fidle/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_arrays.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, **kwargs)\u001b[0m\n\u001b[1;32m    672\u001b[0m         \u001b[0mvalidation_steps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidation_steps\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    673\u001b[0m         \u001b[0mvalidation_freq\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidation_freq\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 674\u001b[0;31m         steps_name='steps_per_epoch')\n\u001b[0m\u001b[1;32m    675\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    676\u001b[0m   def evaluate(self,\n",
+      "\u001b[0;32m~/anaconda3/envs/fidle/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_arrays.py\u001b[0m in \u001b[0;36mmodel_iteration\u001b[0;34m(model, inputs, targets, sample_weights, batch_size, epochs, verbose, callbacks, val_inputs, val_targets, val_sample_weights, shuffle, initial_epoch, steps_per_epoch, validation_steps, validation_freq, mode, validation_in_fit, prepared_feed_values_from_dataset, steps_name, **kwargs)\u001b[0m\n\u001b[1;32m    391\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    392\u001b[0m         \u001b[0;31m# Get outputs.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 393\u001b[0;31m         \u001b[0mbatch_outs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mins_batch\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    394\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch_outs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist\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    395\u001b[0m           \u001b[0mbatch_outs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mbatch_outs\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m~/anaconda3/envs/fidle/lib/python3.7/site-packages/tensorflow_core/python/keras/backend.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m   3738\u001b[0m         \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmath_ops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtensor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3739\u001b[0m       \u001b[0mconverted_inputs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3740\u001b[0;31m     \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_graph_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mconverted_inputs\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   3741\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3742\u001b[0m     \u001b[0;31m# EagerTensor.numpy() will often make a copy to ensure memory safety.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m~/anaconda3/envs/fidle/lib/python3.7/site-packages/tensorflow_core/python/eager/function.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m   1079\u001b[0m       \u001b[0mTypeError\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mFor\u001b[0m \u001b[0minvalid\u001b[0m \u001b[0mpositional\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mkeyword\u001b[0m \u001b[0margument\u001b[0m \u001b[0mcombinations\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1080\u001b[0m     \"\"\"\n\u001b[0;32m-> 1081\u001b[0;31m     \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\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   1082\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1083\u001b[0m   \u001b[0;32mdef\u001b[0m \u001b[0m_call_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcancellation_manager\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\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~/anaconda3/envs/fidle/lib/python3.7/site-packages/tensorflow_core/python/eager/function.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, args, kwargs, cancellation_manager)\u001b[0m\n\u001b[1;32m   1119\u001b[0m       raise TypeError(\"Keyword arguments {} unknown. Expected {}.\".format(\n\u001b[1;32m   1120\u001b[0m           list(kwargs.keys()), list(self._arg_keywords)))\n\u001b[0;32m-> 1121\u001b[0;31m     \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_flat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcaptured_inputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcancellation_manager\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   1122\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1123\u001b[0m   \u001b[0;32mdef\u001b[0m \u001b[0m_filtered_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\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[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m~/anaconda3/envs/fidle/lib/python3.7/site-packages/tensorflow_core/python/eager/function.py\u001b[0m in \u001b[0;36m_call_flat\u001b[0;34m(self, args, captured_inputs, cancellation_manager)\u001b[0m\n\u001b[1;32m   1222\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mexecuting_eagerly\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1223\u001b[0m       flat_outputs = forward_function.call(\n\u001b[0;32m-> 1224\u001b[0;31m           ctx, args, cancellation_manager=cancellation_manager)\n\u001b[0m\u001b[1;32m   1225\u001b[0m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1226\u001b[0m       \u001b[0mgradient_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_delayed_rewrite_functions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mregister\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~/anaconda3/envs/fidle/lib/python3.7/site-packages/tensorflow_core/python/eager/function.py\u001b[0m in \u001b[0;36mcall\u001b[0;34m(self, ctx, args, cancellation_manager)\u001b[0m\n\u001b[1;32m    509\u001b[0m               \u001b[0minputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    510\u001b[0m               \u001b[0mattrs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"executor_type\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexecutor_type\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"config_proto\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfig\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--> 511\u001b[0;31m               ctx=ctx)\n\u001b[0m\u001b[1;32m    512\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    513\u001b[0m           outputs = execute.execute_with_cancellation(\n",
+      "\u001b[0;32m~/anaconda3/envs/fidle/lib/python3.7/site-packages/tensorflow_core/python/eager/execute.py\u001b[0m in \u001b[0;36mquick_execute\u001b[0;34m(op_name, num_outputs, inputs, attrs, ctx, name)\u001b[0m\n\u001b[1;32m     59\u001b[0m     tensors = pywrap_tensorflow.TFE_Py_Execute(ctx._handle, device_name,\n\u001b[1;32m     60\u001b[0m                                                \u001b[0mop_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mattrs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 61\u001b[0;31m                                                num_outputs)\n\u001b[0m\u001b[1;32m     62\u001b[0m   \u001b[0;32mexcept\u001b[0m \u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_NotOkStatusException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     63\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
      ]
     }
    ],
@@ -486,6 +456,25 @@
     "         )"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "End time is : Saturday 19 December 2020, 17:58:18\n",
+      "Duration is : 00:01:44 880ms\n",
+      "This notebook ends here\n"
+     ]
+    }
+   ],
+   "source": [
+    "pwk.end()"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
diff --git a/VAE/modules/vae.py b/VAE/modules/vae.py
index ee23d8b..9c6c623 100644
--- a/VAE/modules/vae.py
+++ b/VAE/modules/vae.py
@@ -27,8 +27,8 @@ from tensorflow.keras.utils import plot_model
 from modules.callbacks      import ImagesCallback
 from modules.data_generator import DataGenerator
 
-
 import os, json, time, datetime
+from IPython.display import display,Image,Markdown,HTML
 
 
 
@@ -125,15 +125,15 @@ class VariationalAutoencoder():
 
         # ==== Verbosity ==============================================================
 
-        print('Model initialized.')
+        self.subtitle('Model initialized.')
         print(f'Outputs will be in  : {self.run_directory}')
         
         if verbose>0 :
-            print('\n','-'*10,'Encoder','-'*50,'\n')
+            self.subtitle('Encoder :')
             self.encoder.summary()
-            print('\n','-'*10,'Encoder','-'*50,'\n')
+            self.subtitle('Decoder :')
             self.decoder.summary()
-            self.plot_model()
+#             self.plot_model()
         
         
         
@@ -270,14 +270,14 @@ class VariationalAutoencoder():
             filename = self.run_directory+'/models/'+config
             with open(filename, 'w') as outfile:
                 json.dump(data, outfile)
-            print(f'Config saved in     : {filename}')
+            print(f'\nConfig saved in     : {filename}')
         
         # ---- Save model
         
         if model!=None:
             filename = self.run_directory+'/models/'+model
             self.model.save(filename)
-            print(f'Model saved in      : {filename}')
+            print(f'\nModel saved in      : {filename}')
 
         
         
@@ -302,6 +302,10 @@ class VariationalAutoencoder():
     
     @classmethod
     def about(cls):
-        print('\nFIDLE 2020 - Variational AutoEncoder (VAE)')
+        cls.subtitle('FIDLE 2020 - Variational AutoEncoder (VAE)')
         print('TensorFlow version   :',tf.__version__)
-        print('VAE version          :', cls.version)
\ No newline at end of file
+        print('VAE version          :', cls.version)
+        
+    @classmethod
+    def subtitle(cls,text):
+        display(Markdown(f'<br>**{text}**'))
diff --git a/fidle/log/finished.json b/fidle/log/finished.json
index bae994c..d96594d 100644
--- a/fidle/log/finished.json
+++ b/fidle/log/finished.json
@@ -76,5 +76,11 @@
         "start": "Saturday 19 December 2020, 11:37:54",
         "end": "Saturday 19 December 2020, 11:37:57",
         "duration": "00:00:03 329ms"
+    },
+    "VAE1": {
+        "path": "/home/pjluc/dev/fidle/VAE",
+        "start": "Saturday 19 December 2020, 17:56:34",
+        "end": "Saturday 19 December 2020, 17:58:18",
+        "duration": "00:01:44 880ms"
     }
 }
\ No newline at end of file
-- 
GitLab