1 line
110 KiB
Plaintext
1 line
110 KiB
Plaintext
{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"toc_visible":true,"gpuType":"T4"},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU"},"cells":[{"cell_type":"markdown","metadata":{"id":"HPR_nNQ94KJ-"},"source":["# Prepare Environment"]},{"cell_type":"code","metadata":{"id":"m15_JQeGuaTX","executionInfo":{"status":"ok","timestamp":1730172105657,"user_tz":-420,"elapsed":1108,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}}},"source":["from __future__ import absolute_import\n","from __future__ import division\n","from __future__ import print_function\n","\n","from IPython.display import display\n","\n","import matplotlib\n","import matplotlib.pyplot as plt\n","plt.rcParams[\"axes.grid\"] = False\n","%matplotlib inline"],"execution_count":1,"outputs":[]},{"cell_type":"code","metadata":{"id":"z--Q9_0x_0GP","executionInfo":{"status":"ok","timestamp":1730172143413,"user_tz":-420,"elapsed":4989,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}}},"source":["import numpy as np\n","import keras\n","import tensorflow as tf"],"execution_count":2,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"lXmN9g0ayjnx"},"source":["# Load MNIST dataset\n","\n","The MNIST database (Modified National Institute of Standards and Technology database) is a large database of handwritten digits.\n","\n","Ref: http://yann.lecun.com/exdb/mnist/"]},{"cell_type":"code","metadata":{"id":"LLM9sJikvkFn","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1730172147636,"user_tz":-420,"elapsed":1468,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}},"outputId":"28b65b4d-c8f3-4e65-c916-191b0b454316"},"source":["from keras.datasets import mnist\n","\n","# Download MNIST dataset using `datasets` module in Keras\n","# Note: the data have already been split into training and test sets\n","(x_train, y_train), (x_test, y_test) = mnist.load_data()\n","\n","print(f'Training set: {x_train.shape}, {y_train.shape}')\n","print(f'Test set: {x_test.shape}, {y_test.shape}')"],"execution_count":3,"outputs":[{"output_type":"stream","name":"stdout","text":["Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n","\u001b[1m11490434/11490434\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0us/step\n","Training set: (60000, 28, 28), (60000,)\n","Test set: (10000, 28, 28), (10000,)\n"]}]},{"cell_type":"markdown","metadata":{"id":"dsyiuNmM2PwN"},"source":["Let's look at some examples of the training and test sets."]},{"cell_type":"code","metadata":{"id":"xgrAQgknzX79","colab":{"base_uri":"https://localhost:8080/","height":352},"executionInfo":{"status":"ok","timestamp":1730172173520,"user_tz":-420,"elapsed":4126,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}},"outputId":"f8501c04-56b4-4625-a770-5bee584fa274"},"source":["def plot_mnist_data(data, label, n_images):\n"," img_w = 28\n"," img_h = 28\n"," image = np.reshape(data, (-1, img_h, img_w))\n","\n"," f, axs = plt.subplots(1, n_images)\n"," f.set_figheight(15)\n"," f.set_figwidth(15)\n"," for i in range(len(axs)):\n"," axs[i].imshow(image[i], cmap=\"gray\")\n"," axs[i].set_title(f\"Label: {label[i]}\", fontsize=20)\n"," axs[i].tick_params(\n"," axis='both',\n"," which='both',\n"," bottom=False, top=False,left=False, right=False,\n"," labelbottom=False, labeltop=False, labelleft=False, labelright=False)\n"," plt.show()\n"," plt.close(\"all\")\n","\n","print(\"Training set\")\n","plot_mnist_data(x_train, y_train, n_images=8)\n","\n","print(\"Test set\")\n","plot_mnist_data(x_test, y_test, n_images=8)"],"execution_count":4,"outputs":[{"output_type":"stream","name":"stdout","text":["Training set\n"]},{"output_type":"display_data","data":{"text/plain":["<Figure size 1500x1500 with 8 Axes>"],"image/png":"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aiogIMAhIo569eq5nFu3bl2HiDjy5Mnj8XreRD39zZuPUadPn3bkzJnTISKOtWvXKrdl9o0nd1BT7uEi3D3Uk6p///7Oc4wZM8Z0zvbt252/vIiIo2rVqh6v503U0998/fj0yJIlS5xr1KpVy5GYmGjbWnagpv7m65riOc891FPSktp4Cg4O1vKzSpppLm4UExMjp0+flqNHjzr/FSlSREREfv3112SPrVatmtSqVSvJ21955RURefgSvS1btjjH4+LinHGnTp2SXaNSpUrO5oC7d+929e1ozp49K46HG38pPvZx//nPf2TFihXy1ltvSVhYmISEhEijRo3kgw8+kGPHjknTpk1FROTEiRMycuTIVK2V3lFTrt2+fVtERLJnz+5y7qNPbbl165bH66Vn1JN7+vfvL7dv35bOnTs7G/TCHDUFK1FPrg0bNszZRPWjjz6Sd999V06fPi337t2TixcvytSpU6VFixaSLdvfnSl4zqOePHHixAnnh7bkypVL5s+fnynbYDyOmoKVqKeUqVOnjhw5ckSOHDki+/fvl6VLl0qfPn3k/Pnz0rt3b/n6668tWedxaabHk4jIzp07ZdKkSfLzzz/L1atXk5z3119/JXueOnXqJHt73bp1nV8fOXJEunbtKiIP33f96BO9unXrJt26dXMrb19+nHz+/PmTvC1v3ryyePFiKVeunFy9elW++uorGTt2rFubChkFNZUyOXPmlJs3b8rdu3ddzn30KQe5cuWyO600g3pKmblz58qmTZskMDBQvvzyS5/kkNZRU7AS9ZQyZcuWlUWLFkmXLl3kxo0b8uWXX2qPVVmzZpXp06dLv379RET9tJ+MjnqyRlRUlLRo0ULi4+PFz89P5syZk+n6Oz1CTcFK1JPncufOLVWrVnXGtWrVkvbt20uPHj2kZcuW8tprr8mFCxdkxIgRlq2ZZl7xFB4eLqGhobJ48eJkC0fE9V+bihYtmuztxYoVc379+FqXL192I1PdzZs3PTrOG/Lly+f8z5GQkCD79+/3cUbeQ02l3KMLanc+fjQhIUFE1AatGRn1lDIxMTEyZMgQEREZNWqUlChRwus5pHXUFKxEPXmmefPmcvDgQenVq5fyxzw/Pz957rnnZPv27Uoj2AIFCvggS++jnqxx9epVadq0qZw9e1ZERCZPnuy8Ls9sqClYiXqyx/PPPy+D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\n"},"metadata":{}},{"output_type":"stream","name":"stdout","text":["Test set\n"]},{"output_type":"display_data","data":{"text/plain":["<Figure size 1500x1500 with 8 Axes>"],"image/png":"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\n"},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"3jK3oZke4oOp"},"source":["# Data Preprocessing\n","As our model is going to take a single vector for each training example, we need to reshape the inputs (i.e., `x`) so that each 28x28 image becomes a single 784-dimensional vector."]},{"cell_type":"code","metadata":{"id":"-F9YbswP1YLF","executionInfo":{"status":"ok","timestamp":1730172189346,"user_tz":-420,"elapsed":415,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}}},"source":["# MNIST parameters\n","num_classes = 10\n","img_h, img_w = 28, 28\n","\n","# Reshape the input so that each 28x28 image becomes a single 784-dimensional vector\n","x_train = x_train.reshape(x_train.shape[0], img_h * img_w)\n","x_test = x_test.reshape(x_test.shape[0], img_h * img_w)\n","\n","# Convert from int to float format\n","x_train = x_train.astype('float32')\n","x_test = x_test.astype('float32')"],"execution_count":5,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"qetkkccz5ISk"},"source":["## Feature Scaling\n","\n","It is a common pratice to **normalize the range of independent variables or features of data**. This is mainly because many classifiers calculate the distance between two points by the Euclidean distance. If one of the features has a broad range of values, the distance will be governed by this particular feature. Therefore, the range of all features should be normalized **so that each feature contributes approximately proportionately to the final distance**.\n","\n","There are many other feature scaling techniques, which can be found in [here](https://en.wikipedia.org/wiki/Feature_scaling).\n","\n","In this MNIST example, we'll only scale the inputs to be in the range [0-1] rather than [0-255]."]},{"cell_type":"code","metadata":{"id":"1pnHXIU35HMU","executionInfo":{"status":"ok","timestamp":1730172229761,"user_tz":-420,"elapsed":430,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}}},"source":["# Scale the MNIST data to be in the range [0-1]\n","# Note: The maximum value of color value is 255\n","x_train /= 255\n","x_test /= 255"],"execution_count":6,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"AGJsAf6x7aRg"},"source":["## Convert from class data into one-hot format\n","\n","We also have to modify the labels to be in the one-hot format, i.e.\n","```\n","0 -> [1, 0, 0, 0, 0, 0, 0, 0, 0]\n","1 -> [0, 1, 0, 0, 0, 0, 0, 0, 0]\n","2 -> [0, 0, 1, 0, 0, 0, 0, 0, 0]\n","etc.\n","```"]},{"cell_type":"code","metadata":{"id":"ZO3bA6ao7a3r","executionInfo":{"status":"ok","timestamp":1730172237256,"user_tz":-420,"elapsed":446,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}}},"source":["# Convert class data to one-hot format\n","y_train = tf.keras.utils.to_categorical(y_train, num_classes)\n","y_test = tf.keras.utils.to_categorical(y_test, num_classes)"],"execution_count":7,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"f_PXJOEX7mnf"},"source":["Here are the shapes of the training and test sets after preprocessing."]},{"cell_type":"code","metadata":{"id":"PgwTaQm27f45","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1730172246888,"user_tz":-420,"elapsed":433,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}},"outputId":"ea81b1cd-d691-4a30-94f7-f4b286b08137"},"source":["print(f\"Training set: {x_train.shape} {y_train.shape}\")\n","print(f\"Test set: {x_test.shape} {y_test.shape}\")"],"execution_count":8,"outputs":[{"output_type":"stream","name":"stdout","text":["Training set: (60000, 784) (60000, 10)\n","Test set: (10000, 784) (10000, 10)\n"]}]},{"cell_type":"markdown","metadata":{"id":"PjZ-uOK07wPM"},"source":["# Define a Model\n","\n","We are going to define a neural network, or what is typically referred to as a deep learning model. Here, we will do a simple 3-layer fully-connected network."]},{"cell_type":"markdown","metadata":{"id":"QPlQ3OIv707z"},"source":["<!--<img src=\"./img/fc_mnist.png\" alt=\"Fully-connected Network\" style=\"width:500px;\"/>-->\n","<img src=\"https://www.dropbox.com/s/6a05qtkgmlih6s4/fc_mnist.png?raw=1\" alt=\"Fully-connected Network\" style=\"width:500px;\"/>"]},{"cell_type":"code","metadata":{"id":"UEzRx5l576Bd","executionInfo":{"status":"ok","timestamp":1730172314204,"user_tz":-420,"elapsed":599,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}}},"source":["from keras.models import Sequential\n","from keras.layers import *\n","\n","# Feed-forward neural network\n","model = Sequential()\n","\n","# Layer 1 - Hidden\n","# Number of neurons (or units) is 128.\n","# Activation function is rectified linear unit (ReLU).\n","model.add(Dense(128, activation='relu'))\n","\n","# Layer 2 - Hidden\n","# Number of neurons (or units) is 128.\n","# Activation function is rectified linear unit (ReLU).\n","model.add(Dense(128, activation='relu'))\n","\n","# Layer 3 - Output\n","# Number of neurons is 10 (i.e., number of output classes).\n","# Activation function is softmax.\n","# Note: the softmax function is commonly used in\n","# the classification problem to normalize a\n","# K-dimensional output vector into a probability\n","# distribution of classes.\n","num_classes = 10\n","model.add(Dense(num_classes, activation='softmax'))"],"execution_count":9,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"zQCt2mvz8ROs"},"source":["# Train a Model\n","\n","In this section, we will first define several parameters that will be used during the training.\n","\n","* `epochs`: the number of training epochs (one epoch means the model has seen the entire training samples one times).\n","* `batch_size`: the number of examples per one training step.\n","* `learning_rate`: a hyperparameter that defines the adjustment in the weights of our network with respect to the loss gradient.\n"]},{"cell_type":"code","metadata":{"id":"YjNa-rS28XqD","executionInfo":{"status":"ok","timestamp":1730172352486,"user_tz":-420,"elapsed":421,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}}},"source":["epochs = 20\n","batch_size = 256\n","learning_rate = 0.01"],"execution_count":10,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"UHeeybzy-taV"},"source":["## Loss Function\n","\n","Before we train a model, we need to specify the **loss function**, `loss`, that will be used to quantify the error between the predicted and the target classes. As we would like to train our model to differentiate among 10 handwritten digits in MNIST dataset, a loss function that we can use is *cross-entropy*. Cross-entropy is a measure of how different your predicted distribution is from the target distribution (see [Wikipedia](https://en.wikipedia.org/wiki/Cross_entropy) for more details).\n","\n","In this exercise, we will use the cross-entropy.\n","\n","Keras also provides many other loss functions for other problems as well. You can read more [here](https://keras.io/losses/)."]},{"cell_type":"code","metadata":{"id":"P8OGmVLq-RNm","executionInfo":{"status":"ok","timestamp":1730172357003,"user_tz":-420,"elapsed":438,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}}},"source":["# Cross-entropy loss\n","loss = keras.losses.categorical_crossentropy"],"execution_count":11,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"LvObkjaY-32N"},"source":["## Optimizer\n","\n","Another component that we need to specify before the training is the **optimizer**, `optimizer`. The optimizers that are commonly used to train deep learning models are Stochastic Gradient Descent (SGD), Adam, RMSProp, Adadelta, etc. The list of optimizers provided by Keras can be found [here](https://keras.io/optimizers/).\n","\n","Here we will use SGD."]},{"cell_type":"code","metadata":{"id":"VTq6EcE1-4fo","executionInfo":{"status":"ok","timestamp":1730172363034,"user_tz":-420,"elapsed":1476,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}}},"source":["# Stochastic gradient descent (SGD)\n","optimizer = tf.keras.optimizers.SGD(learning_rate)"],"execution_count":12,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"VzG3YUL8_UdH"},"source":["## Compile Keras Model\n","\n","Next, we configures the model for training by calling."]},{"cell_type":"code","metadata":{"id":"CmCb0PgA_TJQ","executionInfo":{"status":"ok","timestamp":1730172367293,"user_tz":-420,"elapsed":411,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}}},"source":["model.compile(\n"," loss=loss,\n"," optimizer=optimizer,\n"," metrics=['accuracy'])"],"execution_count":13,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"rkB6NPNuW0nE"},"source":["## Train a model"]},{"cell_type":"markdown","metadata":{"id":"QP4czTe_W7HC"},"source":["We are now ready to train our model. Let's start feeding the data to train the model and it will learn to classify digits."]},{"cell_type":"code","metadata":{"id":"LJP7WcsO_bZA","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1730172388242,"user_tz":-420,"elapsed":14444,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}},"outputId":"2d467ca4-03d1-4326-c6ff-102ab997ed32"},"source":["hist = model.fit(\n"," x_train, y_train,\n"," batch_size=batch_size,\n"," epochs=epochs,\n"," verbose=1)"],"execution_count":14,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - accuracy: 0.2782 - loss: 2.1393\n","Epoch 2/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.7634 - loss: 1.1343\n","Epoch 3/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.8473 - loss: 0.6442\n","Epoch 4/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.8695 - loss: 0.4980\n","Epoch 5/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.8819 - loss: 0.4334\n","Epoch 6/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.8929 - loss: 0.3934\n","Epoch 7/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.8980 - loss: 0.3677\n","Epoch 8/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9025 - loss: 0.3499\n","Epoch 9/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.9084 - loss: 0.3294\n","Epoch 10/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.9112 - loss: 0.3138\n","Epoch 11/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9118 - loss: 0.3105\n","Epoch 12/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.9147 - loss: 0.3025\n","Epoch 13/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.9195 - loss: 0.2881\n","Epoch 14/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.9206 - loss: 0.2809\n","Epoch 15/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9195 - loss: 0.2836\n","Epoch 16/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.9237 - loss: 0.2674\n","Epoch 17/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.9241 - loss: 0.2656\n","Epoch 18/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - accuracy: 0.9264 - loss: 0.2599\n","Epoch 19/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.9300 - loss: 0.2476\n","Epoch 20/20\n","\u001b[1m235/235\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.9326 - loss: 0.2402\n"]}]},{"cell_type":"markdown","metadata":{"id":"__m07PF3Xh5A"},"source":["# Apply the Trained Model on MNIST images\n","\n","Once we have finished the model training, we can now apply it to MNIST images."]},{"cell_type":"code","metadata":{"id":"I3ap6GsLXv41","colab":{"base_uri":"https://localhost:8080/","height":827},"executionInfo":{"status":"ok","timestamp":1730172433759,"user_tz":-420,"elapsed":1402,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}},"outputId":"020227a2-6819-456d-8b17-44d61e3da060"},"source":["# Sample two MNIST images from the training set\n","test_imgs = x_test[0:2]\n","\n","# Plot images\n","for idx in range(len(test_imgs)):\n"," f, ax = plt.subplots(1)\n"," f.set_figheight(5)\n"," f.set_figwidth(5)\n"," ax.imshow(test_imgs[idx].reshape((img_h, img_w)), cmap=\"gray\")\n"," ax.tick_params(\n"," axis='both',\n"," which='both',\n"," bottom=False, top=False,left=False, right=False,\n"," labelbottom=False, labeltop=False, labelleft=False, labelright=False)"],"execution_count":15,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 500x500 with 1 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAAZQAAAGVCAYAAADZmQcFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAJiklEQVR4nO3cP2ueZQOH4SexDoJJUKlgsf7ByUW0RRC0oLiILkL7FeoiLkLBpQgdHR38Bi6dSwmFDi7q0A5CiyjGwUoQhEoSh6LS+91fzJs813s2SdPjWJMf97WdvVK4FqZpmmYA8H9a3O8DAHA4CAoACUEBICEoACQEBYCEoACQEBQAEoICQOLIbn7p7t27s/X19dnS0tJsYWHhXp8JgANkmqbZ1tbW7NixY7PFxe3vIbsKyvr6+uz48ePZ4QC4/9y6dWv29NNPb/vzXf3Ja2lpKTsQAPennVqwq6D4MxcAO7XAf8oDkBAUABKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAIkj+32AB82ZM2eGdmfPnh3ara+vD+3u3Lkz9+bLL78c+tZvv/02tPvpp5+GdsC94YYCQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkFqZpmnb6pc3NzdnKyspenOfQ+/nnn4d2zz33XHuQA2Rra2tod/Pmzfgk7IVff/11aPfZZ5/Nvbl27drQt/h3Gxsbs+Xl5W1/7oYCQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkjuz3AR40Z8+eHdq99NJLQ7vvv/9+aPfiiy/OvTlx4sTQt958882h3WuvvTa0u3Xr1tyb48ePD31rr/3zzz9zb37//fehbz311FNDu1G//PLL3BuvDe8tNxQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAmPQ+6xq1ev7ulu1Orq6p5967HHHhvavfzyy0O769evz7159dVXh7611+7cuTP35scffxz61ujDo48//vjQbm1tbWjH3nFDASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEgvTNE07/dLm5uZsZWVlL84D7LHTp08P7S5evDi0u3HjxtDurbfemntz+/btoW/x7zY2NmbLy8vb/twNBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASBzZ7wMAnSeffHLuzRdffDH0rcXFsX+PXrhwYWjn5eCDzw0FgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABIeG0YDpEPP/xw7s3Ro0eHvvXHH38M7X744YehHQefGwoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgITHIeEAev3114d2n3zySXyS7b3//vtDuxs3brQH4cBwQwEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABJeG4YD6N133x3aPfzww3Nvrl69OvStb775ZmjH4eWGAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJLw2DPfQI488MrR75513hnZ//fXX3JtPP/106Ft///330I7Dyw0FgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABIeG0Y7qFz584N7V555ZWh3erq6tybr7/+euhb8N/cUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJDwOCbvw3nvvDe3Onz8/tNvc3BzaXbhwYWgHBTcUABKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEg4bVhHjhPPPHE3JvPP/986FsPPfTQ0O7y5ctDu2+//XZoBwU3FAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBIOG1Ye5boy/5rq6uzr15/vnnh761trY2tDt//vzQDvaTGwoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJDw2jD3rRdeeGFod/Lkyfgk2/v444+HdqOvFMN+ckMBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJDwOCT77tlnnx3aXblyJT7J9s6dOze0u3TpUnwSOLjcUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgITXhtl3H3zwwdDumWeeiU+yva+++mpoN01TfBI4uNxQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhNeGybzxxhtDu48++ig+CbAf3FAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBICEoACQEBYCE14bJnDp1amj36KOPxif539bW1ube/Pnnn/fgJHC4uKEAkBAUABKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEh4HJL71nfffTe0e/vtt+fe3L59e+hb8CBxQwEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABIL0zRNO/3S5ubmbGVlZS/OA8ABtbGxMVteXt72524oACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASuwrKLt6PBOCQ26kFuwrK1tZWchgA7l87tWBXz9ffvXt3tr6+PltaWpotLCxkhwPg4Jumaba1tTU7duzYbHFx+3vIroICADvxn/IAJAQFgISgAJAQFAASggJAQlAASAgKAIn/ACKgAvUsPmfRAAAAAElFTkSuQmCC\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["<Figure size 500x500 with 1 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAAZQAAAGVCAYAAADZmQcFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAKEElEQVR4nO3cvWve5QLH4SelqTgkETNIS11UHBQUpC7OootWBKWC/4X1BUUoiOKf4OagLkUKRVFwUxxUcBBB6FLwBRKRIuSFIqh5zngOh5Mmz+0nbz3XtSZffjddPtwp3HPT6XQ6AYB/6NhBHwCAm4OgAJAQFAASggJAQlAASAgKAAlBASAhKAAkju/ml7a2tiYrKyuThYWFydzc3F6fCYBDZDqdTjY2NianTp2aHDu2/T1kV0FZWVmZ3HnnndnhADh6fvnll8np06e3/fmu/uS1sLCQHQiAo2mnFuwqKP7MBcBOLfCf8gAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgcP+gDcPN48cUXh3a33nrr0O6BBx4Y2j3zzDNDuxHvvPPO0O6rr74a2r3//vtDOyi4oQCQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAIm56XQ63emX1tfXJ0tLS/txHg6JixcvzrzZz1d8b3ZXr14d2j366KMzb37++eehb/H/Z21tbbK4uLjtz91QAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAxPGDPgB7a+TV4MnkaLwcfOXKlaHdZ599NvPmrrvuGvrWk08+ObS7++67h3bPP//8zJu333576Fvw39xQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkPA55RJw5c2Zo9/TTT8cn2d4PP/wwtDt79uzQ7tq1a0O7zc3NmTcnTpwY+tbXX389tHvwwQeHdsvLy0M7KLihAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACa8NHxEnT54c2s3NzQ3tRl4Ofvzxx4e+tbq6OrTbT+fPnx/a3XffffFJbuyTTz7Z1+/Bf3JDASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEl4bPiI+/vjjod0999wztNvY2Jh58/vvvw996yh47rnnhnbz8/PxSeDwckMBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASXhu+yf30008HfYRD56WXXpp5c++99+7BSbb3zTff7OsOCm4oACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASHofkyHriiSeGdm+88cbMmxMnTgx967fffhvavfrqq0O769evD+2g4IYCQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkvDbMkXXmzJmh3ejLwSMuXrw4tPviiy/ik8Dec0MBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASXhvmwF2+fHlo99hjj7UHuYH33ntvaPf666/HJ4HDyw0FgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABIeG2YzMmTJ4d2jzzyyNDulltuGdpdu3Zt5s2bb7459K3Nzc2hHRxFbigAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABIehyRz6dKlod3y8nJ8khv74IMPZt5cvXp1D04CNxc3FAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBIOG1Yf6ns2fPzrx56KGH9uAk2/v888+HdhcuXGgPAkwmEzcUACKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEg4bXhm9zy8vLQ7rXXXpt5Mz8/P/StUd99993QbnNzsz0IMJlM3FAAiAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBICEoACQEBYCE14ZvcufPnx/aPfzww/FJtnf58uWh3YULF9qDAP+IGwoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgMTcdDqd7vRL6+vrk6Wlpf04D7E//vhjaDc/Px+fZHunT58e2q2ursYnAW5kbW1tsri4uO3P3VAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBICEoACQEBYDE8YM+ANx+++1Duz///DM+yeGxtrY2tBv5Nxl9WXq/XyC/7bbbZt688MIL/UH2wN9//z3z5pVXXhn61vXr14d2u+GGAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJLw2zIH7/vvvD/oIh86HH344tFtdXZ15c8cddwx969y5c0M7Gr/++uvQ7q233opP8m9uKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQMJrwze5Tz/9dGj31FNPxSdhFs8+++xBH2HP/PXXX0O7ra2t+CTb++ijj4Z23377bXyS7X355Zf79q3dckMBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJCYm06n051+aX19fbK0tLQf5+GQePnll2fezM/P78FJevfff//Mm3Pnzu3BSXrvvvvuzJsff/yxP8gNXLp0aWh35cqV+CTMam1tbbK4uLjtz91QAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhNeGAdgVrw0DsC8EBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkBAUABKCAkBCUABICAoACUEBICEoACQEBYCEoACQEBQAEoICQEJQAEgICgAJQQEgISgAJAQFgISgAJAQFAASggJAQlAASAgKAAlBASAhKAAkBAWAhKAAkNhVUKbT6V6fA4BDbqcW7CooGxsbyWEAOLp2asHcdBfXj62trcnKyspkYWFhMjc3lx0OgMNvOp1ONjY2JqdOnZocO7b9PWRXQQGAnfhPeQASggJAQlAASAgKAAlBASAhKAAkBAWAxL8AQQkgnsDSUxUAAAAASUVORK5CYII=\n"},"metadata":{}}]},{"cell_type":"code","metadata":{"id":"TIlI5WiVjd4h","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1730172446216,"user_tz":-420,"elapsed":857,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}},"outputId":"a52c4acf-0daa-4696-a3fb-318c6b8a8dd2"},"source":["# Predict the labels of these images\n","probs = model.predict(test_imgs)\n","\n","# Convert the label back to the original format\n","prob_classes = np.argmax(probs, axis=-1)\n","\n","# Print the probability distribution\n","for idx in range(len(probs)):\n"," for i in range(num_classes):\n"," print(f'{i}: {probs[idx][i]:.4f}')\n"," print(f'Predicted class: {prob_classes[idx]}')\n"," print('')"],"execution_count":16,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 406ms/step\n","0: 0.0002\n","1: 0.0000\n","2: 0.0005\n","3: 0.0042\n","4: 0.0000\n","5: 0.0001\n","6: 0.0000\n","7: 0.9944\n","8: 0.0001\n","9: 0.0006\n","Predicted class: 7\n","\n","0: 0.0063\n","1: 0.0006\n","2: 0.9476\n","3: 0.0125\n","4: 0.0000\n","5: 0.0043\n","6: 0.0246\n","7: 0.0000\n","8: 0.0041\n","9: 0.0000\n","Predicted class: 2\n","\n"]}]},{"cell_type":"markdown","metadata":{"id":"uukGYk3JXIgP"},"source":["# Evaluate Performance on Test Set\n","\n","Once you have finished the model training, you then evaluate the classification performance on the test set (i.e., the unseen dataset)."]},{"cell_type":"code","metadata":{"id":"wXZLfaurAblZ","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1730172510751,"user_tz":-420,"elapsed":1934,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}},"outputId":"ec56a97c-baa5-49e4-d75f-c0e631afe911"},"source":["score = model.evaluate(x_test, y_test, verbose=0)\n","print('Test loss:', score[0])\n","print('Test accuracy:', score[1])"],"execution_count":17,"outputs":[{"output_type":"stream","name":"stdout","text":["Test loss: 0.23876428604125977\n","Test accuracy: 0.9326000213623047\n"]}]},{"cell_type":"markdown","metadata":{"id":"_KRSdi9DkfOk"},"source":["# Analyze the Predictions\n","\n","It's always a good idea to inspect the output and make sure everything looks fine. Here we'll look at some examples our model gets right, and some examples it gets wrong on the test sets.\n","\n","First, we use the trained model to predict the labels of the test sets."]},{"cell_type":"code","metadata":{"id":"wsyT8_egkhm_","executionInfo":{"status":"ok","timestamp":1730172530576,"user_tz":-420,"elapsed":1773,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}},"colab":{"base_uri":"https://localhost:8080/"},"outputId":"93b24947-0c61-4224-fef4-f2afc189c833"},"source":["# We use the trained model to predict the labels of the test set\n","prob_classes = model.predict(x_test)\n","\n","# The output class is the one with the highest probability\n","pred_classes = np.argmax(prob_classes, axis=-1)\n","\n","# Convert the label back to the original format\n","y_test_classes = np.argmax(y_test, axis=-1)"],"execution_count":18,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step\n"]}]},{"cell_type":"markdown","metadata":{"id":"m2OeoOjukqYJ"},"source":["Next we determine which samples are correct or incorrect."]},{"cell_type":"code","metadata":{"id":"rtlKYzaVkq__","executionInfo":{"status":"ok","timestamp":1730172533745,"user_tz":-420,"elapsed":429,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}}},"source":["correct_indices = np.where(pred_classes == y_test_classes)[0]\n","incorrect_indices = np.where(pred_classes != y_test_classes)[0]"],"execution_count":19,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"bKLdFq6YkrgF"},"source":["Then we plot the images with their corresponding classes. In the incorrect case, we also plot the ground truth classes for comparison."]},{"cell_type":"code","metadata":{"id":"UXjTXE4EksJ_","colab":{"base_uri":"https://localhost:8080/","height":501},"executionInfo":{"status":"ok","timestamp":1730172540087,"user_tz":-420,"elapsed":4737,"user":{"displayName":"Akadej Udomchaiporn","userId":"12826764406638924459"}},"outputId":"70f8de86-5797-4e5c-9b73-5fcd5745c1af"},"source":["print(\"Correct cases\")\n","correct_x_test = x_test[correct_indices]\n","correct_preds = pred_classes[correct_indices]\n","idx = np.random.choice(np.arange(len(correct_x_test)), 8)\n","plot_mnist_data(correct_x_test[idx], correct_preds[idx], 8)\n","\n","print(\"Incorrect cases\")\n","incorrect_x_test = x_test[incorrect_indices]\n","incorrect_preds = pred_classes[incorrect_indices]\n","correct_labels = y_test_classes[incorrect_indices]\n","idx = np.random.choice(np.arange(len(incorrect_x_test)), 8)\n","plot_mnist_data(incorrect_x_test[idx], incorrect_preds[idx], 8)\n","plot_mnist_data(incorrect_x_test[idx], correct_labels[idx], 8)"],"execution_count":20,"outputs":[{"output_type":"stream","name":"stdout","text":["Correct cases\n"]},{"output_type":"display_data","data":{"text/plain":["<Figure size 1500x1500 with 8 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAABJ4AAACuCAYAAAB3JsdUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAApx0lEQVR4nO3dfZyNZf7A8e/BYGeMkccQY0Y19EuNyFamHaQn2cGiXxJ6WvRg/exK/FbMpEjJYrOxWlsslUpKNj+xQw9YKSNPG0LJQyQG4yFm7t8fXg7Xfd0z58yZ+zr3OXM+79drXq/5Xue67/s7Z77Ofc/lPt/jsyzLEgAAAAAAAMBlFbxOAAAAAAAAAOUTC08AAAAAAAAwgoUnAAAAAAAAGMHCEwAAAAAAAIxg4QkAAAAAAABGsPAEAAAAAAAAI1h4AgAAAAAAgBEsPAEAAAAAAMAIFp4AAAAAAABgRLlaePL5fOLz+SQ7O9vTPJYvX+7PZfny5Z7mgrKhpuAm6gluo6bgJuoJbqKe4DZqCm6insLLtYWni58wr395saRJkyb+572kryZNmnidaqlRU+F3+vRpeffdd2XEiBHSsWNHufLKK6VmzZoSFxcntWrVkptuuklGjRol33//vdeplhr15J2ioiJ58803pWvXrtKoUSOpWrWqxMfHS0pKivz3f/+3fPjhh16nGBJqKvzuv//+oM55F3+9+uqrXqcdFOrJG0eOHJGPPvpInn32WenSpYs0aNDA/3to166d1+mFjHryRnmtJxFqygtcl8NNXtdTJSN7BRCVdu/eLb/5zW8cH/vpp59k1apVsmrVKpk4caJMnTpV+vXrF+YMEW0OHz4sXbp0kU8++UR7bNeuXbJr1y6ZN2+edO/eXebMmSNVqlTxIEuUZ2lpaV6ngAjWsmVL2bVrl9dpoJygnuAmrsvhJq/riYWncqJLly7yzDPPFPt45cqVw5gNolndunWlffv2cv3110tycrLUr19f4uLiZM+ePbJo0SKZM2eOFBQUyAMPPCB16tSRTp06eZ0yItg999zjX3RKSUmRJ554Qlq0aCFnzpyRL774QsaPHy8//vijvPPOO1K7dm2ZNm2axxkjkj377LMydOjQEuccPnxY2rVrJ0VFRXLllVfKjTfeGKbsEI0sy/J/X69ePbn++uvlgw8+8DAjRDPqCW7juhxu8rKeWHgqJ2rUqCFXX32112kgyqWmpsr+/fvF5/M5Pt6tWzfp37+/ZGRkyJkzZ2TkyJGc4FCstWvXypIlS0TkXG3l5eVJYmKi//H27dvL3XffLddee60cOXJEZsyYIU8//bTUrVvXq5QR4Ro2bCgNGzYscc7LL78sRUVFIiLSp0+fcKSFKPb4449LSkqKtGnTRho1aiQiUuw5EAiEeoKbuC6Hm7yup3LVXBxA2VSoUCHgBVKbNm2kQ4cOIiKybt06OX78eDhSQxRauXKl//v/+Z//URadzmvcuLE88MADInKuF9S///3vsOWH8mnWrFkicu6PPRaeEMjQoUOle/fu/kUCoCyoJ7iJ63K4yet6ipiFp4KCAnnzzTfl4YcflvT0dElKSpK4uDipU6eOZGZmyoQJE0r9gy9dulSysrKkfv36UrVqVUlNTZXHH39c9uzZE9T2X375pQwcOFDS0tKkWrVqkpCQIGlpafLII4/I1q1bQ/kxEUbUlDkXLyCcPn3aw0zCh3oqvZ9//tn/fWpqarHzmjZt6rhNeUdNuW/btm2yevVqERHJzMyU5ORkjzMKH+oJbqKe4DZqyhyuy6knNxmrJ8slubm5lohYImKNHj261NtnZmb6ty/uKyUlxdqyZUux+7j4+NnZ2cXuJykpyfr444+L3U9hYaE1ZMgQy+fzFbuPSpUqWdOnTw/4XOTm5jrOSU5O9s8pi/P76devX5n2E4moKefnwnRNBXLgwAHrkksusUTEql27ttFjuYl6cn4uTNbT+++/79/HlClTip03ZMgQ/7wNGzaEfLxwo6acnwsvX6NGjhzpP8bMmTONHccE6sn5ufCins7vNzMz0/V9hwv15PxcUE+ho6acnwuuy0NDPTk/F+W5niKmx9PZs2elRYsWkpWVJa1bt5YGDRqIZVny7bffyrvvvivz5s2TnTt3SteuXSUvL0+qVq1a7L4WLVoka9eulbS0NBk2bJhcc801kp+fL2+99ZbMmDFD8vPzpXPnzrJx40bHW2EHDRokf/nLX0RE5Fe/+pXcf//9kpqaKvHx8bJ+/XqZNGmSbNq0SQYMGCCXXnqpZGVlGXtegvXxxx9Lenq6fPPNN1JYWCj16tWTNm3aSK9evaRLly4x+f5yaso9p0+flr1798rSpUtl/PjxcvjwYRE59/apWEE9ld7tt98uKSkpsnPnTpk8ebI8+OCDkpCQoMz5/vvv/R93n5GREVO96qgpd1mWJf/4xz9ERCQ+Pl569OjhcUbhRT3BTdQT3EZNuYfrcurJTWGrJ7dWsMq6arl169YSH//oo4+sChUqWCJivfLKK45z5KJVxeuuu846duyYNmfWrFn+OT179tQeX7Jkif/x4o5z8uRJq0OHDpaIWMnJydaZM2eUx72446mkr7Zt21rff/99mY7jBWrqAi9Wwi8+ptNX3759rdOnT7tyrHCgni4IZz2tWrXKql27tiUiVtOmTa1p06ZZn376qZWbm2tNmDDBqlu3riUiVmpqasDnONJQUxdEwv/WLV++3L//3r17GzmGSdTTBV7X0/n9RvMdKtTTBdSTO6ipC7guLzvq6YJYqaeIWXgKRteuXS0RsTp37uz4+MVP1tq1a4vdz5133mmJnLvlbd++fcpj54uie/fuJeayefNm/7GWLFmiPBbO4rniiiusrKws66WXXrKWL19urVu3zsrNzbXGjh1rNWrUyH+M5s2bW0eOHCnTscKNmrogkl6QmjRpouUXDainC8JdT7t377aGDh1qxcXFafVUrVo1a8yYMdahQ4fKfJxwo6Yu8PoPO8uyrAcffLDY/KIB9XSB1/V0fr/RvFBAPV1APbmDmrqA6/Kyo54uiJV6ipjm4nYHDx6Ubdu2ycaNG/1fderUERGR9evXl7htixYtpFWrVsU+/uCDD4rIuVv0li9f7h8/evSoPw50i37z5s2ldu3aIiKyatWqQD+OZteuXWKdW/gr9bYXW7Nmjbz33nvy2GOPSWZmpqSnp0u7du1kxIgRsmnTJrnttttERGTLli2Sk5NTpmNFO2qqdK6//nrZsGGDbNiwQdauXSvz58+X+++/X3bv3i39+vWTv/3tb64cJ1pRT8GxLEveeOMNmTdvnpw5c0Z7/Pjx4zJnzhxZsGBBmY5THlBToTt16pS8/fbbIiLSsGFDueWWW1w/RrShnuAm6gluo6ZKh+vyklFPpeNFPUVMjycRkc8++0ymTJkiS5culZ9++qnYeT/++GOJ+7n++utLfLxNmzb+7zds2CD33HOPiJz7yMCioiIREenVq5f06tUrqLz3798f1DwTatSoUexjiYmJMm/ePElNTZWffvpJ/vrXv8pzzz0nlStXDl+CHqOmQpeQkKD022nVqpV069ZN7rvvPrnrrrvk4Ycflj179sioUaM8zDK8qKfSKSoqknvuuUfeeustERF56KGH5LHHHpPmzZtLYWGh5OXlyfPPPy/vv/++PPTQQ/LVV1/JpEmTPMnVK9SUOxYsWCBHjx4VEZH77rtPKlSI2P9XM4p6gpuoJ7iNmgod1+U66il0XtRTxFyZZWdnS0ZGhsybN6/EwhEROXnyZImP161bt8TH69Wr5//+4mMdOHAgiEx1J06cCGm7cEhKSvL/4ygoKJC1a9d6nFH4UFNm3HLLLTJ48GAREcnJyZH//Oc/HmcUHtRT6b388sv+Rafs7Gx55ZVXpGXLllK1alVJSEiQtm3bynvvvSd9+vQREZHJkyfLwoULPcnVC9SUe2bNmuX/vm/fvh5m4h3qCW6inuA2asoMrsupJzeZrKeIuONp2bJl/reBpaamytChQyUjI0MaN24sCQkJUqnSuTRHjRolY8aMCbi/UD/BrbCw0P/99OnT5aabbgpqu0suuSSk44XLVVdd5f9+z549HmYSPtSUWV26dJHnn39eioqKZP78+fK///u/XqdkFPUUmldeeUVEzt19OXz48GLnjR07VmbPni0iIjNnzpRf//rXYcnPS9SUe3744QdZsmSJiJz7H7uLz3mxgnqCm6gnuI2aMovrcurJTabqKSIWnmbMmCEi534Jq1ev9r8f0y7QauZ5P/zwQ9CP16xZ0/99rVq1/N/Hx8eXm4/1DvUfUzSjpsy6+Pn89ttvPcwkPKin0GzZskVEzi1+V6lSpdh5l112mdSrV09++OGHmPmfOmrKPXPmzPFf/PXr18/jbLxBPcFN1BPcRk2ZxXU59eQmU/UUEW+127Rpk4iItG/fvtjCEZGg3yb2+eefB/34xQWSnp7uX6T57LPPgjpWNNi8ebP/+wYNGniYSfhQU2ZdfOdctWrVPMwkPKin0Jz/H6ezZ88GnHu+8fj5bco7aso9599mFxcXF3R/hfKGeoKbqCe4jZoyi+tyZ9RTaEzVU0QsPJ3/o6SgoKDYOevWrZN///vfQe1vw4YNsm7dumIfnzlzpoiIVKxYUdq1a+cfr1Onjtxwww0iIjJ37lw5ePBgUMeLZPn5+fLGG2+IyLmV2NatW3ucUXhQU2ad79sjcu6TIMo76ik0KSkpIiKyceNGOXLkSLHzNm7c6P9fqfPblHfUlDs2bNjg/7SaTp06+T8xJtZQT3AT9QS3UVNmcV2uo55CZ6qeImLh6YorrhARkU8//VS2b9+uPX7w4EF/89lg9e/f37EY586dK//85z9FRKRr165Sv3595fGRI0eKyLmPR+zRo0eJfyydPn1apk6dKqdOnSpVbiIiTZo0EZ/PV6a3wS1evLjEZmnHjx+Xu+++Ww4dOiQi5z5RqqS3u5Qn1FRoXn/9dcnPzy9xzrx582T69Okicq55fVZWVsjHixbUU2jO92o6ffq0/P73v3f8CNhTp07J7373O3/cuXPnkI8XTagpd7z22mv+72O1qbgI9QR3UU9wGzUVGq7LnVFPofG6noy8pyEvL09effXVgPM6dOggjRs3lr59+8rChQuloKBAMjMzZfjw4dKqVSsREVm5cqVMnDhR9u/fLzfeeKOsWrUq4H5bt24ta9euldatW8uTTz4pLVq0kPz8fHn77bf9T2RiYqJMmDBB27ZTp04yePBgmTx5snz88cfSvHlzGThwoGRkZEitWrWkoKBAtm/fLp988onMnz9fDh8+7FlPieeee0569+4tv/nNbyQjI0OaNm0q1apVk/z8fFm5cqVMmzZNvvvuOxERSUtLk+zsbE/ydAM1FR7Tp0+X/v37S9euXeVXv/qVpKWlSVJSkhQUFMjXX38tb7/9tv/F1+fzyeTJk5X3OkcL6ik8fv/738vf/vY3OXDggPz973+Xbdu2ycCBA6VZs2ZSWFgo69atkylTpvjfDty8eXO5//77Pcm1rKip8CssLJS5c+eKyLmeC+Vp0ZJ6Cp+8vDzJy8tzfGz//v3a76FHjx5R91YW6il8YqGeRKipcOG6XEU9lY3n9WS5JDc31xKRUn29++67/u0feOCBYudVrFjRmjRpkjV69Gj/mJPzj40ePVqZa/+qXr26tXz58mJ/lqKiIisnJ8eqVKlSwJ8hISHBOnHiRLHPRW5uruMxkpOTS/xZgpGZmRnU85yZmWl9//33IR/HK9SU83MRCTV1ySWXWHPmzAn5OF6gnpyfC5P1ZFmWtW7dOislJSVgnunp6dauXbvKdKxwo6acnwvTNXXehx9+6N/fo48+6so+vUQ9OT8XpuuppJ/T6Wvnzp1lOl64UE/OzwX1FDpqyvm54Lo8NNST83NRnuspIt5qJ3LuvZOzZ8+Wm2++WRITE6VKlSqSnJwsffr0kZUrV8rgwYNLtb/s7GxZvHix3HXXXVKvXj2pXLmyNGnSRB599FHZtGmTZGZmFrutz+eTUaNGydatW2XYsGHSunVrqVmzplSsWFESExPlqquukt69e8trr70m+/btk1/84hdl/fFDMmHCBHnuueekS5cu0qxZM6ldu7ZUqlRJqlevLs2aNZN+/frJ4sWLJTc3Vxo2bOhJjl6ipkpv1qxZMnXqVOnVq5e0bNlSGjRoIHFxcZKQkCDJycnSuXNneemll+Sbb76Re++915McvUI9hSY9PV02bNggU6dOldtuu00uvfRSqVy5slSpUkUaNWokWVlZMnv2bFmzZo0kJyd7lqcXqKmymT17tv/7WH6b3XnUE9xEPcFt1FTpcV1ePOqp9LyuJ59lOTTdAAAAAAAAAMooYu54AgAAAAAAQPnCwhMAAAAAAACMYOEJAAAAAAAARrDwBAAAAAAAACNYeAIAAAAAAIARLDwBAAAAAADAiErBTCoqKpK9e/dKYmKi+Hw+0znBY5ZlybFjx6RBgwZSoYL7a5PUU2wxXU8i1FQsoZ7gNmoKbqKe4Dauy+EmXqPgtmBrKqiFp71790qjRo1cSw7RYffu3XLZZZe5vl/qKTaZqicRaioWUU9wGzUFN1FPcBvX5XATr1FwW6CaCmqZMzEx0bWEED1M/d6pp9hk8vdOTcUe6gluo6bgJuoJbuO6HG7iNQpuC/R7D2rhiVvkYpOp3zv1FJtM/t6pqdhDPcFt1BTcRD3BbVyXw028RsFtgX7vNBcHAAAAAACAESw8AQAAAAAAwAgWngAAAAAAAGAEC08AAAAAAAAwgoUnAAAAAAAAGMHCEwAAAAAAAIxg4QkAAAAAAABGsPAEAAAAAAAAI1h4AgAAAAAAgBEsPAEAAAAAAMAIFp4AAAAAAABgBAtPAAAAAAAAMIKFJwAAAAAAABjBwhMAAAAAAACMYOEJAAAAAAAARlTyOgG3/Otf/1LiP/3pT9qchQsXhisdACj3KlRQ/+/ipZde0uaMGzdOiXfv3m00JwCRrVevXtrYZZddpsQvvPBCuNIBAECqVq2qjQ0ZMkSJn3zySW3O/v37S9zvDz/8oI09//zzSrxs2TJtzqlTp0rcbzTijicAAAAAAAAYwcITAAAAAAAAjGDhCQAAAAAAAEaUmx5PLVq0UOI///nP2pyOHTsqcZUqVbQ5tWrVUuJ9+/YpsWVZAXP5+eeftbFnn31WiY8cORJwPzDD3g+sXbt2xo7l8/mU+B//+IcS79mzJ6T9Ll26VIk///xzbU5+fn5I+0Z4xMfHa2MnT55U4mBeb7w0duxYJW7atKk2x/4aCiC22HvBDRs2TJtz7NgxJabHE4pTr149JV68eLE2Jz09XYnt10wiInfddZcSO127o/yxX/OPHj26xMed5OTkaGPZ2dllyAqR4KqrrtLG7H+/O6levXqJj1955ZXa2M0336zE3bt31+a8++67AY8dbbjjCQAAAAAAAEaw8AQAAAAAAAAjWHgCAAAAAACAESw8AQAAAAAAwIhy01zc3vxr4sSJ2pxBgwaFJRenxuELFy5U4o8//jgsuUD34osvKvHcuXMDbjNkyBBtLC4uLuB277zzjhLfcMMNStyzZ8+Q9vvEE08o8fr167U51113XcD9wIw6depoY/bXpC+//FKbY29A+Mgjj7ibWBk1atRIifv376/Ev/71r7Vtzp49azQnAJGtZcuWSnzttddqc956661wpYMol5WVpcTXXHONNqeoqEiJO3TooM2x/91gv65C+WRvHh7KBwzRSLx82rRpkzZm/zCMSy+9NOB+evfurcT2D0Rw8tprr2lj9r8l/vrXvwbcT6TjjicAAAAAAAAYwcITAAAAAAAAjGDhCQAAAAAAAEZEZY+nLl26aGPjx49X4unTp2tzTp8+Xepj+Xw+JbYsS5tj79+0fft2bc63335b6mPDjEWLFpV6m1deecVAJiK33nqrNnb55Zcr8ZQpU7Q5FSqwZhzJrrjiCm3M/p5vpzn2nmBeuuSSS7SxN954Q4l37dqlxJ999pnJlABEoapVqwac889//jMMmSAa2fucuNX7cNq0aa7sB5HD3q8pNzfXlf3m5OS4sh9ENqd1ggkTJgTcLj4+Xolvu+02JQ6mx5NTP9TZs2cH3C7a8NcrAAAAAAAAjGDhCQAAAAAAAEaw8AQAAAAAAAAjorLH04ABA7SxZcuWKbFb7wEHTLL3cxIRGTJkiBIH089p586druWE0uvVq1eJsYj+Xu3hw4drc/bt2+duYqXQqlUrJZ40aZI2p3HjxkqckZFhMqWoY+8vISIyevTogHMi2fLly7Ux+88QzBynHhmZmZklznHaL6KPvb8dUBoJCQlKbO+nEow9e/ZoY16eb1F69nOK/dzqNMct9mM5HdvO6fzFOS76paena2P2PsBXX311wP0cOnRIibt166bNOXnyZOmSiwLc8QQAAAAAAAAjWHgCAAAAAACAESw8AQAAAAAAwAgWngAAAAAAAGBEVDYXByJRUlKSNta/f38lbtq0qRL37dtX26ZKlSpKfPbsWW3OzJkzlXjEiBFB5wn3PfTQQ0qclpamzalTp44S/+c//9HmjBs3zt3EitGkSRNtbOTIkUrctm1bbY69afq3337ral7RLpzNTsMlmPyDmRNMM9YVK1YoMY1Xywf7BxcApXHFFVeUGDs5c+aMEt9xxx3anBMnTpQtMRiTnZ2tjQVzDokkTudFznHRp1mzZkq8ePFibU7dunVL3IfTh/XMmzdPiVevXl365KIQdzwBAAAAAADACBaeAAAAAAAAYAQLTwAAAAAAADAiKns8/fjjj9rYzTffrMTXXXedNufLL780lhNiT0ZGhhKPGjVKm3PLLbeUuA+nmly/fr0SP/3009qc7777LpgUYYj9/dz215saNWoE3MeYMWO0sVOnTilx7dq1tTn2fc+dO1eJ161bp23Tp08fJR4wYIA259prr1Xib775RpuzdOlSbSyW5ebmKnGo/Zzat2+vxKb6PjjlZx+zHzvUnyna+nHAnJYtW3qdAmJMUVGREm/evNmjTOB0DrGfOyNJTk5OwDmc32JHenq6Egfq5+Rk69at2lis9HSy444nAAAAAAAAGMHCEwAAAAAAAIxg4QkAAAAAAABGsPAEAAAAAAAAI6KyufiECRO0sS5duijxggULtDmTJ09W4vfeey/gsY4fP67E1apVCyJD3b59+5S4oKAgpP3AfRUrVtTGBg0apMROjcMTEhKUuFKlwP+cbrvtNiX+5JNPtDlnzpxRYsuyAu4X4XXgwAElHjFihBL37dtX2+aXv/ylEleooK/7P/LII0pcWFiozbE3+LbX0I4dO7Rt6tSpE/DYM2fOVOKhQ4dqc/Lz87WxWBZK4217I3ERc83EgzlOoGOHmlt2drYS8zoWO+wfgODz+ZT47Nmz2javv/66yZQAeMRUI26nc9OKFSsCzgnlnBZKM3Sn49jPi4h8y5YtU+I5c+Zoc3r37l3iPuzrDyIiHTp0UGKnD/05fPhwMClGFe54AgAAAAAAgBEsPAEAAAAAAMAIFp4AAAAAAABgRFT2ePrqq6+0sbvuukuJP/jgA23OCy+8UGLs5NChQ0pcq1atYFLUfP3110ps76ciIvLiiy8qcVFRUUjHQuncfffd2pj9d+GWhx9+WIntdevEqafZkSNHlPjEiRNlygtlM3369BJjEf13/dRTT2lz6tWrp8R5eXnaHHvfgMcee0yJU1NTS0pVRERmzZqljQ0bNkyJ6efkDntPp3D1c/JaKP2vUD507dpVie19FOfPn69t8/PPP5tMCVEiLS1NG5sxY0ap9/Ppp5+6kQ5ckJOTo40F6sUUzvOk/VwVSj8nET1np36OiD4HDx5U4n79+mlzxo8fr8T2HtIpKSnaNj169FDi+vXra3PuvPNOJbb3nY5G3PEEAAAAAAAAI1h4AgAAAAAAgBEsPAEAAAAAAMAIFp4AAAAAAABgRFQ2F3dibyR40003aXM6d+6sxC1atCj1cd5++21t7PTp00rcrFkzbc4f/vAHJX7++ee1OZZlKbFTU2m4b9WqVdrYmjVrlLhatWoB91O7dm1tLD4+XomdGpkHMnjwYG3Mnt+QIUO0OatXry71sWDOokWLlHjJkiXanEqVKpUYi4j88Y9/LHMuffv21cauvPJKJXZ6DYXK3jTVqSFqrDQTt6O5eOwK9Noxbty4MGWCaPPQQw9pY40aNSr1fhYuXOhGOnCBqfOi0zkmmPNOZmZmqbcJhlMTdZQ/Th/8tXHjRiW+9dZbldj+4T0iIv3791fitm3banMWLFigxB07dgw2zYjFHU8AAAAAAAAwgoUnAAAAAAAAGMHCEwAAAAAAAIwoNz2e7DZv3hzUmAmLFy/Wxuzv0/zss8+0Ofa+T/Zttm/fXubcoNu1a5c2duONN5Z6P5dffrk2VrNmTSWuW7euEjv1M6hVq5YSO/XLaNOmjRI/9dRT2pz77rtPiQ8fPqzNgXfOnDkTcKxhw4banIEDByrx0qVLlXjbtm3aNr/97W+V2Kl3VKtWrZTY3vNJRGTr1q3aWCzLzs72OoWI4NQjw95HIxix2g8rmvl8Pm2sefPmJW5j72cJnNerV69Sb2Pvsyoisnv3bjfSQQTJzc1V4kjrI2jPz6nnE9cMsWHHjh1KPGjQIG2O/Xr/scce0+bcfPPNSmy//hcRmTZtWigpeoY7ngAAAAAAAGAEC08AAAAAAAAwgoUnAAAAAAAAGFFuezxFGnsfoRdeeEGbM3HiRCXu2bOnEo8bN871vOCeUHpwffDBBwHnjBgxQht75plnlPiOO+7Q5tx7771KPHXq1FJmh3Cz9wn74osvtDmJiYlK3KNHDyU+evSots3s2bOVeMmSJdqcatWqKfGQIUO0OY888og2BjgJpv+GvacTPZ6iT1pamjbWtm1bDzJBrFq/fr02Zu+Riuji1AvJrZ5OTr2XSntsp1xGjx5dYizCOS9WOfV0ta8DdOrUSZuTkpKixE8++aQ2Z+/evUr8/vvvh5Ji2HDHEwAAAAAAAIxg4QkAAAAAAABGsPAEAAAAAAAAI1h4AgAAAAAAgBE0F/fI119/HXBO5cqVw5AJIt348eO1sauvvlqJ77nnHm1Ot27dlJjm4pHvj3/8oxJXqKD/38B1112nxMeOHQu439WrVyvxpEmTtDkjR45U4qSkpID7BcrCrWaxiGybNm1S4s2bN3uUCSKN/UMtKlasWOp9TJkyxa10ECFCbbptqnl3MPt1aiYeaA7NxWPXd999p8Rjx47V5syYMUOJk5OTtTl33nmnEtNcHAAAAAAAADGJhScAAAAAAAAYwcITAAAAAAAAjKDHExDhfvGLX2hjWVlZHmQCN11++eXa2L333qvEa9as0ebk5eWV+dhfffWVNnb27FklfvHFF8t8HMSGYHpbOMnJyXE5E0SiHTt2KPGpU6c8ygSRZsCAAUpcr169gNtYlqXEhYWFruYE7zn1PioP/ZDoa4jzLr30UiV+9NFHQ9rPG2+84UY6YcMdTwAAAAAAADCChScAAAAAAAAYwcITAAAAAAAAjGDhCQAAAAAAAEbQXByIcB07dtTG4uPjlbioqEibs2LFCmM5oexatWqljZ04cUKJR44caeTY3bt318Z27typxF988YWRY6P8CbVhanZ2tqt5IDL4fD4lXrx4sUeZINI9++yzpd5m/fr1Sjxv3jy30gGAMqtbt64SP/HEE9qcxx9/XImrVKmizTl69KgST5w4UZvzySefhJKiZ7jjCQAAAAAAAEaw8AQAAAAAAAAjWHgCAAAAAACAEVHR46lJkyZK3Lx585D2s23bNiXevn17qCmVWcOGDQPOsfdJQGzo2rWrEr/11lsBt9mwYYM2NmbMGLdSQphs3bpVid3q02V/vbnjjju0OS+//LIrx0L5F2pPJ8QGy7K8TgER6KmnntLG4uLiSr2fUaNGuZEOELJQ+xPm5OS4mwjCLiMjQxtr1KiREk+dOlWJa9SooW1j/xvf6bxpP9bGjRuDTTNicccTAAAAAAAAjGDhCQAAAAAAAEaw8AQAAAAAAAAjWHgCAAAAAACAERHZXPyWW25R4gULFihxQkJCwH188cUX2tj06dOV2Mvm4t27d9fGdu3apcR/+ctfwpQNvNKzZ09t7LXXXlPiChX09eE9e/Yo8ezZs91NDK6Lj49X4gEDBmhz7M0GK1asqM0pLCws8TiVKukv6y+99JISr1y5UpszduzYEvcLnEdzcZTE/jpWvXp1jzJBJAmlkbiIyKeffqrE//rXv9xIBxHEfk5xOscsX768xNgkez6jR48OuI1TfqE2JUfp1axZU4mHDx+uzbn11luV2L5OICJy+eWXK/HgwYO1OU7X6hf7/PPPtbFFixYp8TvvvKPN2bJlS4n7jUbc8QQAAAAAAAAjWHgCAAAAAACAESw8AQAAAAAAwIiI7PGUl5enxO+//74SZ2VladvY+z4tW7ZMm/Pll18qcWpqqjZnx44dwabpV7lyZSVu3LixNufBBx9U4ttvv12bY3/f6IEDB0qdC8zIyMjQxux9B5xcc801Svy73/1Oie+++25tmypVqiixU0+fQYMGKfF7770XMBd4y7IsJba//1xErxen94UPGzasxONMmzZNG7P3WLG/Z11E5Pjx4yXuF7HJqddGMP0t7HJyclzIBtHA/lpn72U4fvz4cKYDj9j7DTpdGwfj5MmTJcaIfsH0UMrMzFRiUz2enM55ubm5pd7PihUrXMgGoXrmmWeUeODAgQG3cau3sr1eOnfurM2J1dcx7ngCAAAAAACAESw8AQAAAAAAwAgWngAAAAAAAGBERPZ4OnTokBL37t1bidPS0rRt7O/lHDBggDbH3hvl7Nmz2hx7Hyifz6fE9t4FIiJVq1ZVYnufFhGRY8eOKfH06dO1OS+//LI2Bm+MHDlSiUeNGqXNefHFF5W4bt262pxu3bopcVJSUqlz+cMf/qCN0dMp+tjfzz1u3Dhtzt///ncl/q//+i9tzkcffVTicfLz87WxBx54QImPHj1a4j6A80Lp5ySi93TKzs52IRtEmp9//lkbKygo8CATRJomTZoocZ8+fULaz6uvvlr2ZBDRgjnP2HsmhXpOsfeKcurpFAp7zynOeeFVsWJFJW7RooUr+92/f78SO/VenTFjhhLbewDHaj8nJ9zxBAAAAAAAACNYeAIAAAAAAIARLDwBAAAAAADACBaeAAAAAAAAYERENhcP5Ouvv9bGevbsqcQ1atTQ5txwww1KfPvtt2tzateurcT2xuZO7I2eJ0yYoM35v//7PyU+ePBgwP3CO7/97W+V2N60TkRvVh+K+fPna2PDhw9X4h07dpT5OIg8b775pjZWWFioxL/85S+1OfZm82vWrFHixx9/XNtm7dq1oaQIhNx41d5oFeWT0/nJ/trWsWNHJbZfZ4mI/Pjjj+4mBs8NHDjQlf1s2bLFlf0gctnPF07nnVA/6MIN9vzsjc5FaCbuNfv186ZNm5S4fv362jZjxoxR4lWrVmlz7B8Otm/fvlBThHDHEwAAAAAAAAxh4QkAAAAAAABGsPAEAAAAAAAAI3yWZVmBJh09elSSkpLCkQ8iSH5+vlSvXt31/UZDPbVv316JP/zwQ21OXFycEi9atEibY3+P8TfffKPEr7/+urZNQUFB0HlGE1P1JBIdNQV3UU/hEcQlgiOfz+dyJuZRU3BTrNeT/Wc/fPhwwG3WrVunjXXq1EmJDxw4ULbEolh5vS6393QKpseTUx9B+3ZOc5z6MwVSXvs3xfprFNwXqKa44wkAAAAAAABGsPAEAAAAAAAAI1h4AgAAAAAAgBEsPAEAAAAAAMCISl4nAESi3NxcJa5atapHmQBA+ITSRNWpgSuA2Hb06FElrlixokeZINLZzyFO55Ty2uAbiCXc8QQAAAAAAAAjWHgCAAAAAACAESw8AQAAAAAAwAh6PAEAABERyczMLPU2K1asMJAJAAAAygvueAIAAAAAAIARLDwBAAAAAADACBaeAAAAAAAAYAQLTwAAAAAAADCC5uIAAEBERNq1a+d1CgAAAChnuOMJAAAAAAAARrDwBAAAAAAAACOCequdZVmm80AEMvV7p55ik8nfOzUVe6gnM44ePVrqbU6dOmUgk/CjpuAm6glu47ocbuI1Cm4L9HsPauHp2LFjriSD6HLs2DFJSkoysl/EHlP1dH7fiC3UkxmmntNoQE3BTdQT3MZ1OdzEaxTcFqimfFYQS5JFRUWyd+9eSUxMFJ/P52qCiDyWZcmxY8ekQYMGUqGC++/GpJ5ii+l6EqGmYgn1BLdRU3AT9QS3cV0ON/EaBbcFW1NBLTwBAAAAAAAApUVzcQAAAAAAABjBwhMAAAAAAACMYOEJAAAAAAAARrDwBAAAAAAAACNYeAIAAAAAAIARLDwBAAAAAADACBaeAAAAAAAAYMT/A7UHkA32x681AAAAAElFTkSuQmCC\n"},"metadata":{}},{"output_type":"stream","name":"stdout","text":["Incorrect cases\n"]},{"output_type":"display_data","data":{"text/plain":["<Figure size 1500x1500 with 8 Axes>"],"image/png":"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\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["<Figure size 1500x1500 with 8 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAABJ4AAACuCAYAAAB3JsdUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAwPUlEQVR4nO3deXyM5/r48SuxS8RWJLbgnFYRPVpbLW3Qc2y1RNFT+/LtQZWj7YuW05ygSvtFVR3qqH0vopZSih77VlsqttOo5YtEaO1LQ2R+f/gZ7ud+ZCaT55lJzOf9enm9ct1zPc99m7k8M7nNXBPgcDgcAgAAAAAAAFgs0NcLAAAAAAAAwJOJjScAAAAAAADYgo0nAAAAAAAA2IKNJwAAAAAAANiCjScAAAAAAADYgo0nAAAAAAAA2IKNJwAAAAAAANiCjScAAAAAAADYgo0nAAAAAAAA2OKJ2ngKCAiQgIAAGTZsmE/XsWnTJudaNm3a5NO1IHOoKViJeoLVqClYiXqClagnWI2agpWoJ++ybOPp0TvM1w+ev+jevbvzPnf3z6xZs3y9bLdRU96XkpIiy5YtkyFDhsif//xneeaZZ6RIkSKSK1cuKVq0qNStW1diYmLk7Nmzvl5qhlFP3sc1CnY4cuSIjBkzRlq0aCHlypWTvHnzSv78+aV8+fLyxhtvyHfffefrJXqEevKtX3/9VWJiYuS5556TkJAQCQkJkeeee05iYmLkt99+8/XyMox68o0rV67I+vXrZeTIkdK6dWspWbKk83Fo0KCBr5eXKdSUb/CcB6vdu3dP5s+fL6+++qqEhoZK7ty5pUSJEtKgQQOZMmWKpKam2jJvTlvOiiyrYsWKvl4CsrAzZ87Ia6+9ZnrbpUuXZOfOnbJz504ZN26cTJo0Sbp16+blFeJJxzUK6enWrZvMmTPH9LZTp07JqVOnZNGiRdKkSRP5+uuvpVChQt5dILKl3bt3S1RUlJw/f14Zj4+Pl/j4eJk2bZosX75catWq5aMVIrt4/vnn5dSpU75eBp4QPOfBaklJSfLaa6/Jrl27lPELFy7IhQsXZPPmzTJ16lT59ttvJSwszNK52XjKxkaOHCkDBw5MN+fy5cvSoEEDSUtLk2eeeUbq1KnjpdUhuypevLg0bNhQatasKeHh4RIWFia5cuWSc+fOyerVq2X+/Ply8+ZN6dGjhxQrVkyaN2/u6yUji+IaBaudO3dORESKFCki7dq1kwYNGki5cuUkZ86ccuDAARk3bpz897//le+//15atmwpmzdvlsDAJ6qrACx25swZadmypVy8eFFy5swp7733nrRo0UJERFatWiXjxo2TpKQkadmypezbt09Kly7t4xUjK3M4HM6fS5QoITVr1pRVq1b5cEXIznjOg5Vu374tzZs3l7i4OBER+fOf/yx9+vSR8uXLy2+//SaxsbEybdo02bdvn7Ro0UK2b98uefPmtWx+Np6ysVKlSkmpUqXSzZk8ebKkpaWJiEiXLl28sSxkYxUqVJDz589LQECA6e1t2rSRXr16Sf369eXu3bsSHR3NxhMei2sUrFamTBmZMmWKdOvWTfLkyaPcVrNmTencubM0adJEtm3bJtu2bZN58+ZJ165dfbRaZAcffvihXLx4UUREFixYIO3bt3fe9tJLL0n16tXlr3/9q1y4cEGio6Oz1ceB4X39+vWT8uXLS61ataRMmTIiIo99TQW4wnMerDRp0iTnplOPHj1k+vTpyvXpL3/5i7z44ovSs2dP2b9/v0ycONHlfyBnBFuiT7gHb88MCAjglzq4FBgY6PIFUq1ataRRo0YiInLgwAG5ceOGN5aGJxTXKGTEzJkzpVevXtoL8Afy588vkydPdsaxsbHeWhqyofPnz8v8+fNFRKRJkybKptMDr7/+ujRp0kRERObOnat9HA941MCBA6Vt27bOTScgM3jOg5Ue/MdJUFCQfP7556a/8/Xo0UPq1asnIiJjxoyRe/fuWTZ/ltl4unnzpixatEjefPNNqVatmhQsWFBy5colxYoVk8jISBk7dmyGf8HdsGGDtGrVSsLCwiRv3rxSoUIF6devn/Nti67s379f+vTpIxUrVpTg4GAJCgqSihUryltvvSU///yzJ39Nr0pISHB+fjMyMlLCw8N9vCLvoqbsU6BAAefPKSkpPlyJ91BP1uMaRU3ZISIiQp566ikREfnll198vBrvoZ4ybuXKlc53XPbo0eOxed27dxcRkbS0NFm5cqU3luZz1BOsRk3Zg+c86skdt2/flsOHD4uISJ06daRgwYKPzW3atKmI3O/7tHXrVusW4bDIxo0bHSLiEBHH0KFDM3x8ZGSk8/jH/Slfvrzj6NGjjz3Ho/MPGzbssecpWLCgY8uWLY89z7179xzvvvuu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\n"},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"5JXyu9BxlUSO"},"source":["# Play around\n","\n","Now it is your turn! Let's try to change the model architecture and the optimizer to see the effects.\n","\n","For example,\n","* Change the number of fully-connected layers (in this [section](#define-model))\n"," * e.g., 2, 3, 4 layers\n","* Change the number of hidden units (in this [section](#define-model))\n"," * e.g., 10, 128, 256, 512\n","* Change the optimizers (i.e., `optimizer`)\n"," * e.g., [keras.optimizers.RMSprop](https://keras.io/optimizers/#rmsprop), [keras.optimizers.Adadelta](https://keras.io/optimizers/#adadelta), [keras.optimizers.Adam](https://keras.io/optimizers/#adam)\n","* Change the learning rate of the optimizer (i.e., `learning_rate`)\n"," * e.g., 10000, 0.00001, 0.001\n","* Change the number of training epochs (i.e., `epochs`)\n"," * e.g., 1, 10, 20"]},{"cell_type":"code","metadata":{"id":"-P9dZSYrlRL-"},"source":[],"execution_count":null,"outputs":[]}]} |