From 26ceb97d6dcc1d25eca019027c675c64ad0995e3 Mon Sep 17 00:00:00 2001
From: Jean-Luc Parouty <Jean-Luc.Parouty@grenoble-inp.fr>
Date: Tue, 7 Jan 2020 00:25:46 +0100
Subject: [PATCH] update GTSRB

---
 .gitignore                              |   2 +-
 GTSRB/03-Tracking-and-visualizing.ipynb | 147 ++++++++++++++----------
 2 files changed, 87 insertions(+), 62 deletions(-)

diff --git a/.gitignore b/.gitignore
index 4d5c4f4..eabde99 100755
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,6 @@
 */.ipynb_checkpoints/*
 __pycache__
 */__pycache__/*
-/run/**
+run/
 */data/*
 !/GTSRB/data/dataset.tar.gz
diff --git a/GTSRB/03-Tracking-and-visualizing.ipynb b/GTSRB/03-Tracking-and-visualizing.ipynb
index 9e11231..6588113 100644
--- a/GTSRB/03-Tracking-and-visualizing.ipynb
+++ b/GTSRB/03-Tracking-and-visualizing.ipynb
@@ -32,7 +32,7 @@
      "text": [
       "IDLE 2020 - Practical Work Module\n",
       "  Version            : 0.1.1\n",
-      "  Run time           : Monday 6 January 2020, 20:52:54\n",
+      "  Run time           : Monday 6 January 2020, 23:42:11\n",
       "  Matplotlib style   : idle/talk.mplstyle\n",
       "  TensorFlow version : 2.0.0\n",
       "  Keras version      : 2.2.4-tf\n"
@@ -76,8 +76,8 @@
      "text": [
       "Dataset loaded, size=247.6 Mo\n",
       "\n",
-      "CPU times: user 0 ns, sys: 297 ms, total: 297 ms\n",
-      "Wall time: 330 ms\n"
+      "CPU times: user 0 ns, sys: 344 ms, total: 344 ms\n",
+      "Wall time: 498 ms\n"
      ]
     }
    ],
@@ -172,18 +172,18 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 23,
    "metadata": {},
    "outputs": [],
    "source": [
     "batch_size  =  64\n",
     "num_classes =  43\n",
-    "epochs      =  20"
+    "epochs      =  10"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 24,
    "metadata": {},
    "outputs": [
     {
@@ -220,6 +220,8 @@
     }
    ],
    "source": [
+    "tf.keras.backend.clear_session()\n",
+    "\n",
     "model = keras.models.Sequential()\n",
     "model.add( keras.layers.Conv2D(96, (3,3), activation='relu', input_shape=(img_lx, img_ly, img_lz)))\n",
     "model.add( keras.layers.MaxPooling2D((2, 2)))\n",
@@ -246,19 +248,23 @@
     " - **TensorBoard**  \n",
     "Training logs, which can be visualised with Tensorboard.  \n",
     "`#tensorboard --logdir ./run/logs`  \n",
-    " - model backup"
+    "IMPORTANT : Relancer tensorboard à chaque run\n",
+    " - **model backup**"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 25,
    "metadata": {},
    "outputs": [],
    "source": [
-    "# reload(ooo)\n",
-    "# ---- Callback for tensorboard\n",
-    "log_dir=\"./run/logs/\" + ooo.tag_now()\n",
-    "tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)"
+    "# ---- Callback tensorboard\n",
+    "log_dir = \"./run/logs/\" + ooo.tag_now()\n",
+    "tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)\n",
+    "\n",
+    "# ---- Callback ModelCheckpoint\n",
+    "save_dir = \"./run/models\"\n",
+    "checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(filepath=save_dir, verbose=0, monitor='accuracy', save_best_only=True)"
    ]
   },
   {
@@ -270,56 +276,46 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 26,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Train on 3000 samples, validate on 12630 samples\n",
-      "Epoch 1/20\n",
-      "3000/3000 [==============================] - 12s 4ms/sample - loss: 3.4839 - accuracy: 0.0740 - val_loss: 3.1409 - val_accuracy: 0.1995\n",
-      "Epoch 2/20\n",
-      "3000/3000 [==============================] - 12s 4ms/sample - loss: 2.4676 - accuracy: 0.3067 - val_loss: 2.1162 - val_accuracy: 0.3968\n",
-      "Epoch 3/20\n",
-      "3000/3000 [==============================] - 13s 4ms/sample - loss: 1.4458 - accuracy: 0.5543 - val_loss: 1.4468 - val_accuracy: 0.5862\n",
-      "Epoch 4/20\n",
-      "3000/3000 [==============================] - 14s 5ms/sample - loss: 0.9291 - accuracy: 0.7067 - val_loss: 1.1903 - val_accuracy: 0.6622\n",
-      "Epoch 5/20\n",
-      "3000/3000 [==============================] - 14s 5ms/sample - loss: 0.6027 - accuracy: 0.8030 - val_loss: 0.8067 - val_accuracy: 0.7900\n",
-      "Epoch 6/20\n",
-      "3000/3000 [==============================] - 14s 5ms/sample - loss: 0.3835 - accuracy: 0.8670 - val_loss: 0.8453 - val_accuracy: 0.7925\n",
-      "Epoch 7/20\n",
-      "3000/3000 [==============================] - 14s 5ms/sample - loss: 0.2666 - accuracy: 0.9157 - val_loss: 0.7578 - val_accuracy: 0.8256\n",
-      "Epoch 8/20\n",
-      "3000/3000 [==============================] - 14s 5ms/sample - loss: 0.2045 - accuracy: 0.9307 - val_loss: 0.8074 - val_accuracy: 0.8300\n",
-      "Epoch 9/20\n",
-      "3000/3000 [==============================] - 14s 5ms/sample - loss: 0.1370 - accuracy: 0.9567 - val_loss: 0.7071 - val_accuracy: 0.8588\n",
-      "Epoch 10/20\n",
-      "3000/3000 [==============================] - 12s 4ms/sample - loss: 0.0964 - accuracy: 0.9707 - val_loss: 0.7275 - val_accuracy: 0.8622\n",
-      "Epoch 11/20\n",
-      "3000/3000 [==============================] - 13s 4ms/sample - loss: 0.0654 - accuracy: 0.9803 - val_loss: 0.7073 - val_accuracy: 0.8661\n",
-      "Epoch 12/20\n",
-      "3000/3000 [==============================] - 13s 4ms/sample - loss: 0.0806 - accuracy: 0.9757 - val_loss: 0.8265 - val_accuracy: 0.8637\n",
-      "Epoch 13/20\n",
-      "3000/3000 [==============================] - 13s 4ms/sample - loss: 0.0854 - accuracy: 0.9743 - val_loss: 0.7547 - val_accuracy: 0.8635\n",
-      "Epoch 14/20\n",
-      "3000/3000 [==============================] - 14s 5ms/sample - loss: 0.0463 - accuracy: 0.9860 - val_loss: 0.7248 - val_accuracy: 0.8846\n",
-      "Epoch 15/20\n",
-      "3000/3000 [==============================] - 14s 5ms/sample - loss: 0.0425 - accuracy: 0.9917 - val_loss: 0.7266 - val_accuracy: 0.8785\n",
-      "Epoch 16/20\n",
-      "3000/3000 [==============================] - 12s 4ms/sample - loss: 0.0322 - accuracy: 0.9923 - val_loss: 0.7501 - val_accuracy: 0.8777\n",
-      "Epoch 17/20\n",
-      "3000/3000 [==============================] - 14s 5ms/sample - loss: 0.0375 - accuracy: 0.9870 - val_loss: 0.7782 - val_accuracy: 0.8811\n",
-      "Epoch 18/20\n",
-      "3000/3000 [==============================] - 14s 5ms/sample - loss: 0.0557 - accuracy: 0.9857 - val_loss: 0.6846 - val_accuracy: 0.8760\n",
-      "Epoch 19/20\n",
-      "3000/3000 [==============================] - 14s 5ms/sample - loss: 0.0100 - accuracy: 0.9987 - val_loss: 0.7676 - val_accuracy: 0.8873\n",
-      "Epoch 20/20\n",
-      "3000/3000 [==============================] - 14s 5ms/sample - loss: 0.0025 - accuracy: 1.0000 - val_loss: 0.7481 - val_accuracy: 0.8993\n",
-      "CPU times: user 17min 9s, sys: 5min 55s, total: 23min 4s\n",
-      "Wall time: 4min 29s\n"
+      "Train on 3000 samples, validate on 500 samples\n",
+      "Epoch 1/10\n",
+      "2944/3000 [============================>.] - ETA: 0s - loss: 3.4893 - accuracy: 0.0676INFO:tensorflow:Assets written to: ./run/models/assets\n",
+      "3000/3000 [==============================] - 8s 3ms/sample - loss: 3.4847 - accuracy: 0.0690 - val_loss: 3.2739 - val_accuracy: 0.1640\n",
+      "Epoch 2/10\n",
+      "2944/3000 [============================>.] - ETA: 0s - loss: 2.4907 - accuracy: 0.3227INFO:tensorflow:Assets written to: ./run/models/assets\n",
+      "3000/3000 [==============================] - 7s 2ms/sample - loss: 2.4802 - accuracy: 0.3250 - val_loss: 2.0143 - val_accuracy: 0.3900\n",
+      "Epoch 3/10\n",
+      "2944/3000 [============================>.] - ETA: 0s - loss: 1.3810 - accuracy: 0.5591INFO:tensorflow:Assets written to: ./run/models/assets\n",
+      "3000/3000 [==============================] - 7s 2ms/sample - loss: 1.3794 - accuracy: 0.5593 - val_loss: 1.3322 - val_accuracy: 0.6200\n",
+      "Epoch 4/10\n",
+      "2944/3000 [============================>.] - ETA: 0s - loss: 0.8501 - accuracy: 0.7286INFO:tensorflow:Assets written to: ./run/models/assets\n",
+      "3000/3000 [==============================] - 7s 2ms/sample - loss: 0.8426 - accuracy: 0.7323 - val_loss: 1.1705 - val_accuracy: 0.6580\n",
+      "Epoch 5/10\n",
+      "2944/3000 [============================>.] - ETA: 0s - loss: 0.5132 - accuracy: 0.8400INFO:tensorflow:Assets written to: ./run/models/assets\n",
+      "3000/3000 [==============================] - 8s 3ms/sample - loss: 0.5087 - accuracy: 0.8413 - val_loss: 0.9281 - val_accuracy: 0.7360\n",
+      "Epoch 6/10\n",
+      "2944/3000 [============================>.] - ETA: 0s - loss: 0.3740 - accuracy: 0.8787INFO:tensorflow:Assets written to: ./run/models/assets\n",
+      "3000/3000 [==============================] - 8s 3ms/sample - loss: 0.3763 - accuracy: 0.8783 - val_loss: 0.9252 - val_accuracy: 0.7520\n",
+      "Epoch 7/10\n",
+      "2944/3000 [============================>.] - ETA: 0s - loss: 0.2671 - accuracy: 0.9141INFO:tensorflow:Assets written to: ./run/models/assets\n",
+      "3000/3000 [==============================] - 8s 3ms/sample - loss: 0.2677 - accuracy: 0.9140 - val_loss: 0.8153 - val_accuracy: 0.8000\n",
+      "Epoch 8/10\n",
+      "2944/3000 [============================>.] - ETA: 0s - loss: 0.1599 - accuracy: 0.9535INFO:tensorflow:Assets written to: ./run/models/assets\n",
+      "3000/3000 [==============================] - 8s 3ms/sample - loss: 0.1588 - accuracy: 0.9543 - val_loss: 0.7000 - val_accuracy: 0.8500\n",
+      "Epoch 9/10\n",
+      "2944/3000 [============================>.] - ETA: 0s - loss: 0.1282 - accuracy: 0.9626INFO:tensorflow:Assets written to: ./run/models/assets\n",
+      "3000/3000 [==============================] - 8s 3ms/sample - loss: 0.1271 - accuracy: 0.9633 - val_loss: 0.7833 - val_accuracy: 0.8080\n",
+      "Epoch 10/10\n",
+      "2944/3000 [============================>.] - ETA: 0s - loss: 0.0979 - accuracy: 0.9715INFO:tensorflow:Assets written to: ./run/models/assets\n",
+      "3000/3000 [==============================] - 8s 3ms/sample - loss: 0.0971 - accuracy: 0.9720 - val_loss: 0.7634 - val_accuracy: 0.8420\n",
+      "CPU times: user 4min 26s, sys: 1min 31s, total: 5min 58s\n",
+      "Wall time: 1min 15s\n"
      ]
     }
    ],
@@ -330,8 +326,8 @@
     "                      batch_size=batch_size,\n",
     "                      epochs=epochs,\n",
     "                      verbose=1,\n",
-    "                      validation_data=(x_test, y_test),\n",
-    "                      callbacks=[tensorboard_callback] )"
+    "                      validation_data=(x_test[:500], y_test[:500]),\n",
+    "                      callbacks=[tensorboard_callback, checkpoint_callback] )"
    ]
   },
   {
@@ -382,10 +378,39 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 29,
    "metadata": {},
-   "outputs": [],
-   "source": []
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "total 176\n",
+      "drwxr-xr-x 1 pjluc pjluc    512 Jan  7 00:16 assets\n",
+      "-rw-r--r-- 1 pjluc pjluc 168427 Jan  7 00:17 saved_model.pb\n",
+      "drwxr-xr-x 1 pjluc pjluc    512 Jan  7 00:17 variables\n",
+      "\u001b[01;34m./run/models\u001b[00m\n",
+      "├── \u001b[01;34massets\u001b[00m\n",
+      "├── saved_model.pb\n",
+      "└── \u001b[01;34mvariables\u001b[00m\n",
+      "    ├── variables.data-00000-of-00001\n",
+      "    └── variables.index\n",
+      "\n",
+      "2 directories, 3 files\n"
+     ]
+    }
+   ],
+   "source": [
+    "!ls -l {save_dir}\n",
+    "!tree {save_dir}"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "A suivre : https://www.tensorflow.org/tutorials/keras/save_and_load"
+   ]
   }
  ],
  "metadata": {
-- 
GitLab