diff --git a/Codes/0_MNIST_test.ipynb b/Codes/0_MNIST_test.ipynb index 70589f7..d0cc083 100644 --- a/Codes/0_MNIST_test.ipynb +++ b/Codes/0_MNIST_test.ipynb @@ -14,75 +14,241 @@ } }, "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "3z1zTrDcVZjA" + }, + "outputs": [], + "source": [ + "import tensorflow as tf" + ] + }, + { + "cell_type": "code", + "source": [ + "tf.__version__" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 36 + }, + "id": "PjoeEyMTVhya", + "outputId": "0fc5bdb5-871e-4e24-a629-f3da4fa00b78" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "'2.17.0'" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 2 + } + ] + }, + { + "cell_type": "code", + "source": [ + "from tensorflow import keras" + ], + "metadata": { + "id": "UTd5M7mIVpVb" + }, + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "keras.__version__" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 36 + }, + "id": "ZfmbvoGDVttz", + "outputId": "41153700-269b-41c2-fbbd-fb6bbf51fc1e" + }, + "execution_count": 4, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "'3.4.1'" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 4 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from tensorflow.keras import datasets\n", + "from tensorflow.keras import Sequential\n", + "from tensorflow.keras import layers" + ], + "metadata": { + "id": "WWFeNHkhVv_7" + }, + "execution_count": 48, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Data Preparation" + ], + "metadata": { + "id": "y0DyB8f_WX4b" + } + }, { "cell_type": "markdown", "source": [ - "# MNIST classification" + "### 1- Load Data" ], "metadata": { - "id": "njqJSiI4YT2v" + "id": "mesbTJzXWaIi" } }, { "cell_type": "code", "source": [ - "from tensorflow.keras import layers\n", - "from tensorflow.keras import Sequential\n", - "from tensorflow.keras import datasets\n", - "import matplotlib.pyplot as plt" + "(x_train, y_train), (x_test, y_test) = datasets.mnist.load_data()" ], "metadata": { - "id": "Sl-D3qSSYriE" + "id": "87aLsRKoV6JB" }, - "execution_count": 2, + "execution_count": 42, "outputs": [] }, { "cell_type": "markdown", "source": [ - "## 1- Data Preparation" + "### 2- Data Inspection" ], "metadata": { - "id": "dGxUz4YAYdfB" + "id": "DUnQBVo2Wctt" } }, { "cell_type": "code", - "execution_count": 18, + "source": [ + "print(x_train.shape)\n", + "print(y_train.shape)\n", + "print(x_test.shape)\n", + "print(y_test.shape)" + ], "metadata": { - "id": "eCuoguDxYNP_" + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "5a6fLaV0WWbN", + "outputId": "b7c4adde-9ca9-4329-9928-a475695a7077" }, - "outputs": [], + "execution_count": 16, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(60000, 28, 28)\n", + "(60000,)\n", + "(10000, 28, 28)\n", + "(10000,)\n" + ] + } + ] + }, + { + "cell_type": "code", "source": [ - "(x_train, y_train), (x_test, y_test) = datasets.mnist.load_data()" + "print(x_train.ndim)\n", + "print(x_test.ndim)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "OPTSNVPcXZgB", + "outputId": "a1890f78-c0e5-4162-dc10-e11f4e6f17ac" + }, + "execution_count": 18, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "3\n", + "3\n" + ] + } ] }, { - "cell_type": "markdown", + "cell_type": "code", "source": [ - "### 1-1. Data Inspection" + "print(x_train.dtype)\n", + "print(y_train.dtype)\n", + "print(x_test.dtype)\n", + "print(y_test.dtype)\n" ], "metadata": { - "id": "7aFMKkRhs-gd" - } + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Ptir71-XXiXu", + "outputId": "17278cf2-83e9-483b-96b0-a58ec84c252b" + }, + "execution_count": 19, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "uint8\n", + "uint8\n", + "uint8\n", + "uint8\n" + ] + } + ] }, { "cell_type": "code", "source": [ - "# Visualize data\n", - "fig, axes = plt.subplots(1,7, figsize=(10,5))\n", - "for i, ax in enumerate(axes):\n", - " ax.imshow(x_train[i], cmap='gray')\n", - " ax.set_axis_off()\n", - " ax.set_title(y_train[i])" + "fig, axes = plt.subplots(nrows=1, ncols=10, figsize=(20, 3))\n", + "for i in range(10):\n", + " axes[i].imshow(x_test[i], cmap='gray')\n", + " axes[i].set_title(y_test[i])\n", + " axes[i].set_axis_off()\n", + "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", - "height": 153 + "height": 140 }, - "id": "kOBYvQrXtc5E", - "outputId": "536c99df-18e4-4212-a28d-bbe0a1c72573" + "id": "tb7JrOZ2YTlX", + "outputId": "89189ec0-413c-4ba1-f254-f8392907760d" }, "execution_count": 24, "outputs": [ @@ -90,86 +256,115 @@ "output_type": "display_data", "data": { "text/plain": [ - "
" + "
" ], - "image/png": "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\n" + "image/png": "iVBORw0KGgoAAAANSUhEUgAABiEAAACtCAYAAADWI9yPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAApFklEQVR4nO3dedyWY94/8OMWKqJpJaNNyVKRJdEUNXqRKIwiGmNfHvvYIzKReR6MsWuaZ2yJiWxZpiFPiDRkyZOsmUoq2kRp7/798XuNZ87rOGfuq7vrvK97eb9fL398Px3XeX/L2XktR9f5LSktLS0NAAAAAAAABbZZsRsAAAAAAACqJ5sQAAAAAABAJmxCAAAAAAAAmbAJAQAAAAAAZMImBAAAAAAAkAmbEAAAAAAAQCZsQgAAAAAAAJmwCQEAAAAAAGTCJgQAAAAAAJAJmxAAAAAAAEAmbEKU4eSTTw4lJSX/8r+vvvqq2C1Szbz99tvhvPPOC+3btw9bb711aNGiRTj22GPDp59+WuzWqMaWL18ehg4dGnr37h0aNmwYSkpKwgMPPFDstqjmVq9eHa644oqwww47hLp164YuXbqEl156qdhtUcMMHz48lJSUhA4dOhS7Faopz7FUBq51VIR33nkn9O7dO2y77bZhm222CYccckh4//33i90W1dgrr7zyLz+vmzJlSrHbo5pyrSufzYvdQGV31llnhV69eiWy0tLScPbZZ4dWrVqFn/70p0XqjOrqv/7rv8Ibb7wRBgwYEPbYY4+wYMGCcNddd4W99947TJkyxRsHMrFo0aIwbNiw0KJFi7DnnnuGV155pdgtUQOcfPLJYezYseGiiy4KO++8c3jggQdCnz59wsSJE0O3bt2K3R41wNy5c8ONN94Ytt5662K3QjXmOZZic62jIrz77ruhW7duoXnz5mHo0KFhw4YN4Z577gkHHXRQeOutt8Iuu+xS7Bapxi644ILQuXPnRNa2bdsidUN15lpXfiWlpaWlxW6iqnn99ddD9+7dw/Dhw8NVV11V7HaoZiZPnhz23XffsOWWW/6YffbZZ6Fjx46hf//+4eGHHy5id1RXq1evDkuXLg3bb799mDp1aujcuXO4//77w8knn1zs1qim3nrrrdClS5dw8803h0svvTSEEMKqVatChw4dQtOmTcPkyZOL3CE1wcCBA8PChQvD+vXrw6JFi8L06dOL3RLVkOdYis21jopw+OGHhzfffDN89tlnoVGjRiGEEObPnx/atWsXDjnkkPDEE08UuUOqo1deeSX07NkzPP7446F///7FbocawLWu/NyOqRweeeSRUFJSEk444YRit0I11LVr18QGRAgh7LzzzqF9+/bho48+KlJXVHe1a9cO22+/fbHboAYZO3ZsqFWrVjjzzDN/zOrUqRNOO+208Oabb4Yvv/yyiN1RE7z22mth7Nix4bbbbit2K1RznmMpJtc6KsqkSZNCr169fvxQLoQQmjVrFg466KDw3HPPheXLlxexO2qC77//Pqxbt67YbVDNudaVn02IjbR27drw2GOPha5du4ZWrVoVux1qiNLS0vD111+Hxo0bF7sVgIJ47733Qrt27cK2226byPfbb78QQnBPTTK1fv36cP7554fTTz89dOzYsdjtAGTCtY6KtHr16lC3bt0o32qrrcKaNWt8A4dMnXLKKWHbbbcNderUCT179gxTp04tdktUU6515WcmxEb661//GhYvXhwGDRpU7FaoQUaPHh2++uqrMGzYsGK3AlAQ8+fPD82aNYvyf2Tz5s2r6JaoQUaMGBFmz54dJkyYUOxWADLjWkdF2mWXXcKUKVPC+vXrQ61atUIIIaxZsyb87W9/CyGE8NVXXxWzPaqpLbfcMhxzzDGhT58+oXHjxmHGjBnhlltuCd27dw+TJ08Oe+21V7FbpJpxrSs/34TYSI888kjYYostwrHHHlvsVqghPv7443DuueeGAw44IJx00knFbgegIFauXBlq164d5XXq1Pnx1yELixcvDtdee2245pprQpMmTYrdDkAmXOuoaOecc0749NNPw2mnnRZmzJgRpk+fHn71q1+F+fPnhxC8tiMbXbt2DWPHjg2nnnpq6NevX7jyyivDlClTQklJSRg8eHCx26Macq0rP5sQG2H58uXhmWeeCYceemji3l+QlQULFoTDDz881K9f/8f7pwNUB3Xr1g2rV6+O8lWrVv3465CFIUOGhIYNG4bzzz+/2K0AZMa1jop29tlnh6uuuio88sgjoX379qFjx45h5syZ4fLLLw8hhFCvXr0id0hN0bZt23DkkUeGiRMnhvXr1xe7HaoZ17ryswmxEZ5++unwww8/uBUTFWLZsmXhsMMOC99++20YP3582GGHHYrdEkDBNGvW7Md/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\n" }, "metadata": {} } ] }, + { + "cell_type": "markdown", + "source": [ + "### 3- Pre-processing" + ], + "metadata": { + "id": "ibpBjCHvhI7j" + } + }, { "cell_type": "code", "source": [ - "# Data properties\n", - "print(type(x_train))\n", - "print(x_train.shape)\n", - "print(x_train.ndim) # rank\n", - "print(x_train.dtype)" + "x_train_vector = x_train.reshape(60000, 784)\n", + "x_test_vector = x_test.reshape(10000, 784)" + ], + "metadata": { + "id": "WABop3EbZEDr" + }, + "execution_count": 43, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "x_train[0].shape" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "i7jAxb71uyTd", - "outputId": "64a15a42-acdc-488b-c774-4aa5fb298e72" + "id": "cV6YpIehhZGB", + "outputId": "793eefed-5efa-4865-fb7b-42d1ec048ff2" }, - "execution_count": 29, + "execution_count": 27, "outputs": [ { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "(60000, 28, 28)\n", - "3\n", - "uint8\n" - ] + "output_type": "execute_result", + "data": { + "text/plain": [ + "(784,)" + ] + }, + "metadata": {}, + "execution_count": 27 } ] }, { "cell_type": "markdown", "source": [ - "### 1-2. Pre-processing" + "#### Normalization" ], "metadata": { - "id": "7dGRbSkR0j7H" + "id": "AM7O3rR1hjM7" } }, { "cell_type": "code", "source": [ - "# Reshape\n", - "x_train = x_train.reshape(60000, 784)\n", - "x_test = x_test.reshape(10000, 784)" + "x_train_normalized = x_train_vector.astype('float32') / 255\n", + "x_test_normalized = x_test_vector.astype('float32') / 255" ], "metadata": { - "id": "Pvhb6lvgZqzl" + "id": "pUQOTVDqhmdR" }, - "execution_count": 39, + "execution_count": 44, "outputs": [] }, { "cell_type": "code", "source": [ - "# Normalization\n", - "x_train = x_train.astype('float32') / 255\n", - "x_test = x_test.astype('float32') / 255" + "x_test_normalized.max()" ], "metadata": { - "id": "SaUKE1UeZuQs" + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "uSwzvkqiizuq", + "outputId": "090f15ca-368e-49a9-dd88-b8f12e7521d0" }, - "execution_count": 6, - "outputs": [] + "execution_count": 46, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "1.0" + ] + }, + "metadata": {}, + "execution_count": 46 + } + ] }, { "cell_type": "markdown", "source": [ - "## 3- Model Design" + "## Model Design" ], "metadata": { - "id": "KFJOH_UBYf9W" + "id": "j55PoYi9jsg8" } }, { @@ -177,159 +372,382 @@ "source": [ "model = Sequential(\n", " [\n", - " layers.Dense(100, activation='relu', input_dim=784),\n", + " layers.Dense(100, activation='relu', input_shape=(784,)),\n", " layers.Dense(10, activation='softmax')\n", " ]\n", - ")\n", - "\n", - "model.summary()" + ")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "aSM8yIqyYkB1", - "outputId": "b6abf3de-97f9-4325-b046-ffac710aca7e" + "id": "FlF7fHppjOsE", + "outputId": "41e84dfb-1ef8-4d27-a084-e5438d06596a" }, - "execution_count": 8, + "execution_count": 73, "outputs": [ { "output_type": "stream", - "name": "stdout", + "name": "stderr", "text": [ - "Model: \"sequential_1\"\n", - "_________________________________________________________________\n", - " Layer (type) Output Shape Param # \n", - "=================================================================\n", - " dense_2 (Dense) (None, 100) 78500 \n", - " \n", - " dense_3 (Dense) (None, 10) 1010 \n", - " \n", - "=================================================================\n", - "Total params: 79,510\n", - "Trainable params: 79,510\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n" + "/usr/local/lib/python3.10/dist-packages/keras/src/layers/core/dense.py:87: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" ] } ] }, + { + "cell_type": "code", + "source": [ + "model.summary()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 197 + }, + "id": "Lgyq12Qfkp8W", + "outputId": "909c97fd-0ebd-4c08-d3ce-1543c76542dd" + }, + "execution_count": 54, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1mModel: \"sequential_1\"\u001b[0m\n" + ], + "text/html": [ + "
Model: \"sequential_1\"\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n", + "│ dense_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m100\u001b[0m) │ \u001b[38;5;34m78,500\u001b[0m │\n", + "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", + "│ dense_3 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m1,010\u001b[0m │\n", + "└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n" + ], + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n",
+              "┃ Layer (type)                          Output Shape                         Param # ┃\n",
+              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n",
+              "│ dense_2 (Dense)                      │ (None, 100)                 │          78,500 │\n",
+              "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
+              "│ dense_3 (Dense)                      │ (None, 10)                  │           1,010 │\n",
+              "└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m79,510\u001b[0m (310.59 KB)\n" + ], + "text/html": [ + "
 Total params: 79,510 (310.59 KB)\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m79,510\u001b[0m (310.59 KB)\n" + ], + "text/html": [ + "
 Trainable params: 79,510 (310.59 KB)\n",
+              "
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ], + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+              "
\n" + ] + }, + "metadata": {} + } + ] + }, { "cell_type": "markdown", "source": [ - "## 4- Training" + "## Training" ], "metadata": { - "id": "FMoVxJYgYkYl" + "id": "d4byjVG2mb8S" } }, { "cell_type": "code", "source": [ - "model.compile(loss='sparse_categorical_crossentropy', optimizer='adam',\n", + "from tensorflow.keras import optimizers\n", + "from tensorflow.keras import losses\n", + "from tensorflow.keras import metrics" + ], + "metadata": { + "id": "RWoIqhiA4aHq" + }, + "execution_count": 70, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model.compile(optimizer=optimizers.Adam(learning_rate=0.005),\n", + " loss='sparse_categorical_crossentropy',\n", " metrics=['accuracy'])" ], "metadata": { - "id": "FSifZaKXbZiT" + "id": "fNgrGx1Ukq-M" }, - "execution_count": 11, + "execution_count": 74, "outputs": [] }, { "cell_type": "code", "source": [ - "model.fit(x_train, y_train,\n", - " epochs=10,\n", - " batch_size=256)" + "history = model.fit(x_train_normalized, y_train,\n", + " batch_size=256,\n", + " epochs=20)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "YZGdGdA_Yl59", - "outputId": "511ea12b-dfbe-4508-934d-09a2f1b42ce9" + "id": "qj7c1eA1uI06", + "outputId": "e08ebf62-6c3e-46d4-a1b3-8072899d0f4c" }, - "execution_count": 14, + "execution_count": 75, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Epoch 1/10\n", - "235/235 [==============================] - 2s 7ms/step - loss: 0.0518 - accuracy: 0.9851\n", - "Epoch 2/10\n", - "235/235 [==============================] - 2s 8ms/step - loss: 0.0457 - accuracy: 0.9879\n", - "Epoch 3/10\n", - "235/235 [==============================] - 3s 11ms/step - loss: 0.0416 - accuracy: 0.9888\n", - "Epoch 4/10\n", - "235/235 [==============================] - 2s 7ms/step - loss: 0.0373 - accuracy: 0.9902\n", - "Epoch 5/10\n", - "235/235 [==============================] - 2s 7ms/step - loss: 0.0334 - accuracy: 0.9913\n", - "Epoch 6/10\n", - "235/235 [==============================] - 2s 7ms/step - loss: 0.0300 - accuracy: 0.9926\n", - "Epoch 7/10\n", - "235/235 [==============================] - 2s 7ms/step - loss: 0.0271 - accuracy: 0.9931\n", - "Epoch 8/10\n", - "235/235 [==============================] - 2s 7ms/step - loss: 0.0241 - accuracy: 0.9943\n", - "Epoch 9/10\n", - "235/235 [==============================] - 2s 7ms/step - loss: 0.0214 - accuracy: 0.9955\n", - "Epoch 10/10\n", - "235/235 [==============================] - 2s 9ms/step - loss: 0.0188 - accuracy: 0.9963\n" + "Epoch 1/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - accuracy: 0.8435 - loss: 0.5217\n", + "Epoch 2/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - accuracy: 0.9580 - loss: 0.1414\n", + "Epoch 3/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - accuracy: 0.9716 - loss: 0.0930\n", + "Epoch 4/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - accuracy: 0.9772 - loss: 0.0726\n", + "Epoch 5/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - accuracy: 0.9829 - loss: 0.0550\n", + "Epoch 6/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - accuracy: 0.9844 - loss: 0.0473\n", + "Epoch 7/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - accuracy: 0.9894 - loss: 0.0358\n", + "Epoch 8/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - accuracy: 0.9913 - loss: 0.0295\n", + "Epoch 9/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 5ms/step - accuracy: 0.9917 - loss: 0.0252\n", + "Epoch 10/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - accuracy: 0.9931 - loss: 0.0212\n", + "Epoch 11/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - accuracy: 0.9945 - loss: 0.0178\n", + "Epoch 12/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - accuracy: 0.9948 - loss: 0.0162\n", + "Epoch 13/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - accuracy: 0.9958 - loss: 0.0126\n", + "Epoch 14/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 7ms/step - accuracy: 0.9949 - loss: 0.0150\n", + "Epoch 15/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - accuracy: 0.9947 - loss: 0.0155\n", + "Epoch 16/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - accuracy: 0.9941 - loss: 0.0163\n", + "Epoch 17/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - accuracy: 0.9938 - loss: 0.0181\n", + "Epoch 18/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - accuracy: 0.9966 - loss: 0.0105\n", + "Epoch 19/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - accuracy: 0.9963 - loss: 0.0104\n", + "Epoch 20/20\n", + "\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - accuracy: 0.9972 - loss: 0.0080\n" ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "fig, axes = plt.subplots(1, 2, figsize=(7, 3))\n", + "axes[0].plot(history.history['loss'])\n", + "axes[0].set_title('loss')\n", + "axes[1].plot(history.history['accuracy'])\n", + "axes[1].set_title('accuracy')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 314 }, + "id": "vYn2UzMpzrXN", + "outputId": "337fafc3-c495-4162-aa04-917d36e29ebe" + }, + "execution_count": 96, + "outputs": [ { - "output_type": "execute_result", + "output_type": "display_data", "data": { "text/plain": [ - "" - ] + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAloAAAEpCAYAAABLBYwYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABT5UlEQVR4nO3de1xUdf4/8NfMwMxwHUDuF+XihbyBgpKlWd8o1DI1NXRrMWptM2kztlxtDe22ZKk/y0zL1jK1srKstZYyksyN1ES8a4oXbnIVGBhgBmbO7w/k6CQog8DcXs/H4zyQM585vo80pzef8z7vj0QQBAFERERE1OWk5g6AiIiIyFYx0SIiIiLqJky0iIiIiLoJEy0iIiKibsJEi4iIiKibMNEiIiIi6iZMtIiIiIi6CRMtIiIiom7CRIuIiIiomzDRIrP54IMPIJFIcO7cOXOHQkRE1C2YaBERERF1EyZaRERERN2EiRYREVEP0Wg05g6BehgTLbIob7/9NgYNGgSFQoHAwEDMnTsX1dXVRmNOnTqFqVOnwt/fH0qlEsHBwZgxYwZqamrEMTt27MDo0aPh4eEBV1dXDBgwAM8991wPnw0Rdbfz58/jiSeewIABA+Dk5IRevXph+vTpbdZ+VldX4+mnn0ZoaCgUCgWCg4ORlJSEiooKcUxjYyOWLFmC/v37Q6lUIiAgAPfffz/y8vIAAFlZWZBIJMjKyjI69rlz5yCRSPDBBx+I+x5++GG4uroiLy8PEyZMgJubGx588EEAwM8//4zp06ejd+/eUCgUCAkJwdNPP42Ghoar4j5x4gQeeOAB+Pj4wMnJCQMGDMA///lPAMDOnTshkUjw5ZdfXvW+jz76CBKJBNnZ2ab+s1IXcjB3AEStlixZghdeeAHx8fGYM2cOTp48iTVr1mDfvn343//+B0dHR+h0OiQkJECr1eLJJ5+Ev78/ioqKsH37dlRXV0OlUuHo0aO49957MXToULz44otQKBQ4ffo0/ve//5n7FImoi+3btw+//PILZsyYgeDgYJw7dw5r1qzB7bffjmPHjsHZ2RkAUFdXhzFjxuD48eN45JFHMHz4cFRUVODrr79GYWEhvL29odfrce+99yIzMxMzZszAU089hdraWuzYsQNHjhxBRESEyfE1NzcjISEBo0ePxrJly8R4PvvsM9TX12POnDno1asX9u7di1WrVqGwsBCfffaZ+P5Dhw5hzJgxcHR0xGOPPYbQ0FDk5eXhP//5D1555RXcfvvtCAkJwebNmzFlyhSjv3vz5s2IiIjAqFGjbuBfmG6YQGQm77//vgBAOHv2rFBWVibI5XLh7rvvFvR6vTjmrbfeEgAI69evFwRBEA4cOCAAED777LN2j/v//t//EwAI5eXl3X4ORGRe9fX1V+3Lzs4WAAgffvihuC8tLU0AIHzxxRdXjTcYDIIgCML69esFAMKKFSvaHbNz504BgLBz506j18+ePSsAEN5//31x36xZswQAwoIFCzoUd3p6uiCRSITz58+L+2677TbBzc3NaN+V8QiCICxcuFBQKBRCdXW1uK+srExwcHAQFi9efNXfQz2Ltw7JIvzwww/Q6XSYN28epNLL/1nOnj0b7u7u+OabbwAAKpUKAPDdd9+hvr6+zWN5eHgAAL766isYDIbuDZyIzMrJyUn8c1NTEyorK9G3b194eHggJydHfG3r1q2Iioq6atYHACQSiTjG29sbTz75ZLtjOmPOnDnXjFuj0aCiogK33HILBEHAgQMHAADl5eXYtWsXHnnkEfTu3bvdeJKSkqDVavH555+L+7Zs2YLm5mY89NBDnY6bugYTLbII58+fBwAMGDDAaL9cLkd4eLj4elhYGFJTU/Hee+/B29sbCQkJWL16tVF9VmJiIm699Vb85S9/gZ+fH2bMmIFPP/2USReRDWpoaEBaWhpCQkKgUCjg7e0NHx8fVFdXG10X8vLyMHjw4GseKy8vDwMGDICDQ9dV1Tg4OCA4OPiq/fn5+Xj44Yfh5eUFV1dX+Pj4YOzYsQAgxn3mzBkAuG7ckZGRGDFiBDZv3izu27x5M26++Wb07du3q06FOomJFlmd5cuX49ChQ3juuefQ0NCAv/3tbxg0aBAKCwsBtPymuGvXLvzwww/485//jEOHDiExMRF33XUX9Hq9maMnoq705JNP4pVXXsEDDzyATz/9FN9//z127NiBXr16dcsvV+3NbLV3bVEoFEaz9K1j77rrLnzzzTf4xz/+gW3btmHHjh1iIX1n4k5KSsJPP/2EwsJC5OXl4ddff+VsloVgokUWoU+fPgCAkydPGu3X6XQ4e/as+HqrIUOGYNGiRdi1axd+/vlnFBUVYe3ateLrUqkUd955J1asWIFjx47hlVdewY8//oidO3d2/8kQUY/5/PPPMWvWLCxfvhzTpk3DXXfdhdGjR1/1tHJERASOHDlyzWNFRETg5MmTaGpqaneMp6cnAFx1/NZZ9444fPgwfv/9dyxfvhz/+Mc/MGnSJMTHxyMwMNBoXHh4OABcN24AmDFjBmQyGT7++GNs3rwZjo6OSExM7HBM1H2YaJFFiI+Ph1wux5tvvglBEMT9//73v1FTU4N77rkHAKBWq9Hc3Gz03iFDhkAqlUKr1QIALl68eNXxo6OjAUAcQ0S2QSaTGV0zAGDVqlVXzTBNnToVBw8ebLMNQuv7p06dioqKCrz11lvtjunTpw9kMhl27dpl9Prbb79tUsxXHrP1z2+88YbROB8fH9x2221Yv3498vPz24ynlbe3N8aPH49NmzZh8+bNGDduHLy9vTscE3Uftncgi+Dj44OFCxfihRdewLhx43Dffffh5MmTePvttzFixAhxCvzHH39ESkoKpk+fjv79+6O5uRkbN26ETCbD1KlTAQAvvvgidu3ahXvuuQd9+vRBWVkZ3n77bQQHB2P06NHmPE0i6mL33nsvNm7cCJVKhYEDByI7Oxs//PADevXqZTTu2Wefxeeff47p06fjkUceQUxMDC5evIivv/4aa9euRVRUFJKSkvDhhx8iNTUVe/fuxZgxY6DRaPDDDz/giSeewKRJk6BSqTB9+nSsWrUKEokEERER2L59O8rKyjocc2RkJCIiIvDMM8+gqKgI7u7u2Lp1K6qqqq4a++abb2L06NEYPnw4HnvsMYSFheHcuXP45ptvkJubazQ2KSkJ06ZNAwC89NJLpv9jUvcw3wOPZO+ubO/Q6q233hIiIyMFR0dHwc/PT5gzZ45QVVUlvn7mzBnhkUceESIiIgSlUil4eXkJd9xxh/DDDz+IYzIzM4VJkyYJgYGBglwuFwIDA4WZM2cKv//+ew+eHRH1hKqqKiE5OVnw9vYWXF1dhYSEBOHEiRNCnz59hFmzZhmNraysFFJSUoSgoCBBLpcLwcHBwqxZs4SKigpxTH19vfDPf/5TCAsLExwdHQV/f39h2rRpQl5enjimvLxcmDp1quDs7Cx4enoKf/3rX4UjR4602d7BxcWlzbiPHTsmxMfHC66uroK3t7cwe/Zs4eDBg1cdQxAE4ciRI8KUKVMEDw8PQalUCgMGDBCef/75q46p1WoFT09PQaVSCQ0NDab/Y1K3kAjCH+YfiYiIyOo0NzcjMDAQEydOxL///W9zh0OXsEaLiIjIBmzbtg3l5eVISkoydyh0Bc5oERERWbE9e/bg0KFDeOmll+Dt7W3UqJXMjzNaREREVmzNmjWYM2cOfH198eGHH5o7HPoDzmgRERERdRPOaBERERF1EyZaRGQTdu3ahYkTJyIwMBASiQTbtm277nuysrIwfPhwKBQK9O3bV1wC5UqrV69GaGgolEol4uLisHfv3q4Pnohslk00LDUYDCguLoabm9sNrbBORJZFEATU1tYiMDDwqvXi/kij0SAqKgqPPPII7r///use++zZs7jnnnvw+OOPY/PmzcjMzMRf/vIXBAQEICEhAQCwZcsWpKamYu3atYiLi8PKlSuRkJCAkydPwtfXt0PnwOsTkW3q8PXJfC28uk5BQYEAgBs3bja6FRQUmHRNACB8+eWX1xwzf/58YdCgQUb7EhMThYSEBPH7kSNHCnPnzhW/1+v1QmBgoJCent7hWHh94sbNtrfrXZ9sYkbLzc0NAFBQUAB3d3czR0NEXUWtViMkJET8jHel7OxsxMfHG+1LSEjAvHnzALQsaL5//34sXLhQfF0qlSI+Ph7Z2dntHler1RqtqSlcet6I1yci29LR65NNJFqt0/Hu7u68kBHZoO645VZSUgI/Pz+jfX5+flCr1WhoaEBVVRX0en2bY06cONHucdPT0/HCCy9ctZ/XJyLbdL3rE4vhiYi60MKFC1FTUyNuBQUF5g6JiMzIJma0iIhM5e/vj9LSUqN9paWlcHd3h5OTE2QyGWQyWZtj/P392z2uQqGAQqHolpiJyPpwRouI7NKoUaOQmZlptG/Hjh0YNWoUAEAulyMmJsZojMFgQGZmpjiGiOh6mGgRkU2oq6tDbm4ucnNzAbS0b8jNzUV+fj6Allt6Vy62+/jjj+PMmTOYP38+Tpw4gbfffhuffvopnn76aXFMamoq1q1bhw0bNuD48eOYM2cONBoNkpOTe/TciMh6dSrRMqWB3xdffIHY2Fh4eHjAxcUF0dHR2Lhxo9EYQRCQlpaGgIAAODk5IT4+HqdOnepMaERkp3777TcMGzYMw4YNA9CSJA0bNgxpaWkAgAsXLohJFwCEhYXhm2++wY4dOxAVFYXly5fjvffeE3toAUBiYiKWLVuGtLQ0REdHIzc3FxkZGVcVyBMRtcfktQ63bNmCpKQkowZ+n332WbsN/LKyslBVVYXIyEjI5XJs374df//73/HNN9+IF7SlS5ciPT0dGzZsQFhYGJ5//nkcPnwYx44dg1KpvG5MarUaKpUKNTU1fKqHyIbYwmfbFs6BiK7W0c+2yYlWXFwcRowYgbfeegtAS81CSEgInnzySSxYsKBDxxg+fDjuuecevPTSSxAEAYGBgfj73/+OZ555BgBQU1MDPz8/fPDBB5gxY8Z1j2fKhayiTovfS2vhLHdAdIhHh+IlIvOwhSTFFs6ByFI06PQ4W6GBQRAgCIBBEFr+jJa7YwYBMBhavrZ+r3SUwtNFDi9nOVROjpBKu6ZdTEc/2yY9ddjZBn6tBEHAjz/+iJMnT2Lp0qUAWuooSkpKjBoHqlQqxMXFITs7u0OJlim+P1qK5748jDsjffHvh0d06bGJiIio65WpG/H+L+ew+dfzUDc2d/o4UgmgcnIUE6/Wrx4ujuL3ASolxvTz6bLYTUq0KioqOtXAr6amBkFBQdBqtZDJZHj77bdx1113AWhpGth6jD8es/W1P/pj52W1Wt3hc/B1a3nsuqxWe52RREREZE6ny2rx7q4z2HagGDq9AUBLoqR0lEIqkUAqkUAiwaU/tzQPNfoeEjQ06VGl0aFW2wyDAFTVN6GqvglnoGnz74z0d0PGPDMlWp3l5uaG3Nxc1NXVITMzE6mpqQgPD8ftt9/eqeO113m5I3zdWxOtxk69n4iIyFLU65pxoqQWdY3NiPB1RaBKafWLlwuCgD1nL2LdrjPIPFEm7o/t44nHbgtH/E1+nbr9p2s2oLpBhypNEy5qdKiqv7RpdLioaRK/D/Jw6srTMS3R8vb27lQDP6lUir59+wIAoqOjcfz4caSnp+P2228X31daWoqAgACjY0ZHR7d5vIULFyI1NVX8vnW9oY7wdWsprq+o08FgELrsXi0REVF3EQQBZbVaHLugxrFiNY5dUOP4BTXOVmhwZaW1q8IBfX1d0d/PFf393MTNz11h8QmY3iAg40gJ3t2Vh4OFNQAAiQS4e6AfHrstAjF9PG/o+HIHKXzdlGIe0FNMSrSubOA3efJkAJcb+KWkpHT4OAaDQbz1FxYWBn9/f2RmZoqJlVqtxp49ezBnzpw2338jnZd7ucohkbT8QC/W6+Dtyg7ORERkOfQGAXnldUYJ1bFiNSo1ujbH+7gp4K50wPnKetRpm5FbUI3cgmqjMW5Kh0tJlyv6+bphYKA7hgar4Cw3/wIxDTo9PttfgPd+Pov8i/UAWpKiaTHB+MvoMIT7uJo5whtj8r9wamoqZs2ahdjYWIwcORIrV640auCXlJSEoKAgpKenA2i5zRcbG4uIiAhotVp8++232LhxI9asWQOg5X7qvHnz8PLLL6Nfv35ie4fAwEAxmetKjjIpvJzlqNToUKbWMtEiIiKzEQQBhVUNOFhYjYMF1ThYUIMjxTWo1+mvGiuVABE+rrgpwB0DA90xMMAdNwW4w+dS7bGu2YBzlRr8XlqL30vrcKq0Fr+X1uJcZT1qG5ux/3wV9p+vEo8nk0oQ6e+G4b09MbyPB4aFeKJPL2eTZ76q63U4WdLyd50srcXZCg10zQZxpq31icCWry3f49L3AJB/sR7V9U0AAA9nRyTd3AdJt4TazP+fTU60EhMTUV5ejrS0NJSUlCA6OtqogV9+fj6k0st9UDUaDZ544gkUFhbCyckJkZGR2LRpExITE8Ux8+fPh0ajwWOPPYbq6mqMHj0aGRkZHeqh1Rk+boqWRKu2EQPBx62JiKhnXNTocLCwGocKasTkqq2ZKhe57KqEaoC/G5SOsnaPLXeQircKr6Rt1uNMeUsCdqq0DidLa3G4sAYl6kYcLVbjaLEaG389DwDo5SLHsN4eGNbbE8N6eyAq2AMuipZUQaNtxqmyOvxe0pJQ/V5ai5MltV3ycFlvL2f8ZUwYpsUEW8QsW1cyuY+WJTK1T03S+r3Y9Xs5Xp82FNNjO1bbRUQ9zxZ6UNnCOZBpmvUGXKhpREFVPQovNiD/Yj3OVmpwuLBGvDV2JUeZBDcFtNzKiwr2QHSIB8J9XCHr5hri4uoGHMivRk5+FXLyq3C0SC0+2ddKKgH6+7lBo2tGwcWGdo8V7OmEAX5u6O/vhr4+rnCWy3B5YqzlSUAJLj0VCIivSSSAi9wBsaFe3X6+Xa1b+mjZCh9XtnggIqLOq2lowtkKDfIv1qPgYj0Kq+ov/bkBxdUNaDa0P4cR7u2CqBAPRAWrEBXigZsC3K85U9VdAj2cEOjhhHuGtjyIpm3W42ixGjnnq3CgoBoHzlehuKYRJ0pqxff4uClaEio/Nwzwbym47+fnBleFXaYTHWKX/zKtLR7KmWgREZEJTpfV4Z2f8rAttwhN+vaTKblMiiBPJwR7OqG3lzNCvJwxKNAdQ4M8oHJ27MGIO07hIGup1+p9+em+kppGHC6qEYvpvVzkZozQOtlnouXGXlpERNRxBwuqsSYrD98dKxGLvP3dlejt5YxgLyeEeLYkUyGeTujdyxl+bkqbaB/kr1LCX9Wz7RBsjZ0mWi3/0XBGi4iI2iMIAv53uhJvZ53GL3mV4v67B/rh8dsjjGZ+iNpjl4mWD5fhISKidugNAr47WoI1WXk4XNTSONNBKsGk6CDMuT0cfX3drnMEosvsMtESbx2qtRAEweK75RIRUffTNuux7UAR3vnpDM5UtKyDp3SUYsaI3ph9W3iXL81C9sE+E61LxfANTXrUaZvhprTMwkQiIuoeDTo9imsaUFTV8pTg+Yv1+DKnCCXqltpdlZMjZo3qg4dvDWMBON0Qu0y0nOUOcFU4oE7bjPJaLRMtIiIb09ikx+myOhRWNaCouiWZKqpqEJOr9paz8XNXYPaYcMwY2ZstC6hL2O1/RT5uCtRpm1FWq7X6dZSIiKiltio7rxLbcovw3ZES1GqbrzneRS5DkGdLL6kgDydEh3jgvuhAKBx6vqcV2S67TrTOVmhYEE9EZMUEQcDhohp8lVuM/xwsNrqmezo7oncvFwR7OCHQQ4kgDycEeToj0EOJYA9nuDs5sEaXup3dJlqtBfFs8UBEZH3OV2qw7UAxvjpYhDPlGnG/h7MjJgwJwOToIMT28bSJXlZk3ew40WrppcWmpURE1qGiTovtB4uxLbcYuQXV4n6FgxR3DfTDpOggjO3vA7mD1HxBEv2B3SZarb20ytWc0SIismQGg4DXvz+Jd3edgf7SGoJSCXBrX29Mjg5CwmB/Fq6TxbLb/zJ92bSUiMji1euaMe+TXHx/rBQAEBXigcnRgbh3aKD4CzORJbPfRIsLSxMRWbRSdSP+suE3HC6qgVwmxevTh2JSdJC5wyIyif0mWqzRIiKyWMeK1Xh0wz5cqGmEl4sc7/45BrGhXuYOi8hkdptotU45V9U3QddsYPEkEZGF2HmiDCkf5UCj0yPCxwXrHx6BPr1czB0WUafYbXbh6ewIR1nLY7/ldbx9SERkCTb8cg6PbtgHjU6PWyJ64Ys5tzLJIqtmt4mWRCKBjyvrtIiILIHeIGDJ10ex+OujMAhAYmwINjwyEipnLpFG1s1ubx0CgI+7EsU1jShTs06LiMhc6rTN+NvHB/DjiTIAwILxkfjrbeHs2k42wb4TLVe2eCAiMqfi6gY8uuE3HL+ghsJBipWJ0Rg/JMDcYRF1GbtOtFpbPDDRIiLqeYcLa/Dohn0oq9XC21WB92bFIjrEw9xhEXUp+060uN4hEVGPEgQBhwpr8OWBImzZV4CGJj0G+Lnh3w/HItjT2dzhEXU5u060xGV42EuLiKhbFVU3YNuBInyRU4i8KxaBHtvfB2/9aRjclCx6J9tk14nW5aalnNEiIupqtY1N+O/hEnxxoBC/nrko7lc4SJEwyB9ThgdhbD8fSKUseifb1an2DqtXr0ZoaCiUSiXi4uKwd+/edseuW7cOY8aMgaenJzw9PREfH3/V+IcffhgSicRoGzduXGdCM4m43iEXliYi6hLNegN2nizD3z4+gNiXf8D8rYfEJOvmcC+8Nm0oflsUjzdnDsMdA3yZZJHNM3lGa8uWLUhNTcXatWsRFxeHlStXIiEhASdPnoSvr+9V47OysjBz5kzccsstUCqVWLp0Ke6++24cPXoUQUGX16waN24c3n//ffF7haL7FwttLYavqNPCYBD4gSci6qTGJj3eyDyFz34rRMUVTaAjfFxw//BgTB4WhCAPJzNGSGQeJidaK1aswOzZs5GcnAwAWLt2Lb755husX78eCxYsuGr85s2bjb5/7733sHXrVmRmZiIpKUncr1Ao4O/vb2o4N6SXS0ui1WwQUFWvQy9XrgRPRGQqbbMeczbtx86T5QAALxc57osKxP3DgzAkSMV+WGTXTEq0dDod9u/fj4ULF4r7pFIp4uPjkZ2d3aFj1NfXo6mpCV5exouDZmVlwdfXF56envi///s/vPzyy+jVq5cp4ZlM7iCFl4scFzU6lNVqmWgREZlI26zH4xtbkiyloxSvTYvC+MH+cJTZ7cIjREZM+iRUVFRAr9fDz8/PaL+fnx9KSko6dIx//OMfCAwMRHx8vLhv3Lhx+PDDD5GZmYmlS5fip59+wvjx46HX69s8hlarhVqtNto6S6zTYkE8kU0wpYa0qakJL774IiIiIqBUKhEVFYWMjAyjMXq9Hs8//zzCwsLg5OSEiIgIvPTSSxAEobtPxeK1zGTliEnW+odH4L6oQCZZRFfo0acOX331VXzyySfIysqCUqkU98+YMUP885AhQzB06FBEREQgKysLd95551XHSU9PxwsvvNAlMfm4KXCipJa9tIhsgKk1pIsWLcKmTZuwbt06REZG4rvvvsOUKVPwyy+/YNiwYQCApUuXYs2aNdiwYQMGDRqE3377DcnJyVCpVPjb3/7W06doMbTNejyxKQc/nihrSbJmjcAtEd7mDovI4pj0a4e3tzdkMhlKS0uN9peWll63vmrZsmV49dVX8f3332Po0KHXHBseHg5vb2+cPn26zdcXLlyImpoacSsoKDDlNIz4iDNa7KVFZO2urCEdOHAg1q5dC2dnZ6xfv77N8Rs3bsRzzz2HCRMmIDw8HHPmzMGECROwfPlyccwvv/yCSZMm4Z577kFoaCimTZuGu++++5ozZbZO26zH3M05yDxRBoWDFP+eNQK39GWSRdQWkxItuVyOmJgYZGZmivsMBgMyMzMxatSodt/32muv4aWXXkJGRgZiY2Ov+/cUFhaisrISAQFtr3elUCjg7u5utHWW2EuLLR6IrFprDemVZQnXqyHVarVGs+sA4OTkhN27d4vf33LLLcjMzMTvv/8OADh48CB2796N8ePHd8NZWD5dswFzN+fgh+OXk6xbmWQRtcvkW4epqamYNWsWYmNjMXLkSKxcuRIajUZ8CjEpKQlBQUFIT08H0DLtnpaWho8++gihoaFiLZerqytcXV1RV1eHF154AVOnToW/vz/y8vIwf/589O3bFwkJCV14qm3jMjxEtuFaNaQnTpxo8z0JCQlYsWIFbrvtNkRERCAzMxNffPGFUX3oggULoFarERkZCZlMBr1ej1deeQUPPvhgm8fUarXQai9fT26khtTS6JoNeOKKJOu9WbEY3Y9JFtG1mFyxmJiYiGXLliEtLQ3R0dHIzc1FRkaGeHHLz8/HhQsXxPFr1qyBTqfDtGnTEBAQIG7Lli0DAMhkMhw6dAj33Xcf+vfvj0cffRQxMTH4+eefe7SXFhMtIvvzxhtvoF+/foiMjIRcLkdKSgqSk5MhlV6+NH766afYvHkzPvroI+Tk5GDDhg1YtmwZNmzY0OYx09PToVKpxC0kJKSnTqdb6ZoNmPtRDn44Xgq5gxTrkmIxpp+PucMisngSwQYenVGr1VCpVKipqTH5NuKeM5VIfPdXhPZyRtazd3RThETUGaZ8tnU6HZydnfH5559j8uTJ4v5Zs2ahuroaX331VbvvbWxsRGVlJQIDA7FgwQJs374dR48eBQCEhIRgwYIFmDt3rjj+5ZdfxqZNm9qcKWtrRiskJKRT1ydLoWs2IOWjHHx/rCXJei8pFrf1Z5JF9q2j1ye7fwbX153rHRLZgs7WkAKAUqlEUFAQmpubsXXrVkyaNEl8rb6+3miGC2iZiTcYDG0eqytrSC1Bk96AJz++nGStY5JFZBK7XlQauFyjVa/TQ6NthovC7v9JiKyWqTWke/bsQVFREaKjo1FUVIQlS5bAYDBg/vz54jEnTpyIV155Bb1798agQYNw4MABrFixAo888ohZzrEnNelbZrK+O9qSZL375xiMZZJFZBK7zypcFA5wkcug0elRVqtFGBMtIquVmJiI8vJypKWloaSkBNHR0VfVkF45O9XY2IhFixbhzJkzcHV1xYQJE7Bx40Z4eHiIY1atWoXnn38eTzzxBMrKyhAYGIi//vWvSEtL6+nT61EGg4CnPjnQkmTJWpKs2wdc3YuMiK7N7mu0AOD213fiXGU9tjx2M+LCu3fZHyLquBv9bFsCaz2HFTt+x5uZpyCXSfHOn2NwRySTLKIrsUbLBGIvLdZpERHhh2OleDPzFAAg/f4hTLKIbgATLQA+bPFARAQAOFNeh6e35AIAZo3qg6kxweYNiMjKMdECF5YmIgIAjbYZf924H7XaZsT28cQ/7xlo7pCIrB4TLXC9QyIiQRDw7OcHcaqsDr5uCrz94HDIHfi/CKIbxU8RLtdo8dYhEdmrd3edwbeHS+Aok2DNQ8PFHoNEdGOYaIHrHRKRfdt9qgJLM1q63KdNHISYPl5mjojIdjDRwuX1DlmjRUT2prCqHk9+nAODAEyLCcZDcb3NHRKRTWGiBcDHtSXRuqjRQdfc9rIaRES2prFJj8c37UdVfROGBKnw8uTBkEgk5g6LyKYw0QLg6SyHg7Tl4lJRx1ktIrJ9giDgn18ewZEiNbxc5Fjz0HAoHWXmDovI5jDRAiCVSsQnD1mnRUT2YNOv57E1pxBSCfDWzGEI9nQ2d0hENomJ1iXspUVE9mL/+Yt44T/HAAALxkfilr7eZo6IyHYx0bqEvbSIyB6UqRvx+KYcNBsE3DM0ALPHhJs7JCKbxkTrEp/W9Q7VnNEiItukazbgic05KK/Vor+fK16bOpTF70TdjInWJWIvLRbDE5GNWppxAr+dr4Kb0gHv/DkWLgoHc4dEZPOYaF0i3jrkjBYR2aCKOi0+zD4HAFjxQDTCvF3MGxCRnWCidcnl7vCs0SIi27NlXwGa9AKiQzxw10A/c4dDZDeYaF3Suq4XnzokIlujNwjY/Ot5AEDSqD5mjobIvjDRuqR1RquiTguDQTBzNEREXSfzeCmKaxrh6eyICUMCzB0OkV1honWJ96VleJr0AqobmswcDRFR19l4aTbrgREh7P5O1MOYaF0id5DC09kRAHtpEZHtOFNeh59PVUAiAR6K421Dop7GROsKvuylRUQ2ZvOefADAHQN8EeLFZXaIelqnEq3Vq1cjNDQUSqUScXFx2Lt3b7tj161bhzFjxsDT0xOenp6Ij4+/arwgCEhLS0NAQACcnJwQHx+PU6dOdSa0G+LrzvUOich2NOj0+Oy3AgDAn1kET2QWJidaW7ZsQWpqKhYvXoycnBxERUUhISEBZWVlbY7PysrCzJkzsXPnTmRnZyMkJAR33303ioqKxDGvvfYa3nzzTaxduxZ79uyBi4sLEhIS0NjYs7fwfFy53iER2Y6vDxZB3diM3l7OGNvPx9zhENklkxOtFStWYPbs2UhOTsbAgQOxdu1aODs7Y/369W2O37x5M5544glER0cjMjIS7733HgwGAzIzMwG0zGatXLkSixYtwqRJkzB06FB8+OGHKC4uxrZt227o5Ezl4871DonINgiCgA+zW4rgH7q5N6RSLrVDZA4mJVo6nQ779+9HfHz85QNIpYiPj0d2dnaHjlFfX4+mpiZ4eXkBAM6ePYuSkhKjY6pUKsTFxXX4mF2ltUaLtw6JyNodKKjG0WI15A5STI8JMXc4RHbLpIWuKioqoNfr4edn3FXYz88PJ06c6NAx/vGPfyAwMFBMrEpKSsRj/PGYra/9kVarhVZ7ORlSq9UdPodrae2lxVuHRGTtNl2azZo4NBCeLnIzR0Nkv3r0qcNXX30Vn3zyCb788ksolcpOHyc9PR0qlUrcQkK65rc1HzcWwxOR9aus02L7oQsA2AmeyNxMSrS8vb0hk8lQWlpqtL+0tBT+/v7XfO+yZcvw6quv4vvvv8fQoUPF/a3vM+WYCxcuRE1NjbgVFBSYchrtEme01KzRIiLr9elvhdDpDRgarEJUiIe5wyGyayYlWnK5HDExMWIhOwCxsH3UqFHtvu+1117DSy+9hIyMDMTGxhq9FhYWBn9/f6NjqtVq7Nmzp91jKhQKuLu7G21doXW9Q41OD422uUuOSUTUk/QGAZsudYL/882czSIyN5NqtAAgNTUVs2bNQmxsLEaOHImVK1dCo9EgOTkZAJCUlISgoCCkp6cDAJYuXYq0tDR89NFHCA0NFeuuXF1d4erqColEgnnz5uHll19Gv379EBYWhueffx6BgYGYPHly151pB7gqHOAsl6Fep0d5rRYuCpP/eYiIzCrrZBmKqhvg4eyIiVGB5g6HyO6ZnEkkJiaivLwcaWlpKCkpQXR0NDIyMsRi9vz8fEillyfK1qxZA51Oh2nTphkdZ/HixViyZAkAYP78+dBoNHjsscdQXV2N0aNHIyMj44bquDrLx02B85X1KKvVItTbpcf/fiKiG9Ha0uGBWK5rSGQJJIIgCOYO4kap1WqoVCrU1NTc8G3E6Wt/wb5zVXjrT8Nw71D+NkhkTl352TaXnjyH85UajH09CxIJkPXM7ejTi78sEnWXjn62udbhH7CXFhFZq9barLH9fZhkEVkIJlp/4MNeWkRkhRqb9Pj0t0IALIInsiRMtP5ATLTUTLSIyHp8fbAYNQ1NCPJwwu0DfM0dDhFdwkTrDy53h2cvLSKyHq23DR+6uQ9kXNeQyGIw0fqD1l5arNEiImtxsKAahwprIJdJ8UBssLnDIaIrMNH6A18uw0NEVqa1pcO9QwPQy1Vh5miI6EpMtP6gtUarUqNDk95g5miIiK6tSqPDfw4VAwAe4rqGRBaHidYfeDnL4XCpvqGijrNaRNZm9erVCA0NhVKpRFxcHPbu3dvu2KamJrz44ouIiIiAUqlEVFQUMjIyrhpXVFSEhx56CL169YKTkxOGDBmC3377rTtPo8M+/a0AumYDBge5YxjXNSSyOEy0/kAqlcDblbcPiazRli1bkJqaisWLFyMnJwdRUVFISEhAWVlZm+MXLVqEd955B6tWrcKxY8fw+OOPY8qUKThw4IA4pqqqCrfeeiscHR3x3//+F8eOHcPy5cvh6enZU6fVLoNBwKY9l9c1lEhYBE9kaZhotcHXnS0eiKzRihUrMHv2bCQnJ2PgwIFYu3YtnJ2dsX79+jbHb9y4Ec899xwmTJiA8PBwzJkzBxMmTMDy5cvFMUuXLkVISAjef/99jBw5EmFhYbj77rsRERHRU6fVrp9+L0fBxQa4Kx1wX1SQucMhojYw0WqDjyublhJZG51Oh/379yM+Pl7cJ5VKER8fj+zs7Dbfo9Vqr1pT1cnJCbt37xa///rrrxEbG4vp06fD19cXw4YNw7p167rnJEzUWps1NSYYTnKua0hkiZhotUGc0WIvLSKrUVFRAb1eLy5w38rPzw8lJSVtvichIQErVqzAqVOnYDAYsGPHDnzxxRe4cOGCOObMmTNYs2YN+vXrh++++w5z5szB3/72N2zYsKHNY2q1WqjVaqOtuxRVNQAAolmbRWSxmGi1wYfrHRLZhTfeeAP9+vVDZGQk5HI5UlJSkJycDKn08qXRYDBg+PDh+Ne//oVhw4bhsccew+zZs7F27do2j5meng6VSiVuISEh3RZ/6zXKz115nZFEZC5MtNrA9Q6JrI+3tzdkMhlKS0uN9peWlsLf37/N9/j4+GDbtm3QaDQ4f/48Tpw4AVdXV4SHh4tjAgICMHDgQKP33XTTTcjPz2/zmAsXLkRNTY24FRQU3OCZta9U3TLr3tr/j4gsDxOtNvgy0SKyOnK5HDExMcjMzBT3GQwGZGZmYtSoUdd8r1KpRFBQEJqbm7F161ZMmjRJfO3WW2/FyZMnjcb//vvv6NOn7Z5VCoUC7u7uRlt30GibodHpAVxe0YKILI+DuQOwRGJ3eDVrtIisSWpqKmbNmoXY2FiMHDkSK1euhEajQXJyMgAgKSkJQUFBSE9PBwDs2bMHRUVFiI6ORlFREZYsWQKDwYD58+eLx3z66adxyy234F//+hceeOAB7N27F++++y7effdds5xjq9ZfBJ3lMrgqeCknslT8dLZBXO+wTgtBENibhshKJCYmory8HGlpaSgpKUF0dDQyMjLEAvn8/Hyj+qvGxkYsWrQIZ86cgaurKyZMmICNGzfCw8NDHDNixAh8+eWXWLhwIV588UWEhYVh5cqVePDBB3v69IyU8bYhkVVgotUGb1c5AKBJL6C6vgmeLnIzR0REHZWSkoKUlJQ2X8vKyjL6fuzYsTh27Nh1j3nvvffi3nvv7YrwukzrjJavG28bElky1mi1QeEgg4ezIwDWaRGRZWq9Nvm4c0aLyJIx0WrH5YJ41mkRkeVpvTbx1iGRZWOi1Q5f9tIiIgtWrmYPLSJrwESrHeylRUSWrJQzWkRWgYlWO8Rbh1xYmogsUOu1icXwRJaNiVY7Wme0yuuYaBGR5RGfOmQxPJFFY6LVjtZeWmVsWkpEFqaxSY+ahiYAvHVIZOmYaLXDx/XSjBZrtIjIwrRel+QOUqicHM0cDRFdS6cSrdWrVyM0NBRKpRJxcXHYu3dvu2OPHj2KqVOnIjQ0FBKJBCtXrrxqzJIlSyCRSIy2yMjIzoTWZVqn41kMT0SWRuyh5argyhVEFs7kRGvLli1ITU3F4sWLkZOTg6ioKCQkJKCsrKzN8fX19QgPD8err74Kf3//do87aNAgXLhwQdx2795tamhdqnU6vk7bjHpds1ljISK6UvmlJw79WJ9FZPFMTrRWrFiB2bNnIzk5GQMHDsTatWvh7OyM9evXtzl+xIgReP311zFjxgwoFO1fFBwcHODv7y9u3t7epobWpVwVDnBylAHg7UMisixcfofIepiUaOl0Ouzfvx/x8fGXDyCVIj4+HtnZ2TcUyKlTpxAYGIjw8HA8+OCDyM/Pb3esVquFWq022rqaRCJhLy0iskilrQtKc0aLyOKZlGhVVFRAr9fDz8/PaL+fnx9KSko6HURcXBw++OADZGRkYM2aNTh79izGjBmD2traNsenp6dDpVKJW0hISKf/7mthLy0iskSXe2gx0SKydBbx1OH48eMxffp0DB06FAkJCfj2229RXV2NTz/9tM3xCxcuRE1NjbgVFBR0S1ytvy2Wc71DIrIgvHVIZD0cTBns7e0NmUyG0tJSo/2lpaXXLHQ3lYeHB/r374/Tp0+3+bpCobhmvVdXab2I8dYhEVkS8alD3joksngmzWjJ5XLExMQgMzNT3GcwGJCZmYlRo0Z1WVB1dXXIy8tDQEBAlx2zM1ijRUSWqJzrHBJZDZNmtAAgNTUVs2bNQmxsLEaOHImVK1dCo9EgOTkZAJCUlISgoCCkp6cDaCmgP3bsmPjnoqIi5ObmwtXVFX379gUAPPPMM5g4cSL69OmD4uJiLF68GDKZDDNnzuyq8+wUJlpEZGma9QZUanQAeOuQyBqYnGglJiaivLwcaWlpKCkpQXR0NDIyMsQC+fz8fEillyfKiouLMWzYMPH7ZcuWYdmyZRg7diyysrIAAIWFhZg5cyYqKyvh4+OD0aNH49dff4WPj88Nnt6Naf1tke0diMhSVNTpIAiATCpBLxe5ucMhouswOdECgJSUFKSkpLT5Wmvy1Co0NBSCIFzzeJ988klnwuh2rb8tshieiCxF2aXrkY+rAlIpu8ITWTqLeOrQUrXeOqzU6NCsN5g5GiIioLS1tQML4YmsAhOta+jlIodMKoEgtEzXExGZWxkL4YmsChOta5BKJfB2bamBYJ0WEVmC1malPiyEJ7IKTLSu43IvLdZpEZH5XW5WyhktImvAROs62OKBiCyJ2EOLNVpEVoGJ1nW0/tZYWFVv5kiIiC7/0ufHW4dEVoGJ1nUM7+MJAPj6YDH0hmu3qSAi6m5lfOqQyKow0bqOiUMD4a50QMHFBuz6vdzc4RCRHTMYBJTXcUFpImvCROs6nOQyTI8NAQBs/PW8maMhIntWqdFBbxAgkUB8IpqILBsTrQ546OY+AICdJ8tQcJG1WkRkHq1PP/dykcNBxss3kTXgJ7UDwrxdMKafNwQB2LSHs1pEZB6thfDsoUVkPZhoddCfL81qfbqvAI1NejNHQ0T2qFzNHlpE1oaJVgfdeZMfgjycUFXfhG8OXTB3OERkh7j8DpH1YaLVQTKpBH+K6w2ARfFEZB5iDy133jokshZMtEzwQGwIHGUS5BZU43BhjbnDISI7wx5aRNaHiZYJfNwUGD84AACwibNaRNTDSnnrkMjqMNEyUdKolqL4rw4Woaa+yczREJE9aZ3R4lOHRNaDiZaJYvp4ItLfDY1NBny2v8Dc4RCRnRAEAeW1fOqQyNow0TKRRCLBny/Nam3ekw8D1z8koh5Q09AEnd4AoKWMgYisAxOtTpgcHQQ3hQPOVmjwv7wKc4dDRHag9YlDlZMjlI4yM0dDRB3FRKsTXBQOmBoTDAD4MJtF8USWZPXq1QgNDYVSqURcXBz27t3b7timpia8+OKLiIiIgFKpRFRUFDIyMtod/+qrr0IikWDevHndEPm1tdZn+fGJQyKrwkSrkx66uaWnVubxUhRVN5g5GiICgC1btiA1NRWLFy9GTk4OoqKikJCQgLKysjbHL1q0CO+88w5WrVqFY8eO4fHHH8eUKVNw4MCBq8bu27cP77zzDoYOHdrdp9Gmy81KWQhPZE2YaHVSX183jArvBYMAfLwn39zhEBGAFStWYPbs2UhOTsbAgQOxdu1aODs7Y/369W2O37hxI5577jlMmDAB4eHhmDNnDiZMmIDly5cbjaurq8ODDz6IdevWwdPTsydO5SplLIQnskpMtG5Aa6uHT/blQ9vM9Q+JzEmn02H//v2Ij48X90mlUsTHxyM7O7vN92i1WiiVxjNETk5O2L17t9G+uXPn4p577jE6dnu0Wi3UarXR1hVK1S0zWj68dUhkVZho3YD4gX7wc1egok6HjCMl5g6HyK5VVFRAr9fDz8/PaL+fnx9KStr+fCYkJGDFihU4deoUDAYDduzYgS+++AIXLlxez/STTz5BTk4O0tPTOxRHeno6VCqVuIWEhHT+pK5weUaLtw6JrEmnEi1Tik2PHj2KqVOnIjQ0FBKJBCtXrrzhY1oKR5kUM0e21GqxUzyR9XnjjTfQr18/REZGQi6XIyUlBcnJyZBKWy6NBQUFeOqpp7B58+arZr7as3DhQtTU1IhbQUHX9NsrV/PWIZE1MjnRMrXYtL6+HuHh4Xj11Vfh7+/fJce0JDNH9oaDVIJ956pw/ELX3CIgItN5e3tDJpOhtLTUaH9paWm71x4fHx9s27YNGo0G58+fx4kTJ+Dq6orw8HAAwP79+1FWVobhw4fDwcEBDg4O+Omnn/Dmm2/CwcEBev3VJQMKhQLu7u5GW1co4/I7RFbJ5ETL1GLTESNG4PXXX8eMGTOgULR9gTD1mJbEz12JhEEtF/GNnNUiMhu5XI6YmBhkZmaK+wwGAzIzMzFq1KhrvlepVCIoKAjNzc3YunUrJk2aBAC48847cfjwYeTm5opbbGwsHnzwQeTm5kIm67l+Vq23Dv3ceeuQyJqYlGh1pti0O47ZXcWmnfXQzS1F8dsOFEHdyPUPicwlNTUV69atw4YNG3D8+HHMmTMHGo0GycnJAICkpCQsXLhQHL9nzx588cUXOHPmDH7++WeMGzcOBoMB8+fPBwC4ublh8ODBRpuLiwt69eqFwYMH99h51WmbUa9rmT3zZTE8kVUxKdHqTLFpdxyzu4pNO+vmcC/083VFvU6PL3OKzBoLkT1LTEzEsmXLkJaWhujoaOTm5iIjI0O8vuTn5xsVujc2NmLRokUYOHAgpkyZgqCgIOzevRseHh5mOoO2lV164tBV4QBnuYOZoyEiU1jlJ3bhwoVITU0Vv1er1WZNtlrXP0z76ig2/noeSaP6QCKRmC0eInuWkpKClJSUNl/Lysoy+n7s2LE4duyYScf/4zF6AntoEVkvk2a0OlNs2h3H7K5i0xsxZVgQnOUynC6rQ/aZSnOHQ0Q2ROyhxUSLyOqYlGjdSLFpTx7THNyUjpgyLAgAWz0QUdcqb53RYiE8kdUx+alDU4tNdTqd+LSOTqdDUVERcnNzcfr06Q4f01r8+VKn+O+OlqKY6x8SURfhrUMi62VyjVZiYiLKy8uRlpaGkpISREdHX1Vs2trsDwCKi4sxbNgw8ftly5Zh2bJlGDt2rFjrcL1jWotIf3fEhXlhz9mLePbzg/jwkTjIpKzVIqIb01oMz0SLyPpIBEEQzB3EjVKr1VCpVKipqTF7vdbpslpMXPU/NDTp8czd/ZHyf/3MGg+RNbOkz3ZndcU5/Gndr/glrxIrE6Mx+VKJAhGZV0c/21zrsIv19XXDS5Nb+uus2PE79p69aOaIiMja8dYhkfViotUNpsUE4/5hQTAIwN8+PoCLGp25QyIiKybeOmSzUiKrw0Srm7w0eTDCvV1Qom7Es58dhA3coSUiM2hs0kPd2AwA8HHjU4dE1oaJVjdxUTjgrT8Nh9xBiswTZfj37rPmDomIrFCZuuW2ocJBCnelVfaYJrJrTLS60cBAdzx/70AAwNKMEzhYUG3egIjI6pTVXr5tyBUniKwPE61u9lBcb0wY4o8mvYCUj3O46DQRmeRyITxvGxJZIyZa3UwikSD9/qEI9nRCwcUGLNh6iPVaRNRhrYXwfiyEJ7JKTLR6gMrJEW/9aTgcpBJ8e7gEm/fkmzskIrISnNEism5MtHpIdIgH/jEuEgDw4vZjOH5BbeaIiMgatCZaXFCayDox0epBj44Ow/9F+kLXbMDcj3Kg0TabOyQisnBsVkpk3Zho9SCpVIJl06Pg767EmXIN0r46au6QiMjCXW5WyluHRNaIiVYP83KR440Z0ZBKgK05hdi6v9DcIRGRBeOMFpF1Y6JlBnHhvfB0fH8AwPNfHcHpsjozR0RElkjXbBCX8GKiRWSdmGiZyRN39MUtEb1Qr9Nj7uYcVNRpzR0SEVmY1uuCg1QCT2e5maMhos5gomUmMqkEKxOj4e2qwMnSWkxe/T+cLKk1d1hEZEGuvG0olbIrPJE1YqJlRr7uSmz5680I7eWMwqoGTF3zC7JOlpk7LCKyEK2F8D4shCeyWky0zCzCxxVfPnEr4sK8UKdtxiMf7MMH/+MC1ETEQngiW8BEywJ4usix8dE4PBAbDIMALPnPMTy/7Qia9QZzh0ZEZsREi8j6MdGyEHIHKZZOHYqF4yMhkQAbfz2P5A/2oaaBi1AT2SuxhxaX3yGyWky0LIhEIsFfx0Zg7UMxcHKU4edTFZi65hfkV9abOzQiMgNxRosLShNZLSZaFihhkD8+e3wU/N2VOF1Wh0mrd2PfuYvmDouIelhZbeuMFhMtImvFRMtCDQ5S4auUWzE0WIWq+iY8uG4Pu8gT2ZkydcuMlh+fOiSyWky0LJifuxJbHhuFCUP8odMb8PfPDuL1707AYBDMHRoRdTO9QRAblnJGi8h6MdGycE5yGd6aORwpd/QFAKzemYdHN+zD+UqNmSMjou5UqdHCIABSCdDLlYkWkbViomUFpFIJnkkYgBUPREEuk2LnyXLctWIXXss4gTpts7nDI6Ju0HrbsJerAjJ2hSeyWp1KtFavXo3Q0FAolUrExcVh79691xz/2WefITIyEkqlEkOGDMG3335r9PrDDz8MiURitI0bN64zodm0+4cH45u/jcaYft7Q6Q14OysP/7csC1v3F/J2IpGNKWcPLSKbYHKitWXLFqSmpmLx4sXIyclBVFQUEhISUFbW9tIxv/zyC2bOnIlHH30UBw4cwOTJkzF58mQcOXLEaNy4ceNw4cIFcfv44487d0Y2rp+fGz58ZCTWJcWiTy9nlNVq8ffPDuL+Nb/gQH6VucMjoi5SquYTh0S2wOREa8WKFZg9ezaSk5MxcOBArF27Fs7Ozli/fn2b49944w2MGzcOzz77LG666Sa89NJLGD58ON566y2jcQqFAv7+/uLm6enZuTOyAxKJBHcN9MP3T9+GBeMj4SKXIbegGlPe/gWpn+aKF2gisl6Xu8LziUMia2ZSoqXT6bB//37Ex8dfPoBUivj4eGRnZ7f5nuzsbKPxAJCQkHDV+KysLPj6+mLAgAGYM2cOKisr241Dq9VCrVYbbfZI4SDD42MjsPOZ2zEtJhgA8EVOEe5YloXVO0+jsUlv5giJqLNae2j5sVkpkVUzKdGqqKiAXq+Hn5+f0X4/Pz+UlJS0+Z6SkpLrjh83bhw+/PBDZGZmYunSpfjpp58wfvx46PVtJwrp6elQqVTiFhISYspp2BxfdyWWTY/CV3NvxbDeHqjX6fH6dydx9//bhe+OlkAQWL9FZG1ai+F92EOLyKpZxFOHM2bMwH333YchQ4Zg8uTJ2L59O/bt24esrKw2xy9cuBA1NTXiVlBQ0LMBW6ioEA9sffwW/L/EKPi5K5B/sR5/3bgff1q3B4cLa8wdHhGZgAtKE9kGkxItb29vyGQylJaWGu0vLS2Fv79/m+/x9/c3aTwAhIeHw9vbG6dPn27zdYVCAXd3d6ONWkilEkwZFowf/347Uu7oC7mDFNlnKjHxrd146pMDKLjIdROJrAGfOiSyDSYlWnK5HDExMcjMzBT3GQwGZGZmYtSoUW2+Z9SoUUbjAWDHjh3tjgeAwsJCVFZWIiAgwJTw6AouCgc8kzAAP/59LO4fFgQA+Cq3GHcu/wmvfHMM1fU6M0dIRO0RBOFyosVbh0RWzeRbh6mpqVi3bh02bNiA48ePY86cOdBoNEhOTgYAJCUlYeHCheL4p556ChkZGVi+fDlOnDiBJUuW4LfffkNKSgoAoK6uDs8++yx+/fVXnDt3DpmZmZg0aRL69u2LhISELjpN+xXs6YwVidHY/uRo3Nq3F3R6A9b9fBa3vbYT7+7KY8E82RxT+vw1NTXhxRdfREREBJRKJaKiopCRkWE0Jj09HSNGjICbmxt8fX0xefJknDx5slvPobq+CTq9AQDgw67wRFbN5EQrMTERy5YtQ1paGqKjo5Gbm4uMjAyx4D0/Px8XLlwQx99yyy346KOP8O677yIqKgqff/45tm3bhsGDBwMAZDIZDh06hPvuuw/9+/fHo48+ipiYGPz8889QKHiB6SqDg1TY9GgcPkgegUh/N6gbm/Gvb0/gzuU/YduBIjY8JZtgap+/RYsW4Z133sGqVatw7NgxPP7445gyZQoOHDggjvnpp58wd+5c/Prrr9ixYweamppw9913Q6PpvmWwSi89cejp7Ai5g0WU0hJRJ0kEG3gkTa1WQ6VSoaamhvVaHaA3CNiaU4gV3/+Okks9twYHueO58Tfhlr7eZo6O6DJTP9txcXEYMWKE2KfPYDAgJCQETz75JBYsWHDV+MDAQPzzn//E3LlzxX1Tp06Fk5MTNm3a1ObfUV5eDl9fX/z000+47bbbuvwcAGDX7+VIWr8XA/zc8N3T1/87iKjndfSzzV+V7JBMKsEDsSHY+czteDZhAFwVDjhSpMaf3tuDh9/fi+y8SraEIKvTmT5/Wq0WSqVxDZSTkxN2797d7t9TU9PyBK+Xl1cXRN028YlD9tAisnoO5g6AzMdJLsPcO/pixogQrPrxNDb9eh5ZJ8uRdbIcYd4umDEiBFNjguHNGhGyAtfq83fixIk235OQkIAVK1bgtttuQ0REBDIzM/HFF1+028PPYDBg3rx5uPXWW8Xyhz/SarXQarXi951pqNzarJRd4YmsH2e0CL1cFVhy3yDsSB2LmSND4CKX4WyFBun/PYFR6ZmY+1EO/ne6gnVcZHPeeOMN9OvXD5GRkZDL5UhJSUFycjKk0rYvjXPnzsWRI0fwySeftHvMrmio3NqslDNaRNaPiRaJwrxdkH7/UOz5ZzzS7x+CqGAVmvQCvjl0AQ++twd3LM/Cmqw88bFzIkvSmT5/Pj4+2LZtGzQaDc6fP48TJ07A1dUV4eHhV41NSUnB9u3bsXPnTgQHB7cbR1c0VGYPLSLbwUSLruKqcMDMkb3xVcpobH9yNB66uTdcFQ44X1mPpRkts1xzNu3Hrt/LOctFFqMzff5aKZVKBAUFobm5GVu3bsWkSZPE1wRBQEpKCr788kv8+OOPCAsLu+axuqKhMm8dEtkO1mjRNQ0OUuHloCF4bsJN2H7oAj7em48D+dX475ES/PdICQJUSsSFeSGmjyeG9fZEpL8bHGTM38k8UlNTMWvWLMTGxmLkyJFYuXLlVX3+goKCkJ6eDgDYs2cPioqKEB0djaKiIixZsgQGgwHz588Xjzl37lx89NFH+Oqrr+Dm5iau06pSqeDk5NQt58FieCLbwUSLOsRZ7oAHYkPwQGwIjl9Q45O9+fjiQBEu1DRiW24xtuUWXxonQ1SwB4b38WhJvkI84ekiN3P0ZC8SExNRXl6OtLQ0lJSUIDo6+qo+f1fWXzU2NmLRokU4c+YMXF1dMWHCBGzcuBEeHh7imDVr1gAAbr/9dqO/6/3338fDDz/c5ecgCAJK1a0zWky0iKwd+2hRpzXo9Nh37iJy8quw/3wVcvOrUattvmpcuI8Lhvf2xPDenhgV0Qth3i5miJaskS18tk09B3VjE4Yu+R4AcPzFcXCSy7o7RCLqhI5+tjmjRZ3mJJfhtv4+uK2/DwDAYBBwqqwOOflVyDlfhf35VThTrhG3z/cXAgCG9fbAtJhg3Ds0EConR3OeApHFaX3i0E3pwCSLyAYw0aIuI5VKMMDfDQP83TBzZG8AQJVGh9yCauw/3zLrtffcRRzIr8aB/Gq88J9jSBjkj2kxwRjd1xsyqcTMZ0BkfpcL4XnbkMgWMNGibuXpIscdkb64I9IXQMtj61/lFuGz3wpxsrQW/zlYjP8cLIafuwL3Dw/G1OHB6OvrauaoiczncmsHPnFIZAuYaFGP8nFT4C9jwvHo6DAcLVbj8/2F2JZbhFK1Fmuy8rAmKw/RIS23FicODYTKmbcWyb6wWSmRbWGiRWYhkUgwOEiFwUEqLJwQiZ0nyvD5/kLsPFmO3IJq5BZU48XtxzA40B1eLgr0cpHDy1Xe8vXS1stFIe5TOrKWhWwDbx0S2RYmWmR2CgcZxg0OwLjBAVfdWszJr+7QMVzkMvRyVaC/nxuG9fbA8N6eGBqsgouC/4mTdSnjrUMim8L/C5FFufLW4snSWpyr0KBSo8PFOl3L10tbpUaHyjotqup1aNIL0Oj00FysR/7FevxwvGUJFqkEiPR3FxOvYb09EObtAonEvEX3DTo9TpbW4sQFNY5fUON4SS1+L62Fi9wBg4PcMSRIhUFBKgwJUnFBbzsk9tDirUMim8BEiyySRCJBpL87Iv2v3XdIEASoG5txUaNDmboRh4tqcCC/Gjn5VbhQ04hjF9Q4dkGNzXvyAQAezo4YFtKSeEX39sAAPzf4uCm6JfkSBAFF1Q04caEWxy+ocaKk5evZSg3a6l5XXd+EouoGfHf08lp9ASolBgW2JF1Dgt0xOFAFX3fOdNgyzmgR2RYmWmTVJBIJVE6OUDk5IszbBXHhvcTXLtQ0XGolUYWc/GocLqpBdX0Tdp4sx86T5eI4V4UDInxcEO7jesVXV/Tp5Xzd2q+ahiYUVTWgqLoBxdUtX1u/zyuvQ23j1Q1cAaCXixw3BbjjpgA3RPq7Y4C/G2obm3G0uAaHi1q2sxUaXKhpxIWaRnGWDmip3RkU6A5nhQP0egHNBgF6gwF6AdAbDGjWC9AbWvYbBAHNegEOMgnG9vfBlGFBCPfhU52WrJzF8EQ2hYkW2awAlRMChjhhwpAAAICu2YBjF9TIOV+FAwXVOFxYjfyL9ajTNuNgYQ0OFtYYvV8iAUI8nRHu44Jwb1f0cpWjpKZRTKaKqxva7IR/JQepBH19XXFTgDsi/d1avga4tTtbMSricqJYp23GsWI1DhfV4Oil5CuvvA5ltVqUXZEodtShwhqs+vE0okI8cP+wIEyMCoQXl0eyKA06vfjfFIvhiWwDEy2yG3IHKaJDPBAd4iHu0zbrcb6yHmfK65BXrkHepa9nLs1G5V+q+8q6RmLj5SJHoIcSQR5OCPJwRqCHEsGeTujt5YK+vq6QO3RukW1XhQNGhnlhZJiXuK9e19xS13WhFnqDAKlUAgepBLIrvl7+sxQOUgmkUgkuarT4OrcYu05V4GBBNQ4WVOOl7cdw+wAfTBkWjDtv8uWTmxag9YlDJ0cZXPkgB5FN4CeZ7JrCQYb+fm7o7+dmtF8QBJTXacXlg/LK61BVr0OASokgD2cEeTohyEOJQA8nOMt77mPkLHdATB8vxPTxuv7gP5gyLBjltVr852AxvjxQhMNFNfjheBl+OF4GN6UD7hkSgCnDgjAi1AvSburSrzcIUDc0oaFJj0APp275O6yZWJ/l3j11g0TU85hoEbVBIpHA100JXzclbr6i7sva+bgp8MjoMDwyOgyny2rxRU4Rth0oQnFNIz7ZV4BP9hUgyMMJdw30g7vSAQ4yKRxlUjjKJJA7tP750vcy6aXXJWjWC6huaEJ1vQ41DU2orm+6+vt6HdSXatZ6ezlj1/w7zPyvYXnEZqW8bUhkM5hoEdmpvr5umD8uEs/cPQB7zl7ElwcK8d/DJSiqbsAHv5zr1r+7SW/o1uNbK7G1A584JLIZTLSI7JxUKsGoiF4YFdELL04ajB3HSnGwoBpNegN0egFNeoO46ZqNv2+69LpMKoGHsxweTo7wcHaEh5MjVFd+7+wIlZP80ldHOMo6V7dm61wVDoj0d0OEj4u5QyGiLsJEi4hESkcZJkYFYmJUoLlDsUsPjAjBAyNCzB0GEXUh/lpJRERE1E06lWitXr0aoaGhUCqViIuLw969e685/rPPPkNkZCSUSiWGDBmCb7/91uh1QRCQlpaGgIAAODk5IT4+HqdOnepMaEREREQWw+REa8uWLUhNTcXixYuRk5ODqKgoJCQkoKysrM3xv/zyC2bOnIlHH30UBw4cwOTJkzF58mQcOXJEHPPaa6/hzTffxNq1a7Fnzx64uLggISEBjY2NnT8zIiIiIjOTCEJbq661Ly4uDiNGjMBbb70FADAYDAgJCcGTTz6JBQsWXDU+MTERGo0G27dvF/fdfPPNiI6Oxtq1ayEIAgIDA/H3v/8dzzzzDACgpqYGfn5++OCDDzBjxozrxqRWq6FSqVBTUwN392uvjUdE1sMWPtu2cA5EdLWOfrZNmtHS6XTYv38/4uPjLx9AKkV8fDyys7PbfE92drbReABISEgQx589exYlJSVGY1QqFeLi4to9plarhVqtNtqIiIiILI1JiVZFRQX0ej38/PyM9vv5+aGkpKTN95SUlFxzfOtXU46Znp4OlUolbiEhfEqHiIiILI9VPnW4cOFC1NTUiFtBQYG5QyIiIiK6ikl9tLy9vSGTyVBaWmq0v7S0FP7+/m2+x9/f/5rjW7+WlpYiICDAaEx0dHSbx1QoFFAoLi9R0VpmxluIRLal9TNtYimpReH1icg2dfT6ZFKiJZfLERMTg8zMTEyePBlASzF8ZmYmUlJS2nzPqFGjkJmZiXnz5on7duzYgVGjRgEAwsLC4O/vj8zMTDGxUqvV2LNnD+bMmdOhuGprawGAtxCJbFRtbS1UKpW5w+gUXp+IbNv1rk8md4ZPTU3FrFmzEBsbi5EjR2LlypXQaDRITk4GACQlJSEoKAjp6ekAgKeeegpjx47F8uXLcc899+CTTz7Bb7/9hnfffRdAy+K98+bNw8svv4x+/fohLCwMzz//PAIDA8Vk7noCAwNRUFAANze3Dq14r1arERISgoKCApt/Cojnapvs5VwFQUBtbS0CA623Uz2vT+3judomeznXjl6fTE60EhMTUV5ejrS0NJSUlCA6OhoZGRliMXt+fj6k0sulX7fccgs++ugjLFq0CM899xz69euHbdu2YfDgweKY+fPnQ6PR4LHHHkN1dTVGjx6NjIwMKJUdW1hVKpUiODjY1FOBu7u7Tf9HcCWeq22yh3O11pmsVrw+XR/P1TbZw7l25Ppkch8tW2BPfW14rrbJns7V3tjTz5bnapvs6Vw7wiqfOiQiIiKyBnaZaCkUCixevNjoyUVbxXO1TfZ0rvbGnn62PFfbZE/n2hF2eeuQiIiIqCfY5YwWERERUU9gokVERETUTZhoEREREXUTJlpERERE3cTuEq3Vq1cjNDQUSqUScXFx2Lt3r7lD6nJLliyBRCIx2iIjI80dVpfYtWsXJk6ciMDAQEgkEmzbts3odUEQkJaWhoCAADg5OSE+Ph6nTp0yT7A36Hrn+vDDD1/1cx43bpx5gqUuweuTdeP16TJeny6zq0Rry5YtSE1NxeLFi5GTk4OoqCgkJCSgrKzM3KF1uUGDBuHChQvitnv3bnOH1CU0Gg2ioqKwevXqNl9/7bXX8Oabb2Lt2rXYs2cPXFxckJCQgMbGxh6O9MZd71wBYNy4cUY/548//rgHI6SuxOuT9eP1yRivT5cIdmTkyJHC3Llzxe/1er0QGBgopKenmzGqrrd48WIhKirK3GF0OwDCl19+KX5vMBgEf39/4fXXXxf3VVdXCwqFQvj444/NEGHX+eO5CoIgzJo1S5g0aZJZ4qGux+uTbeH1idenVnYzo6XT6bB//37Ex8eL+6RSKeLj45GdnW3GyLrHqVOnEBgYiPDwcDz44IPIz883d0jd7uzZsygpKTH6GatUKsTFxdnkzxgAsrKy4OvriwEDBmDOnDmorKw0d0jUCbw+8fpki3h9amE3iVZFRQX0er24+HUrPz8/lJSUmCmq7hEXF4cPPvgAGRkZWLNmDc6ePYsxY8agtrbW3KF1q9afoz38jIGWafkPP/wQmZmZWLp0KX766SeMHz8eer3e3KGRiXh94vXJ1vD6dJmDuQOgrjd+/Hjxz0OHDkVcXBz69OmDTz/9FI8++qgZI6OuNGPGDPHPQ4YMwdChQxEREYGsrCzceeedZoyMqH28PtkHXp8us5sZLW9vb8hkMpSWlhrtLy0thb+/v5mi6hkeHh7o378/Tp8+be5QulXrz9Eef8YAEB4eDm9vb5v/OdsiXp94fbJ19nx9sptESy6XIyYmBpmZmeI+g8GAzMxMjBo1yoyRdb+6ujrk5eUhICDA3KF0q7CwMPj7+xv9jNVqNfbs2WPzP2MAKCwsRGVlpc3/nG0Rr0+8Ptk6e74+2dWtw9TUVMyaNQuxsbEYOXIkVq5cCY1Gg+TkZHOH1qWeeeYZTJw4EX369EFxcTEWL14MmUyGmTNnmju0G1ZXV2f0G9HZs2eRm5sLLy8v9O7dG/PmzcPLL7+Mfv36ISwsDM8//zwCAwMxefJk8wXdSdc6Vy8vL7zwwguYOnUq/P39kZeXh/nz56Nv375ISEgwY9TUWbw+8fpkTXh9MoG5H3vsaatWrRJ69+4tyOVyYeTIkcKvv/5q7pC6XGJiohAQECDI5XIhKChISExMFE6fPm3usLrEzp07BQBXbbNmzRIEoeUR6ueff17w8/MTFAqFcOeddwonT540b9CddK1zra+vF+6++27Bx8dHcHR0FPr06SPMnj1bKCkpMXfYdAN4fbJuvD7x+tQWiSAIQs+mdkRERET2wW5qtIiIiIh6GhMtIiIiom7CRIuIiIiomzDRIiIiIuomTLSIiIiIugkTLSIiIqJuwkSLiIiIqJsw0SIiIiLqJky0iIiIiLoJEy0iIiKibsJEi4iIiKibMNEiIiIi6ib/H86TVKfdiuYBAAAAAElFTkSuQmCC\n" }, - "metadata": {}, - "execution_count": 14 + "metadata": {} } ] }, { "cell_type": "markdown", "source": [ - "## 5- Evaluation" + "## Evaluation" ], "metadata": { - "id": "I67syA89YmM0" + "id": "nBVqcChF6kJJ" } }, { "cell_type": "code", "source": [ - "model.evaluate(x_test, y_test)" + "test_loss, test_accuracy = model.evaluate(x_test_normalized, y_test)\n", + "print('test loss:', test_loss)\n", + "print('test accuracy:', test_accuracy)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, - "id": "oEnkgD6zYoCt", - "outputId": "f74d97b8-8433-41e0-8268-eb554371d43d" + "id": "wca6WxuF28Ct", + "outputId": "a6915e5e-775f-45ea-fc3f-f5c00f6f2252" }, - "execution_count": 13, + "execution_count": 93, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "313/313 [==============================] - 1s 2ms/step - loss: 0.0865 - accuracy: 0.9730\n" + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - accuracy: 0.9690 - loss: 0.1568\n", + "test loss: 0.13387088477611542\n", + "test accuracy: 0.9747999906539917\n" ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_test_normalized[0].shape" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "t1sQYiRL8Cqi", + "outputId": "459f4bef-654a-41c4-d0f6-ee09c96e2ad8" + }, + "execution_count": 82, + "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "[0.08648611605167389, 0.9729999899864197]" + "(784,)" ] }, "metadata": {}, - "execution_count": 13 + "execution_count": 82 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Prediction" + ], + "metadata": { + "id": "UgAjVCgnAfYt" + } + }, + { + "cell_type": "code", + "source": [ + "pred = model.predict(x_test_normalized[8].reshape(1, 784))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "swe8gnud65pB", + "outputId": "6c8df0da-282f-415f-bb8b-06ad9e1a000d" + }, + "execution_count": 88, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 30ms/step\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "print('prediction:', pred.argmax())\n", + "print('true label:', y_test[8])" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "JvkcdQWe8bhd", + "outputId": "ce0f281a-5bc5-4240-8745-9f0fd25d8345" + }, + "execution_count": 90, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "prediction: 5\n", + "true label: 5\n" + ] } ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "2nLwiEMs_zWo" + }, + "execution_count": null, + "outputs": [] } ] } \ No newline at end of file diff --git a/Slides/02_Training.pdf b/Slides/02_Training.pdf index 9e47e5e..7c6a95e 100644 Binary files a/Slides/02_Training.pdf and b/Slides/02_Training.pdf differ