commit e91dc7742f04667c3861502167a352cba12f17dd Author: rezayaghobi-dev Date: Sat Jul 11 22:01:14 2026 +0330 Initial commit: MLP regularization, CNN BatchNorm comparison, autoencoder denoising diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6c455f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +# Python +__pycache__/ +*.py[cod] +.venv/ +venv/ + +# Jupyter +.ipynb_checkpoints/ + +# Datasets and model artifacts โ€” regeneratable, don't belong in git +datasets/ +*.h5 +*.keras +*.pb +*.ckpt +*.weights + +# OS / editor +.DS_Store +.vscode/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..007fc32 --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# Deep Learning Portfolio + +A collection of deep learning experiments built with TensorFlow/Keras โ€” regularization and normalization comparisons, and an autoencoder for image denoising. + +![TensorFlow](https://img.shields.io/badge/TensorFlow-FF6F00?style=flat&logo=tensorflow&logoColor=white) +![Keras](https://img.shields.io/badge/Keras-D00000?style=flat&logo=keras&logoColor=white) +![Python](https://img.shields.io/badge/Python-3776AB?style=flat&logo=python&logoColor=white) + +๐Ÿ“– **Full write-ups with result plots:** [docs/Home.md](docs/Home.md) + +## Projects + +| Project | Comparison | Result | +|---|---|---| +| [mnist-mlp-regularization](mnist-mlp-regularization/) | Baseline MLP vs Dropout | Test loss 0.279 โ†’ 0.099 *(not a clean ablation โ€” see project README)* | +| [cnn-batchnorm-comparison](cnn-batchnorm-comparison/) | Baseline CNN vs BatchNorm | Test loss 0.289 โ†’ 0.094 (clean ablation) | +| [autoencoder-denoising](autoencoder-denoising/) | Noisy โ†’ clean image reconstruction | Recognizable digits recovered through a 32-unit bottleneck | + +Each project folder has its own README with architecture, training config, and results. The `docs/` folder has deeper write-ups with the actual result plots. + +## Tech stack + +Python, TensorFlow, Keras, NumPy, matplotlib + +## Author + +**Reza** โ€” Computer Networks student, LPIC-1 +[GitHub](https://github.com/rezayaghobi-dev) diff --git a/autoencoder-denoising/README.md b/autoencoder-denoising/README.md new file mode 100644 index 0000000..eae6ab9 --- /dev/null +++ b/autoencoder-denoising/README.md @@ -0,0 +1,33 @@ +# Autoencoder Image Denoising โ€” MNIST + +A simple fully-connected autoencoder trained to reconstruct clean MNIST digits from noisy versions of them. + +## Architecture + +``` +Input(784) โ†’ Dense(32, relu) [encoder/bottleneck] + โ†’ Dense(784, sigmoid) [decoder] +``` + +Gaussian noise is added to the input images; the network is trained to output the *clean* version, using binary crossentropy loss between the reconstruction and the original image. + +## Approach + +1. Load MNIST, normalize pixel values to [0, 1] +2. Add Gaussian noise (factor 0.5) to create noisy training inputs +3. Train the autoencoder to map noisy โ†’ clean, compressing through a 32-unit bottleneck +4. Evaluate by visually comparing original, noisy, and reconstructed images + +## Result + +![Denoising result](autoencoder-denoising-result.png) + +Despite the bottleneck compressing each 784-pixel image down to just 32 values, the network recovers a recognizable digit โ€” showing the encoder is learning a meaningful compressed representation rather than just copying pixels through. + +## Tech stack + +TensorFlow / Keras, NumPy, matplotlib + +## Notebook + +[`encoder-noisy-image.ipynb`](encoder-noisy-image.ipynb) diff --git a/autoencoder-denoising/autoencoder-denoising-result.png b/autoencoder-denoising/autoencoder-denoising-result.png new file mode 100644 index 0000000..877e941 Binary files /dev/null and b/autoencoder-denoising/autoencoder-denoising-result.png differ diff --git a/autoencoder-denoising/encoder-noisy-image.ipynb b/autoencoder-denoising/encoder-noisy-image.ipynb new file mode 100644 index 0000000..bbb7e73 --- /dev/null +++ b/autoencoder-denoising/encoder-noisy-image.ipynb @@ -0,0 +1,445 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 16, + "id": "57aeff2c-619a-412f-8947-278f4e0fdc3d", + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras.datasets import mnist\n", + "from tensorflow.keras.layers import Input,Dense\n", + "from tensorflow.keras.models import Model\n", + "import matplotlib.pyplot as plt \n", + "import numpy as np \n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "3c3c5ee0-eb4d-4ad9-8d1f-42bd153d7fa9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(60000, 28, 28)\n", + "(10000, 28, 28)\n" + ] + } + ], + "source": [ + "(X_train,_),(X_test,_) = mnist.load_data()\n", + "X_train= X_train.astype('float')/255\n", + "X_test = X_test.astype('float')/255\n", + "noise_factor = 0.5\n", + "\n", + "X_train_noisy = X_train + noise_factor * np.random.normal(loc= 0.0 ,scale=1.0, size=X_train.shape)\n", + "X_test_noisy = X_test+ noise_factor * np.random.normal(loc= 0.0 ,scale=1.0, size=X_test.shape)\n", + "\n", + "X_train_noisy= np.clip(X_train_noisy,0.,1.)\n", + "X_test_noisy= np.clip(X_test_noisy,0.,1.)\n", + "\n", + "print(X_train.shape)\n", + "print(X_test.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "46fd7fed-d520-43b3-a13e-61b31219f8c3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(60000, 784)\n", + "(10000, 784)\n" + ] + } + ], + "source": [ + "X_train = X_train.reshape(len(X_train),784)\n", + "X_test =X_test.reshape(len(X_test),784)\n", + "\n", + "X_train_noisy = X_train_noisy.reshape(len(X_train),784)\n", + "X_test_noisy =X_test_noisy.reshape(len(X_test),784)\n", + "\n", + "print(X_train.shape)\n", + "print(X_test.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "859ca52a-6459-42b6-87f2-9c71d6db83f5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"functional_3\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"functional_3\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“\n",
+       "โ”ƒ Layer (type)                         โ”ƒ Output Shape                โ”ƒ         Param # โ”ƒ\n",
+       "โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ\n",
+       "โ”‚ input_layer_2 (InputLayer)           โ”‚ (None, 784)                 โ”‚               0 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ dense_4 (Dense)                      โ”‚ (None, 32)                  โ”‚          25,120 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ dense_5 (Dense)                      โ”‚ (None, 784)                 โ”‚          25,872 โ”‚\n",
+       "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n",
+       "
\n" + ], + "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", + "โ”‚ input_layer_2 (\u001b[38;5;33mInputLayer\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m784\u001b[0m) โ”‚ \u001b[38;5;34m0\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ dense_4 (\u001b[38;5;33mDense\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m) โ”‚ \u001b[38;5;34m25,120\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ dense_5 (\u001b[38;5;33mDense\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m784\u001b[0m) โ”‚ \u001b[38;5;34m25,872\u001b[0m โ”‚\n", + "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 50,992 (199.19 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m50,992\u001b[0m (199.19 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 50,992 (199.19 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m50,992\u001b[0m (199.19 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "input_img = Input(shape=(784,))\n", + "encoder= Dense(units=32,activation='relu')(input_img)\n", + "decoder= Dense(units=784,activation=\"sigmoid\")(encoder)\n", + "\n", + "autoencoder = Model(input_img,decoder)\n", + "autoencoder.summary()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "4696941f-25c1-4761-8c7f-6fbf8d6d3fb2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.2848\n", + "Epoch 2/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1957\n", + "Epoch 3/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1705\n", + "Epoch 4/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1567\n", + "Epoch 5/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1477\n", + "Epoch 6/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1411\n", + "Epoch 7/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1363\n", + "Epoch 8/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1324\n", + "Epoch 9/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1301\n", + "Epoch 10/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1287\n", + "Epoch 11/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1278\n", + "Epoch 12/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1273\n", + "Epoch 13/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1270\n", + "Epoch 14/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1264\n", + "Epoch 15/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1259\n", + "Epoch 16/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1257\n", + "Epoch 17/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1255\n", + "Epoch 18/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1253\n", + "Epoch 19/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1252\n", + "Epoch 20/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1251\n", + "Epoch 21/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1250\n", + "Epoch 22/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1249\n", + "Epoch 23/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1248\n", + "Epoch 24/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1247\n", + "Epoch 25/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1246\n", + "Epoch 26/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1245\n", + "Epoch 27/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1244\n", + "Epoch 28/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1243\n", + "Epoch 29/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1242\n", + "Epoch 30/30\n", + "\u001b[1m235/235\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 0.1242\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "autoencoder.compile(optimizer='adam',loss='binary_crossentropy' )\n", + "autoencoder.fit(X_train_noisy,\n", + " X_train,\n", + " epochs=30\n", + " ,batch_size=256)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "236587e5-6a18-4d2f-b6a3-dc693369469e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"functional_4\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"functional_4\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“\n",
+       "โ”ƒ Layer (type)                         โ”ƒ Output Shape                โ”ƒ         Param # โ”ƒ\n",
+       "โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ\n",
+       "โ”‚ input_layer_2 (InputLayer)           โ”‚ (None, 784)                 โ”‚               0 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ dense_4 (Dense)                      โ”‚ (None, 32)                  โ”‚          25,120 โ”‚\n",
+       "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n",
+       "
\n" + ], + "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", + "โ”‚ input_layer_2 (\u001b[38;5;33mInputLayer\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m784\u001b[0m) โ”‚ \u001b[38;5;34m0\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ dense_4 (\u001b[38;5;33mDense\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m) โ”‚ \u001b[38;5;34m25,120\u001b[0m โ”‚\n", + "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 25,120 (98.12 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m25,120\u001b[0m (98.12 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 25,120 (98.12 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m25,120\u001b[0m (98.12 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "encoder_model = Model(input_img,encoder)\n", + "encoder_model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "32e5ec7d-36a0-45c7-972b-07c8dd08aebb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 771us/step\n", + "\u001b[1m313/313\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 559us/step\n" + ] + } + ], + "source": [ + "pred = autoencoder.predict(X_test_noisy)\n", + "encoded_images = encoder_model.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "71411a47-62a9-4a10-ade4-0e2fc518e5a4", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABe0AAAFICAYAAADNvNUkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAApcBJREFUeJzt3XeYFFX2xvEzwwSygoqCigqIERQT5oQiKmbFnCPmnH/GNa5Z15zRNa85RzCiYlZUTAgSzMQhTPj9gX1476WrqR5g6KG/n+fZZ8/QVT3V3advBee+VVJXV1dnAAAAAAAAAABgviud3xsAAAAAAAAAAABm4KI9AAAAAAAAAAAFgov2AAAAAAAAAAAUCC7aAwAAAAAAAABQILhoDwAAAAAAAABAgeCiPQAAAAAAAAAABYKL9gAAAAAAAAAAFAgu2gMAAAAAAAAAUCDK0ixUW1tro0aNslatWllJScm83qaiVldXZxMmTLAOHTpYaWlx/jcV+q3h0G8z0HMNg36bgX5rGPTbDPRbw6HnZqDnGgb9NgP91jDotxnot4ZDz9FvDYl+m4Geaxj59Fuqi/ajRo2ypZdeeq5sHNIZMWKELbXUUvN7M+YL+q3hFXO/mdFzDY1+o98aEv1GvzU0eo6ea0j0G/3WkOg3+q2hFXPP0W8Nr5j7zYyea2hp+i3VRftWrVolPrbWWmsFP3/44YdpnjLw9ttve73BBht43b9/f69vuummYJ3333/f63XWWcfrRRZZxOs//vgj721J68477/T6oIMOCh4rLy/3evr06V7ra1t11VWDdXbccUczM5s0aZLtuuuuOd/zBV382ldccUWvJ0yYEDz2yy+/5P38ZWUz23611VbzervttvP6vPPOC9bZb7/9vL733nvz/p0bbbSR17W1tV5r75uZ3XDDDV7ffffdXuf6Xo0bN87rhRZayOsOHTp4/cILLwTrdO/ePfi5mPvNLPfr32mnnYKf33jjDa//+uuvOfq9BxxwgNf6eddXjx49vP7444+zLrP66qsHP3/yySd5/562bdt6rd+NUaNGef3www8H61x44YU2ZcoUu+iii+i3f17/iBEjrHXr1rb++uv7Y19++WWwbPv27b3eZZddvNaxQscAs3AcUKeffrrXl156aapt3WKLLbx+5ZVXEpfTsXjJJZdMXG7zzTf3+phjjsn67yussEKwzpgxY2a7nfvuu2/w88CBA622ttZGjhxJv/3z+rt27WpNmjSxoUOHJi77zDPPeH3YYYd5rd/ttLR31lhjjeCxyy+/3OvDDz/c61tuuSXVcz/55JNeL7rool7rcZaZWbt27bz+9ddfvV5zzTW91n2/mdmrr77q9Ztvvum1nsBsueWWwTqDBg0ysxn79x9++IGe++f1V1ZWWklJiU2ZMsUfO/7444Nlr7nmmqzPsfDCC3u9+OKLB4+NGDHC68mTJ3u9++67e/3QQw+l2lb9K7KTTz45eOz111/3+scff/Q67fmF/uWUHvvpcahZ2LcDBw7M+lwvv/xy8LP2IP0Wvn7dt1x//fXBYx07dvT6888/z/rv8T41aX0dX+Lj9Isuusjrs846K+tz9evXL/j5tttu8zppP677SjOzK664wut4nM3Q3jULX9+ee+7p9dZbb+31VVddFazTrVs3q6mpsa+++op+i/apei754osvBsvuv//+XutYp5/BscceG6xz3XXXea19kOt4bJNNNvG6qqrKa71eEl+z2XDDDbNuWy4tW7bMWi+77LJex38x+s4773i97rrreq3j+OzO54u55zKvfeutt7by8vLgsz7ppJOCZXV8+vnnn73ee++9vY73jdXV1V7rmKTncfE+WPeBdXV1XtfU1CS+Dr329cUXX8x2mXi55Zdf3mvtvaTz3Zge93399dfBY5MmTQp+LuZ+M5v19a+00kpeN2/ePHhsyJAhXvft29drPZ+Irz3ocZeOF9tvv73X5557brBOmmtxH3zwQfDz2muvnXU5PU+tz7XEmPaWvh96rnPqqacG6+S7T0110T7XtIj4wLM+9IunKisrE7chaZ2GmsoSN6xKer/0vaqoqAgea9GiRarnKAbxa2/SpInXc+Pz1efX527atGniOvHnlS/97PXELdasWbOs6+TSunXrrP+u79XsBoNi7jez3K9f/yOc2dwdY+a0r2Laz3OyzOzoe6DjdPxeKf1+0W8zXn/r1q2tdevWOT+TpPdaJY0BsaT1c5nTcSjX8+l+T9evz3cs/i7pc9BvM15/kyZNZvv9189kTsc6/axz9V59xkHdzqTjQbPk15Br35/U8/pc8TbH7ys9V+L/H78XacehpGO1+DFVn17S54q3TXuhPt+HpO2M/z3NOBufJ6T5PcUinx7Tz1H3O2nfQ10/1+eW65wi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fBZ++eWXrbQ093V+zbFXcY69+vPPP73WLK20uUirrbaa15p/FGfY77TTTl5r9lBFRYXXcZaW0iy6iy66yOsRI0YkrqM5gmPGjPE6k50VL1ffXMYF0d9//20lJSWzZD4qvYfC0KFDvT7vvPO81s/KzOyss87yWjP8NDe5a9euwTrXXnut1yluAzELzbHK1QdKc+w1GzhX9r5accUVva6qqgoeu/XWW/3f41yuYjZy5MhgPMgmzvnM0GzHJ554InjsqKOO8nq55ZbzWnPhtC/NzLbddluvF1lkEa91jNX+z2WXXXbx+rHHHktc7vvvv/das9/i7PE111zTa+3tTK6z2az3n1h22WWttrY2MX+4GPXr188qKirsuuuu83979dVXg2VuvvnmrOs2bdrU6zhrXnPsleaXduzYMXhsv/328/rGG2/Mur7eD8TM7Ndff/VaswY7dOiQdX0zsylTpnitWa+PPvqo15oJHS+nLrjgAq/1OAK5aY59WVl4GKgZ3km537FNN93Ua836jve9SntW85pV2vzfXDn2SnOpM/tAs1n7XcdlzVpt166d13EGZiZXvz7HBwuy5557zlq0aBG8X7qfMQvffx1Tvvzyy8R1ku4TpMeLF154YbBOmn6O70fz3nvvZV1O7yMS3zNI95c6Fm644YZe33XXXcE6Oh7rfWv0XhA77rhjsM64ceOsurp6lvt3wezbb7/1Oj6e7969u9d6rLbVVlt5rfciiB1xxBFe63G6nkOYhTn22223ndeaJx3vq/UcNOlYNL7ny6BBg7zeeOONvT7++OO93nXXXYN10nwXNMMe2a266qpWXl6eM9M+aT+mY2J8jxSl97XQcS/OtNdrIXqcpZn4N910U+Lv0e9FLnofBz1v0WPAXPej0VxxHTvje63tv//+qbanGI0ePdrr+FhEe1HHJ72PT4sWLRKfW++L8dZbb3kd74M1I1+fWzO84+tjOt7p/Rk0n/zAAw8M1tFrGXpdUJfT98MsHN90v6vnn08//XSwTuZ4oaamJjgOwQz6nY4z7fVzSbofY7x/fP75573W6x3PPvus13379g3W0X786KOPUm33Mccc47Xek1XvR6rXns3C+7rpveT0OC0eS/W6ck1Njdd6XSQ+Jh08eHBwzjU7/KU9AAAAAAAAAAAFgov2AAAAAAAAAAAUiJK6FHN5M5Etiy66qJWW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LVu29FpzUmNnn3221//617+81mxUzaM3C8dWfezRRx9N/J06Zm+//fZea4awZrjGzjvvPK979erl9UYbbRQsd/7559uUKVPskksuod/+6bfBgwdby5Ytg/xSzRQ3C7/fmj+6yy67zNE2/PDDD8HPmrun/vzzT6/1XiFm4X0L2rVr5/XQoUO91v2zWZhjePrpp3t96aWXJm6r9mJSlnVsp512sunTp9szzzxDv/3Tb9dcc401a9bMnnvuOX9MsxfNwmOgHj16eP2///3Pa83mNgvv06LHOSo+NrvsssuyPqbHY+utt16wjuZH6zj81VdfZd1+s3Ac1ZzeXP2m9L45mnup+Z5mZqecckrwMz03o+dWWGEFa9KkSfAZxbQX9txzT687duyY6ndVVFR4PW3aNK/jfPoVVljBa80j1TzqXFKcLpmZ2f777+/15ptv7vXxxx/vdXxc8f7773ut92fSHHvN8I3RbzP6bckll7TS0lIbMWLEHD1ffI8hvYeBZtXrPdly3UMh6fwvvgeHnvfq/bw0mzrOp0+i34s4P1jvz5BEv4tm4X3h6Lfk89T4nh1LLLGE1wsvvLDXXbt29Vq//2n99ttvwc/aL5oRrsflerxuFubda160jr3x8f+4ceO81nMG3ffqPbly0RxovWeNmVllZaWZzRh3p02bVtQ9F/db0j0azcL7BSm9vvDTTz8l/q51113X6/fee8/rXPu/Aw880Ou77rorcTmlx1N6bBfvtzWvPnM/PrPwnEWvMZqFx6RJr2d2irnfzGb2XJ8+fay8vDy4B0E8jiRdr1Jx/+g9U/S5dV8V319Q78Wg1451HMmMGxl6bUbH5ldeecXr+Hghc38Ds/AeQ88++6zX8Zh9ww03eK29vd9++3l97733Buv06dPHqqur7ZVXXiHTHgAAAAAAAACAxoSL9gAAAAAAAAAAFIi84nHuvvtua968eTCl4NZbb031i3QK1jnnnBM8plMKdMp/+/btUz13WoMHD/ZaIyJ0CrhOwzELp1IcdNBBXuvUM51ybRZO81DHHXec19dee23ObS3maTnxNDCdmvLLL78Ey+q0l6222sprfX9XXHHFYB2d1nPuuedmXUenMZslT/3SqbErr7xysM6GG27otfZez549vdapXmZh9MNTTz3ltU5BjOmUaZ1m/s4773g9fPjwYJ1MBEddXZ1NnTq1qPvNLPdUV439MAvjQqqrq7Ouo1OrzMzefvvtrMvpVFmdzmdmdsUVVyRubxKNcvj888+91jEu1xT7JPFuQqefbbvttl4nRTXF6LcZ/XbTTTdZs2bN7IADDki1no5XGiPy9ddfB8tpvEKSXLv+vn37eq1TrmN33nmn16uttprXOoUxniYdj8fZxOP8kksu6fWoUaO81jioeIxbbrnlrK6uzurq6ui3f/pt++23t/Ly8iBmKRcd6zRO5vLLLw+WW2eddbzu37+/17rfjPtNI5QuvPBCr3XKrPa4mVn37t291qnRZWVlXsevbe+99/b6vvvu8zpXlIXS+DCNNrvqqquC5fSY0IwxLtNzK664ojVp0mSWz3JOaWSW7usGDRrk9VlnnRWss+mmm3p9/fXXe61RYfHYmTROasyhxnWahbGhGr2jUTl67GgWRk5pHIX23/PPP591W8zot0y/tWjRwkpKSoJzPI3IMgvjBjUm5thjj018fh0L27Rp47XGMcVxsTpeaXxmfA6cZNddd/Va+0h73CyMQnzxxRe91uO+ePr/xhtv7LUet2nsRhyP07VrV6upqbHvv/+efvun39q2bWulpaVB9MiHH36Y6jk0mm6vvfYKHrv99tu91vFJx7Rcx3AavbrYYot5vc8++wTLJe0HdXx76KGHgsc0nknjDzUSQsctszCORZfTuE+NoDIzW2ONNcxs5ntdzD2XeQ8OOOAAq6iosAcffNAfi6MtdXzQ81r9TPQ42izcN2nvaI/p+YdZGBUyadIkr/XYLo7h0e+JXlPTSFqtzcK4Od0evZaj1xhz0XgSHZ/NzFZfffXg52LuN7Pc10ViSfFvd9xxh9djx44N1jnzzDPz3ibdv+kxoJ5DxFGVGoMdx89mxNf8rrnmGq/1+3DCCSd4HY+dur/WSOK0iMcBAAAAAAAAAKAR4aI9AAAAAAAAAAAFIq94nDmx5ppreh1PgdJNOPHEE73W6XyPPPJIsM4LL7zg9TLLLON1aenM/w6xwgorBOvolBuN4WnVqtVst98snA6tU2zieBydiqZ3d9fXGU+ryEzzmDZtmt12221FPS0n02877LCDlZeX55xmolOc9U7SKo4i0piiOdWpUyevv//++1Tr5JqWn9Qjuaas5uqrjHjaV2ba7LRp0+z+++8v6n4zm3WMy3W3b4090kiQtdZay+uHH344WCfXtPaMfv36BT/Hz5GGRpFozIT2T5cuXYJ1dOp4UkzLFltsEfysfaZROU2aNElcR7+f9Fv6faq+p/r56rgWT3XVGIiBAwd63a1bN6/TxiTpZx0fLtx2221e61j47rvveh1He+mUcI3w0umVb731VrDOTTfd5LVO29bfr/t+szAyiH6r3zGcjmmLLrqo1zpF1Sx5mr7+exz3FU9hnVuaN28e/KxxAr///rvXGkGixxHxY2llIoJqampsyJAh9FwUAfbaa6/5YzpWmIXT3Ovj448/9lojBjXmy8xsxx139Fp7+7///a/X7733XrCOxtbovlOn9ut08JjGgemYFJ+faLSKRkzdeOONXmtkhpnZoYce6jX9NqPfvvvuO2vVqpUddthh/pjuc2I77LCD17o/iWPcnnvuOa+1R7R33n///VTbqpEB8b5Oe1S3TcXRI7ptb7zxhtd6bLb++usH6+hr2HLLLb2eMGFCji2fiX6b8+si9ZHiko2ZheOTHovHMTxK4zpbtGjhdRzHFJ9D5EvH3rRRQmbF3XOZfuvUqZOVlpYG0cBxrJdGfqWl0X9JY4B+bmazXsvLJo4N1EhLjQ2uDz230DhhM7OTTz7Z66So2XgfnDnXqampsWHDhhV1v5nN7Lnll1/emjRpMksMaxoa7RUf9yXZbrvtvNbzX7N0Ebx6zGYWnrto7LrGu8Z0v6zXfDQOrFevXsE6eq6sEXq6n4jjok4++WSbOnWqXX/99cTjAAAAAAAAAADQmHDRHgAAAAAAAACAAjHH8TiZu3tnfPTRR1mX06ibbbfdNnhsySWX9FpjJPS5dVq/mdk999zjtd7lV+8AnOuu1Wnp3bJ1Cu/IkSO9jqf/KH17dTpTPH0jM52pqqrKDj/88KKelhP3W1LckJnZ5Zdf7vWpp56a9fk0UsLM7Iwzzsi63BJLLOH1mDFjUm3rTjvt5LVOMTULpzjrtJlVVlkl67/HtF+mTJnidTw1VqMjtP+feOKJxOcmjimU6blWrVpZSUlJMC05nvqu/aRRDBq7dMghhwTr6LT2nj17eq2fZRwRoNOkNRJp9913T3wdOt7olGmdqtW5c+dgHZ3Sfdppp3n91Vdfea3fDTOz0aNHe53Uw3FcydSpU238+PG2yCKL0G/RGNexY0evf/7552DZc845x+sLLrgg6/PFcSVbbbWV1/fff7/XOjU6/tw0nkGnJGq/aOyOWTjtT3/nkUce6XU8LuuYrXR/vdxyy2VdJqbbHE91feqpp2zy5Mm2xx570G//9FubNm2spKQkiCt8+eWX834+nW5qFsbOaKzE0KFDvdZpqWZmTZs29Vo/b41R0Z4yM3vppZdmu23xlNVXXnkl63L6Xfjrr7+Cx7744guv9Vgvl8y079raWhszZgw9l+O8Yamllgp+1vdYx6V27dp5PXbs2GCdpOP+gw8+2GuNCjELj+s0WkafS6dCm5m9+eabWV6B2TPPPOO1Tuc2S45tzHUsq32rPbv88st7HZ/THHHEETZt2jS79dZb6bd/+q1nz55WVlZmDz74oD8Wn/vV1NTM9vlynRprjI7G8MT0XEN7TKNa4zgvjfK58sorvdbvUtyT2rMah6fn03EUhX439PhSoxRjI0aMsAkTJtjKK69Mv0Xjm8bJxJEvJ5xwgtd6/H7ggQcmPr9GDK633npeT5061es4xk3HEI3H0TExdsstt3g9ffp0r5PiZs3C79O0adO8jmMa8xV/5zLXRaZMmWKnnXZaUffc3IhjyhWlq8fSXbt29XqjjTbyOo7y0vPFyy67bI62TaOZJk2aFDymfbn//vt7XV1d7XUc/5W5xhHT649xBFpmG6ZMmWIXXXRRUfebWX49p9eh9PhHryOkpX2q45hZcqSNXrPZYIMNgsf0WtxFF13k9brrruu1Xm8xC48PdX+fKy5Wr+vqPuDmm2/2+ogjjsi6/Wbp4r/4S3sAAAAAAAAAAAoEF+0BAAAAAAAAACgQXLQHAAAAAAAAAKBA5JVpf+2111qzZs1yZvhpDv3ff//ttWbmab6ymdlJJ500c4MkLyhXdlAamjduZvb44497femll3o9bNgwrzV72szsqquu8vrEE0/0eplllvE6ziDWTEB93ZprF2dT6raZpcs2WlBpjlZJSUnOz/6XX37xWu+NkJQpWl+aATxkyBCvddvuuuuuYJ333nvPa+2DzTbbbI62Jc611sxrzQ/TjK5vv/02WGedddYxsxnZnkOGDCnqfjObNbtN34vx48eneg7NJm3ZsmXwmGaEP/TQQ15vvPHGXr/66qvBOppPqXl/Oq7m+m7897//9VozmjUn2CwclzTfPtMj2WgWnPb5brvt5vUjjzwSrHPooYfatGnT7J577qHfcmQFNmvWLPi5qqrKa81Ajccbpfs+zfc7+eSTvY57R3Oltd9atWrldXyvBs271KxJfe7vv/8+WEfvE6OvR3N+zzzzzGCdlVde2evHHnvMa83sjffd7du3t9raWhs7diz9FvXbaqut5nV8v4p33nnHa83T1vsV6ffcLDw20rGhR48eXn/yySeptlW3bcKECcFjP/zwQ6rnUNqLmi2ZlHNpZnbWWWdlfa5///vfXn/55ZfBY9q/ZsV9DGc2s+c22mgjKysrs80339wf032gWbh/SkuPaTSDV+29997Bz3p/jwMOOMBr/ezinGnNUNVxSe/joJmnMd336/2vct2nS8dIPZaN7yF2xRVX2KRJk2y77baj36IxbpFFFvE6zjt++umnZ/t88Rjwr3/9K+tyep4a3w8hzoDOJh7jdH+rmdHnn3++15WVlYnPt8UWW3it/dClS5dgOR3Levfu7bWOsXpfLTOzXXbZxaZPn25PPfUU/Rb1m55n3njjjcGyeg+Fvn37eq33xYjpfkuX0/VjK620ktdff/2113fccYfXcUZ0Er23TDxe33rrrV5rrnhZWVmq51b/93//5/WFF16Yc9li7rm43/SeYZn76WTo/Xruu+8+r/WeA/F9iT7++GOv9Z4zegwX32tK98F6PJT2M9VzGN036j2x4t+Tlt5/S+93pee/8XEH1+FCmZ5r27atlZaWBsc8MR2vysvLvdbxIbbWWmt5/cEHH3id63qF/qzr7LPPPl6n7Rfd5vi+Nw8//LDX+hp0H6/nE2bhcah+n/R6b/fu3WfZjqqqKjvmmGPItAcAAAAAAAAAoDHhoj0AAAAAAAAAAAUir7lM33//fc5peWZmkyZN8nr06NFe69RCnU5oFsbj9OnTx+sXXngh1XZdd911Xh977LFeP/vss4nrnH766V5rDET79u2D5XQqRLzdSTQKRa2++upeX3311ameq5i1a9fOSktLbcyYMYnLHHHEEV7rtHqdqpgrTkanjOpU0DjS4Y8//vB67bXX9nqbbbbxepVVVgnW0SmEWjdt2tTrKVOmBOto72hMwfDhw7Nuv5nZiBEjvNYpZh07drQkW265pZmZTZ06NYj7KXZ9+vSx8vLynNOnder6lVde6bVOwYvfU/3MdTmNM7rkkkuCddq2bet1z549vdZIkDhqSeNKkqYl6jabmR1++OFe61i49dZbZ/2dZmEkzmKLLeZ1ixYtvP7888+D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35O6ujqrrq6m3/7pt0UXXdRKS0uDcSOO5dh111291tiSP//802udBmoWjl0a56RTY99+++1ZtilfSZFzGhui+1ezMHZst912y1rH23b22Wd7/ccff3ida4p+5j2prq62N998k56L9qkaj/Dtt98Gy66xxhped+3a1et777038fk1WkuPmzTiId4fJe3jdUzSyC2zcKp20rTvzLT6DI0K0+MC/Z7ocYBZOL1c+yxthAD9lnwMpzGnZmFcYdJ+K6bH2dXV1V7rPnnvvfcO1tGYxUcffdRrHWPjsVSjwpJOzzWK0SyMGFlttdW81vE7jsPT36P7AO033e+amS2zzDIe/0W/zei3/v37W2VlZTDWXHHFFcGyevyv+x2NyNLvv5nZ/fff77V+Du+++67X8fGYjk+5YjTT0P1z2uhXde655wY/n3/++XlvQ+bcZPr06fbcc88Vdc9l+q1NmzZWUlISxInEsSN6jHzTTTd5rZ+bjltm4fmE9tX+++/vtZ5HmpkNHDgwvxcR0XNRHTs12sksvPb21ltv5f170vSr2cxjiurqanvllVeKut/MZvZcly5drEmTJrPEvyntuaqqKq/XX399r+Oo0v/85z9ea4xSTU2N1/H1Fz0+02NKjZ3ROJqYRkQNGjTI6zhSJ4l+1/TcwCy8nqPXovW9ifcNFRUVHo+Tpt/4S3sAAAAAAAAAAAoEF+0BAAAAAAAAACgQXLQHAAAAAAAAAKBAlM1+kZnuvvtua9asme2+++7+b3GWlmbhajbeyJEjvd5ggw2CddLk2Gu+s5nZcccdl3U5zVyKc9g0MzfOBMxYeOGFg581W0nzt0488USvNe/czKxHjx5ea/5WaWnyfyP597//nfhYsYrzumfn6KOP9vqGG27wOleG2cMPP5z139dee+3g5wsuuMDr3377zetcvau5+JpprznQcfaW5pxqtqtm9nbo0CFY5+eff/Y66bVWVFQEP+f73hYbzVHTLGez5FxczQGMc0r79euX9fk0f3f48OHBOvpZbr311l6fcMIJXuv9GczM/v77b6917Bo7dqzXp59+etbtNzPr1KmT10cccYTXcX76r7/+mvgcSfr27WtTp04NMqaL3QorrGCVlZWpM+01e1nFeaHnnHNO1uWef/55r9Pe86Jz585e6/0czCwx41AznSsrK4PHknJ6NaPz888/Dx7TzF29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zDp16mSlpaX23Xff+b/dcccdwTJHHHGE17vuuqvXp59+uterrbZasE7SsZV+JnpsaGb26KOPeq1xYtqvMe2xG2+8MesyOmXbLJxa/ccff2T9/fE0bY106tixY9bfkzlmy8iM5VOnTrWrrroq6zrFaPvtt7fKykobNmyY/1scPZJE+yqm+16N39QIm1xT4XNF4qgrr7zSa41W1D5ffvnlg3U0OkmX06izOE5AI5mURuLE8ZBXXXVVEBGAmd/rdddd1/8tjoIZOnSo1/r5vP/++16vs846wTr6sy6n0/p1fDILp+9rzKce2z/55JPBOhojpXGHOibFkXM333yz1/paL7/88sR1NIIgHpsz4nNbPRbADNneO43NnBu6du3qtcaCxeOjHre99NJLWZ/rnnvuCX7ef//9Z/v7NZbRLBx7NZppqaWW8vrpp58O1tFjT43r0Xic+Bguc0w4ZcqU2W5jsdFrAnGM4NVXX+31CSec4LWOdXodzyw8x9OonLTna88995zXTZs29bqioiJYTo+1NJ7k0EMP9To+5tLxTWMNtS/i4319bj3P1jFZj0nMZh6HTpgwYZZrjsXsoosusubNmwdRN2np9Vm99mVmdu6553qdNhJHI8f1PEbjqQcOHBiso8daOpZpjE48LurP2gs6rsVjXBoah2M241x52rRpwfiYC1eIAQAAAAAAAAAoEFy0BwAAAAAAAACgQJTU5cp0+EfmDsIXXnihNW3a1E455RR/7Pnnnw+W1buZ//TTT17r3ajj6Tavv/66119++aXX9957r9dxdMRHH33ktcYzKJ0GYxbe9VenL7dr185rnaZtFt6pXae86pTVeFqrRh289957Xu+3335eL7PMMsE6GsdhVtx3rY7vkp7Wwgsv7HU8XSwNnZ6z1157BY/pNFWd+qhTXjPRKtn85z//8fqoo45KXE7vrq1xFTqlR6d9mYXTyjReR6d+ffHFF8E6mViKiRMn2hprrFHU/WY2s+cuv/xya9asWRBJEmvWrJnXVVVVWZeJh1Wdxvrzzz97rT0TT+/TeJpevXp5vf766yeuoxEWl156qdc9e/b0WnvZzOyKK67wWqOfdCqbTmE1M2vTpo3XSbFfGgVgFvYw/RaOcRtvvLHX7777brDscsst57XGyei0wzja67HHHvNaxwSt42i7NHRMMjOrqanxeocddvBaY3xO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5513XtY6tuyyy3qdK8Yp6fhGP5c46m7IkCFe63TqNddc02udmm0WTu/WWM5c8YNqySWX9Fq/a3reYpZ73M/YeOONg5//+OMPq6mpsa+//pp++6ffNtpoIysrKwveC40oMgv3O19++aXXGo8TR79ee+21Xm+zzTZeb7rppl7Hka4aE6f7zr333ttrjQUwM9t555293nzzzb0+5phjLI2k84G0NPpHY/Ji9NuMfjvhhBOssrLSLr300sRlNaJEIy01TiY+jtZrGXqsl2t81Dg6jVDS+LiYRs7ptulnG8cVJh0HLr300l7HsbYHHHBA1nV0TIzj8C6//PLg52LuuXh/qr1z1113BcvquVv79u293meffbxOG7Or4jFIY3k0Munxxx/3OukaS33pebb+fo0mMQvHzqQI2PiYOLOfmDp1ql133XVF3W9mM3tu5513tvLy8iBC5umnn05c7/DDD/dar9m98MILwXI33nij13qdTsfCe++9N1hHxwS9rjFhwgSv42u/SZGJcaS10nhqjZvSc6KY7nv1Oo+O2bmk6Tf+0h4AAAAAAAAAgALBRXsAAAAAAAAAAApEWT4LH3744VZZWRlMSYjvRq13/542bVrW59E4nJhOW9xoo428vu6664LlNK5Bp35pBMMaa6wRrPPRRx95XV5e7vVWW23ltU7xMQunLibFDKyzzjrBOu+//77la4MNNjCzGXetHjx4cN7rL4i22WYbKy8vtyeeeML/bfnll0+1rk612WmnnYLHFl54Ya+Tpm7ptH6zcCqzTq/RGJU333wz1bbFkThKe1F17NjR63ga9UEHHZR1HY1o0btnm4UxPJhp6NCh1rRp02Cak06dNzNbYYUVvNYYJZ3mGcfW6Gehd6V/+eWXvdY7s8d07Fp77bW9jqfHai/E01OTaMSUjneLL7641zol0Syc5pYUOaFjsZlZWVmZ1dXVWU1NTartKiY63Th+r3UK6Lrrruu1xi7oNPxYUiSOfr5mZieeeOJst02jAMzC6Yk6Ff/qq6/2+oQTTgjW0X556qmnvNbXGU9B1CgVjSvRqLE4rmS33XYzhO68805r3ry57bHHHv5vcXxc3759vdYImlxRJfvtt5/XOp21R48eXsfRHnE8SIYeQ8bTvvX5NDJMYxy0P8zMtt12W68zx1lmZl999ZXXiy22WLBOJuomfj7tV63NZkaG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AABAgeCiPQAAAAAAAAAABYKL9gAAAAAAAAAAFAgu2gMAAAAAAAAAUCC4aA8AAAAAAAAAQIHgoj0AAAAAAAAAAAWCi/YAAAAAAAAAABSIsvm9ARm33nqrlZbO/r8hrL322nk979JLL5162WuuuSbVchMmTLBu3brltR0oLFOmTEm13DnnnJPX85599tmpl/3oo4/yem40XldccYU1a9Zstsvl2xMDBgxIvexCCy2UetmamhobO3ZsXtuCwtKtWzdr0qTJbJfbZJNN8nrexx9/PPWyv/32W6rlqqur89oGFJ6DDz7YKioqZrvcEksskdfznnvuuXN92cmTJ9uBBx6Y13agsDz66KPWokWL2S53yy235PW877zzTuplq6qqUi1XV1eX1zag8Pzf//2fNW/efLbL5XsM99lnn6Ve9s4770y9bFVVlR111FF5bQsKy6GHHppqn/rxxx/n9bz5jHFXX311Xs+Nxqtfv37WsmXL2S636aabzrNtaNOmTarlOGdo/K655ppU/fbAAw/k9bz57INPOumk1MtWVVXZiSeemNe2zG38pT0AAAAAAAAAAAWCi/YAAAAAAAAAABQILtoDAAAAAAAAAFAguGgPAAAAAAAAAECB4KI9AAAAAAAAAAAFgov2AAAAAAAAAAAUCC7aAwAAAAAAAABQILhoDwAAAAAAAABAgeCiPQAAAAAAAAAABYKL9gAAAAAAAAAAFAgu2gMAAAAAAAAAUCDK5vcGZPz888+plvvpp5/yet6ll1469bI777xzquVqamry2gYUnhEjRljr1q1nu9wll1yS1/M+++yzqZddccUVUy1XU1Njw4YNy2s7UFhOPvnkefK8zZo1S73s2muvnXrZ6upqeq6Re+utt1KNcSUlJXk9bz7Ljx07NtVytbW1eW0DCs9qq62Wajw65JBD8nreNm3apF72xBNPTLUc/db47bLLLvN7E2yttdZKtVxNTY19/PHH83hrMC+9/PLLVlFRMdvl3nzzzbye96GHHkq97E477ZR6Wca4xm/EiBFWXl4+2+VuuummvJ533XXXTb1saWm6v+2sq6uzyZMn57UdKCzdu3dPdc4wYMCAvJ63d+/eqZe94IILUi03adIkGzhwYF7bgcKyySabzJPn7dmzZ+pl+/fvP0+2YV7hL+0BAAAAAAAAACgQXLQHAAAAAAAAAKBAcNEeAAAAAAAAAIACwUV7AAAAAAAAAAAKBBftAQAAAAAAAAAoEFy0BwAAAAAAAACgQHDRHgAAAAAAAACAAsFFewAAAAAAAAAACgQX7QEAAAAAAAAAKBBctAcAAAAAAAAAoECUze8NyNdaa62V1/K77bZb6mWvv/76VMvV1tbmtQ0oPJtttpk1adJktst98803eT1vXV1d6mVLSkryem40XmeccYY1bdp0tsu9+OKLeT1v//79Uy977LHHpl42nz5GYbr44outsrJytsttuOGGeT1vmzZtUi/74YcfplqOfWrjV1FRYRUVFbNdbty4cXk97yWXXJJ62WWWWSbVctXV1TZ69Oi8tgOF5V//+leqfertt9+e1/MOHjw49bILLbRQXs+Nxuu///3vPHnefv36pV62RYsWqZetqampz+aggLzwwguplltkkUXyet777rsv9bK///57quWqqqrs+OOPz2s7UFgmTpxopaWz/1vehx56KK/nPf3001Mv+84776RabsqUKXltAwpP+/btU/Xb4osvntfz5nMMt+aaa6Zetqamxj755JO8tmVu4y/tAQAAAAAAAAAoEFy0BwAAAAAAAACgQHDRHgAAAAAAAACAAsFFewAAAAAAAAAACgQX7QEAAAAAAAAAKBBctAcAAAAAAAAAoEBw0R4AAAAAAAAAgALBRXsAAAAAAAAAAAoEF+0BAAAAAAAAACgQXLQHAAAAAAAAAKBAlM3vDchYeOGFraSkZLbLffjhh3k9b9u2bVMvu+WWW6Zabtq0aXb//ffntR0oLBtuuKFVVFTMdrkrrrgir+dN08MoPk899ZQ1adJktssdccQReT3vsccem3rZPn36pF52+vTp9uijj+a1LSgsl112WarlWrZsmdfzduzYMfWyK6+8cqrlqqurbezYsXltBwpLr169rFWrVrNdLp9jMjOzm2++OfWyd955Z17PjcbrlVdesbKy2Z/C3HHHHXk973rrrZd62f/7v/9LtdzUqVPt8ssvz2s7UFheffXVVPvKvn375vW8o0ePTr3s8OHDUy87YcIE69y5c17bgsZp2LBheS3/0ksvpV62d+/eqZabPHlyXtuAwtO0aVNr2rTpbJcbM2ZMXs/7xRdfpF62U6dOqZabPn16XtuAwrPEEkukui6S73XffPZ7+VxDqaqqyvsazdzGX9oDAAAAAAAAAFAguGgPAAAA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ND631b7s1auX14sttpjX2pNmZu+++67Xep6b9tgsaf+Y65yTc4bClnQtJY5C0usfejynx329e/cO1tH9ph6r6e/JdS6s46Pum9dcc81gnZ49e3o9fPhwr/W4jd6bv9LGfs3p82o/JV2LjntBrwfW59rvvDq35S/tAQAAAAAAAAAoEFy0BwAAAAAAAACgQHDRHgAAAAAAAACAAlGvcOOkzDyzMGNNs02XWWYZrzWHyizMGF922WW9btOmjddxdpDmA3755Zde//jjj15PmDAhWEfzi1q3bu21Zvbqv5uFOb0ff/yx16NGjfI6zhokJ2v+089a+zCmWWcvvPCC188880yw3NixY73Wz3fRRRf1et999w3W2XXXXb3u0KGD1+utt57XX3/9dbCO5j2nzVxNynvT7C7Nxsz13Jj3co2fSseVpM9Lc53NzL766iuvJ0+e7HVSPtvstiFfZFUWNv18NIPSzOy8887zulOnTl7n+hz1fjSaIan3CnnzzTeDdTRDVe/vofnlZN03Xrqv22abbbxeffXVg+V07NLjLM2Fjo+ttC90TNOcUs2qj59D99fab3Hu+F9//ZV1OxnTCl+u/WtSrrLW8TnAWWed5bXmROux1m+//Raso+Ma9z5oPPS8oWnTpsFjG2+8sdeHHXaY1y1btvT6gQceCNYZMmSI1zoO5epR3YakOqZ5+5pfrs8dj3E6/pHz3HjoZ73GGmsEj5155plea8a39p4ef5mF+zqtc50zqLR5z9xDofHQfHkdT+JjuK222sprzbHXY0DtV7OwF/X+gHofLL2Hm1m4T15qqaW81jHxiy++CNYZPHhw1uej9xrWnF5fiNfX61p6nrn00kt73aVLl2CdDTbYwOsePXp43aJFC6917DMLr6XoPYv03z/99NNgnXHjxnmt5w1z83yWv7QHAAAAAAAAAKBAcNEeAAAAAAAAAIACUa94nKQppmZhFIlOQ9CpMyuttFKwjk7F16kvGrUTTw3UqQda6zS/eHqjbmvSVMN4GoNO37nzzju9vv/++73W6dyYf3RKl07J0ggHszBC6bPPPvNapw3G0UraF9o7ulwcw6PTypo3b+71dttt5/Wzzz4brKNxPfo7004xShu9gsKQ6zNKO+1U6fin3wcdS3V6WbwNcxpvw9TDwqZj4d133x08tvzyy3utY5zuXzW+yyycQq0ReO3atfM63t9rjI6Ov4MGDfJ6xIgRwTpETBQ2jQrRCJF11lnH63g//N5773n9+OOPez106FCv46ibpCn7Ou7kioLT7dQe0zgTs3TRZCgcut/S/V4s6bPUvtDzFjOzvn37eq09rD3yyiuvBOtofCb9U9iS4iXj+LhDDjnEaz2f1XHkhx9+CNbRc0Pdh+n+VX9n/HNSL8fnthqF0q9fP681duzee+8N1tGI2aTp+/Tu/KN9mRSJc/XVVwfraHyJrq99EEfOdevWzWs9N9B4kT/++CNYR/fD2iNJ+2QUPu0XjYzecsstvV5//fWDdfQahx6raVRNHAGs+0p9THss7lGNIFtllVW81niUOKpEr/MQtzn/pB0Hkq5D6GdvZtanTx+vjz/+eK/12nG839RxLT4PSdpOHUs1Xumnn37y+pxzzgnWef/9972Oe3hu4S/tAQAAAAAAAAAoEFy0BwAAAAAAAACgQNQrHkfFMTP6s04p0KmB8d2kNVYkaapVfDdpnXao03J0KkU8hVCnK0yZMsWyadu2bfCzTvnXqUH/+9//sm4L5h/tHY10GDlyZLCc3qVcp2TV5w7j2h96h2qzMBJHpxN+9913XscxPCopwinXtmmPMyWsMOnnqtO24qicpH7U5eKpXuutt57X3bt391pjvuKprhoNod8bLBi0344++mivNbokXk77bdy4cV5rH5mFU/l1fV0nnqq4ySabeL3FFlt4rdO0L7/88mAd7VnGtfkvHquWXHJJr3fccUevdZp1HB2hcYMfffSR13qsGEd5qaTIsLjfVlhhBa91f63RdLp/jp8PjVfcp2nGDo0aMQvPKXR9PY67/vrrg3XifkLh0v2Wnpuuu+66wXIa66bH9nrM9O233wbrJPWBjlE6rd8s3Kf+/vvvWf+9d+/ewTpHHnmk14svvrjXb7/9dtZtNmOMKzTxWKWfd9euXb2+8sorvY7HKqUxDq+++qrXcXycxp9ss802Xj/yyCNeP/XUU8E6Gq2k/U9PNV46PmgEk8ZXa6Shmdk333zjtV6H++uvv7yOr49NnjzZa92f5to363USPRfQ48N4rGUfXBjSxjTrfrh169ZeH3XUUcFy+rMup33166+/BuuMHz/ea+0zHWM7duwYrLPwwgtn/T26jkbKmoWRYvNqLOQv7QEAAAAAAAAAKBBctAcAAAAAAAAAoEDMcTxOPKVFpyjoVEGN7Rg7dmywzrBhw7zWaYM6pSG+A/Xw4cOzbkOXLl28juNx9PfqVB6NCTjooIOCdXR6d7t27byuqKjwOp7+wRSx+UOn1WsfxtFK+vnoOmk/t0UWWcTrww47zGuNeTIz++WXX7zWaapXXXWV1zqNzCzs5bTTipK2W6eHpX0uzBv6/uuUvkUXXdTr+G7jGlujdP14CvcJJ5yQdR2dHvv5558HjyXFTNTnru8oPDpenXLKKV7HMSJq0qRJXmt0ycCBA4PlOnTo4LVOk9boCJ1maGa25557eq2xKhqV8+STTwbr6LTc+vQo5i49/jEL94Mrr7yy1/r5PP7448E6H3zwgdcaV6jHbfG+W3ssaV+pPWlmts8++3itfc20/gVHUqxmruWS6HF+TKf6X3bZZV5rjAkKn44XWuvYo/GCZuEUeV1Hz19zxV3q/nallVbyeuONNw6W0/hO3T+utdZaXh988MHBOhqJo/ERetw3atSoYB093mSfOv/Fcah63HbEEUd4rX0Zj3VfffWV13fccYfXGmcTxyLqNRPdr2sc8Pvvvx+sQ6Rm4xcf/6+++upeazyORuC89NJLwTp6HU1pX8b9UZ/xJSn6WMewpDhhNLz6ROJo1O8uu+zidf/+/YN19HxSj7seffRRr++6665gHb0eqDFQa6+9ttcnnXRSsM5iiy2WdTuTrlGbNcw5BV0OAAAAAAAAAECB4KI9AAAAAAAAAAAFgov2AAAAAAAAAAAUiDnOtI9pps+4ceO81nx7zYU0Mxs0aJDXmpGl+YCaRWoWZmZp3tAXX3zhdZwppNumuUSav3TooYcG62jGoa5D7l9h0/7I9Vml/Ry1D7bddluvNT/3008/DdZ5+eWXvX7llVe8/vXXX73WTP18tiffdejX+UvHKM1kW3XVVb3++eefg3V0/NT1Nef0+OOPD9bRvEt9Ps2GjsffOc1ho7cKT1nZzF37iSee6HXbtm0T19Ee0bHr4Ycf9rqqqipY54cffvBasy8187Rz587BOppprzmGyy67rNcbbLBBsM7gwYMTtxsNQ4+TVlttteCxPfbYw+sWLVp4rTnKDz30ULCOHt/pc2u+fbx/1Pu0KM3iPfzww4PHunXr5rVm/sb3EMGCoT7He7p/jccrPZb88ccfvdYxMleOPgqPjjdJubodO3ZMXEfHJd1vxvdR077o1KmT1zpGxfvkzz77zGs91ks67zALx7L777/f60ceecTrOG+fnp3/tKfi+8Ro3rLe70fvaaXXVczMzjnnHK+HDh3qtfbyKqusEqzTpk0br/VcQI8h423T7eb4v/HQz03vq2Fmdswxx3itY9pTTz3ldXzuqOOgXh9Le/0laRyO10n7fEnPTY/Oe0n3iVHxfQd0LFtxxRW9Pu6447zW8cks7MGLL77Ya93vxdeLdXv03pN6nqn3LzVLvt6r+1G9n41ZeH5Cpj0AAAAAAAAAAAs4LtoDAAAAAAAAAFAg5jgeJ55ip9MDdOqMLqfTn2O5pkYn0SkXuabR6GM6XUKn5S+66KLBOrrcH3/84bVOkWDqTWGrz3SqeDrgRhtt5HWPHj28HjJkiNcDBw4M1tGoJo060b6md4qD9pbG4zRv3jxxHZ06ptOu119/fa833njjYB0dC3W80liI33//PVinIaZ0Yd6KpyOusMIKXu+///5Z19EpsGZmzz//vNeXXnqp1xp107p162Ad7TGN/dI+ivepCy20kNc6zupriKMJdKo2sSbzh35WO+ywQ/DY4osv7rWOQR9++KHXI0eODNZJimeoz9RqjTTp169fsJxGXuj0/zjqCQuG+hzvaUSJHuvFPvroI6//+uuvemwdCo32i44PGvdmZtazZ0+v9dhMj+e23HLLYB2Nt9lrr728XmyxxbyOY2t0/6hRJu3bt/c63t9rFMoNN9zgtfYocTiFTXvKLDy2b9eundfjx4/3esCAAcE6n3/+udd6zqDxOtrH8XK6T9TjLO1xszACTyON016zwfyhx0IHH3xw8JhGhbz99tte//TTT14nxROaheNo2n2wHitqHEnaPsr1O5PiTTjHnTfqE4+jx13bbbed13rOGF8vfuutt7zWiEI9n41/v46tyyyzjNca1aqxOTEdC999912vNS7RrGH2sfylPQAAAAAAAAAABYKL9gAAAAAAAAAAFIg5jseJJUXQ6L/H0/L1sfpMjVa6TjxVQdfRWIqkaY9m4VS0F1980WumVi8YdLpOZWWl1zpVzCyc2jp58mSvP/74Y69/+OGHYB3tkaRpM0l9nA/ukt64aP/o9CqNITELe0bHq65du3qt01TNzL7//nuvX3vtNa+1T/X3x78HjVMc53XMMcd4rVObdfq/ToE1MzvllFO8HjVqlNc6zTTuUe0lfe5cUWPxPjZDx2Kdxhuvo9MlGe8ajk4f1en2ZmF8kY4nGieSa2q1yjWVWftKe+SMM87wOo5j0t/7/vvvex0fh6K4aM9uv/32Xi+yyCLBchr/8Nlnn3mdtp9ReJLOU3V/9t577wXraFSNxt7oOHTkkUcG6+ixmsbe6L4yttJKK3mtsWO6H9bzUjOzf//7316PHj3a61zHdpw3zH/6GbRs2TJ4TCOUNJ5h2LBhXg8fPjxYJynma4899vC6TZs2wTpJ12b0ueLYJ92eQYMGea3fH3qqMGiPrbXWWl7rPs8sjL7Uz1d7Itdnmjb2V4/zdR+s41ss7XXBpN/DWDfv6WeUFHuk19jMwjFOY8onTZrktR5/mYVxcrpP1uO2+ByzW7duXu+2225er7rqqlleyQy6j9brKo8//njitjUE/tIeAAAAAAAAAIACwUV7AAAAAAAAAAAKxFyPx9GpJzolJdfUmTR3do5jRHT6hdZJv98snDLRpUsXrzt37ux1PP3/1Vdf9VrvVKzTh9B4aU+su+66Xp922mnBcjoddujQoV7nirdJmiJUn6laae9+zjSwwqdTv5Jqs3C6mY6fOkbpVGgzs0cffdTrp59+2uvffvst63PF6J/GQz+rJZZYInhMpzPrOPTHH394femllwbr6FRr7ZFcY1ya2K942qtOKdQp2Bp7o2OsWbi/pS8bTtL0/XiKfVKPaLxDHHmkU+l1/aT9plkYfXPEEUd4veOOO2Zd38xszJgxXj///PNe54qoSBO/iMZNj+lOPPFEr+P+0THu66+/9ppeWDDo56tjQhyPo8utvPLKXmv8nE7DNzP766+/vB43bpzX33zzjddjx44N1llvvfW81nFI45hef/31YJ1XXnnF61zHdygsSRHCZmFE4ciRI73W/dnqq68erNO7d2+vN998c691rIvHLT0e0+MsjXbS2iw8btPt/Oqrr7I+F+YfvcahPRHHCGp0iUZ56XFbrkhB3W8mxY+ZhVGvekyp6+tYaRaOfWn3u3Mjehj1o5+RHsPHsTVNmzb1WqOCdZ+qsZxmZu3bt/daj9uS+sos7HWNFE66rmJm9umnn3o9YMAArwcOHOh1fA7REMeE/KU9AAAAAAAAAAAFgov2AAAAAAAAAAAUCC7aAwAAAAAAAABQIOZ6pr1Km8OdK4c+I86ZLCubuelJv0eXMTNbbLHFvN5uu+281syuF154IVjnyiuv9Fqz5JKyfM3IhS50+vloNt+xxx7r9RprrBGso5/3L7/84rVmcmltZlZRUTHbbdGsNrPkez/k+i4lfWdy3UcCDUvff82uT8qtNwvHvKTstc8++yxYZ9CgQV7//PPPXufKBE8arxjHCpt+PnGWrmZS6nKanxv3zpzmRmqtY+GKK64YrKO9qN+FESNGeP3aa68F6+TKH0fD0PEo1/03tHc0n1nzVM3CeyhozmT37t293njjjYN1VlllFa+XW265rOvH46hmU3/55Zdex/texdi3YNJzgv3228/rZZZZJnEdvdfGsGHDvKYvFjy6b4ozbnWf9Pbbb3utOb3xOYDm+U6YMMHrqqoqr/UcxMzs7LPP9rpDhw5ea/b4zTffHKwzfvz4+KWYWfL93rL9jPlLP18zs6eeeirrcnr/It2/moXZ85rjrH2tGfRmZj/99JPXuh/V4zb9d7NwX/7FF19kfW69f5JZ7msmmHf0+tZKK63kdZwvrsc8Sy+9tNcbbbSR13pOaRb22FJLLeW15pDHvaP7YB239LjtjTfeCNbRe8kk9VE8nnH9o/DE97n4/vvvvb7vvvu8fu6557zW+2KZhfcgXX/99b3W3o7X0Yx77XMdc+P7xNxwww1e6706dD8+P8Y0/tIeAAAAAAAAAIACwUV7AAAAAAAAAAAKRIPF4+Sabpw0xV6nFsZRN/oc8XToDJ0SYRZOh+3bt6/XI0eO9Pr6668P1vnuu++8jqd2JEmKK2GKTmHQaWHaBzrVUKeUmZn9/vvvXr/11lteDx061Ot4eqN+3trLSf0e/5zUL/E6SVFROgU3/o7Qi/NW0hhglhwlketz1WmIa665ZtZlzMKp/Pr5p4kgi9EjhU2nvmtUiJlZZWVl1uV0HKrPmJBrvNLfuc4663i91157Bevo1Nlff/3V67vvvtvrb7/9NliHqdXzh/aExkU8/fTTwXJLLrmk1xoRoePW4YcfHqwzefJkrzt16uS1Ts2Op1ZrL+t+XPswPk578cUXvdbp2Ll6irFvwRCPV9pPvXr18lrHxZge4+lxIBYM+l3XMSEeHzROS4+t0h7raZ10nmsWjmt6TvHOO+94HUfbJZ0D54rHSVoHDUd7Qo/dzcJxRx/bbLPNvNZICLPw89Zjq4EDB3r97LPPBuvo9Y8NNtjAa92nt27dOlhHr61oRMXzzz/v9d9//x2skzYuGXOXji9a6xgWP6bH8gceeKDXGoFjZtaxY0ev42O1jDjaUo8jx40b57X2bps2bYJ1rr76aq+TrsMxvhWOpOuzcSSl9qD2xY8//uh1HI2u+8dnnnnG6/3339/rgw8+OFhHxy/dBo3z0vNPM7NPPvkk63YmXb9pKPylPQAAAAAAAAAABYKL9gAAAAAAAAAAFIh5Go+TJJ5OmDTlOddUfp0io9MVNC4ivrP60UcfnfV33nXXXV7rXarj35OkPhEnaDjx56NTr/bcc0+vdXpX/Lm/++67Xt9///1ejx071ut46k/SlOukuAozs4qKCq+1lzVyIJ6Gpq9P72ytU7njqXD05byVa8q0vve5emGxxRbzeocddvB6l1128TqOZFLaw7nicZLGWXqk8YinECr9vDWaJo6P0+mJaaO5dFzq3r2715dcconXq6yySrCOjpPvvfee1w888IDXuaLGMH9MmjTJ6zvuuCN4TPdV+nnrZx2Pb507d/Zap+Lr1OypU6cG6yTFSui/xzEDY8aM8bo+U6bpvQVH0jGViqfz33vvvV7H/YgFS32+62mP9ZTur1deeeXgsU022cRrHa801uSvv/7K+/cQMVfY4n2THgNpTK/uU3VfaRZGyw0ePDhr/dtvvwXraO/ovlIjF7fbbrtgHR07F1poIa8XWWQRr/Vajlnyvpf9a8MZPny413HElkYHDhs2zGuNOOzRo0ewjn72SeeR8bUHfUz7ZeGFF/Z65513DtZ54oknvP7iiy+8ThtVQo/NP7muKaT5XOJxQ8e/X375xWu99pV0bBcvp3FeGodjFp5HFFLUEn9pDwAAAAAAAABAgeCiPQAAAAAAAAAABWK+xOPEU/l1yqrWOg0inrKaNK2iWbNmXp966qnBY0sssYTXOv1Hpx3m+j06DTJXrEXSXdKZojN/xJ/Piiuu6LXe/VyX0ygAM7OPPvrI67///ttr7Ze4r3XqovaO9rje1dosjAno1q2b1yussELW7TQL77T9/vvve61Tx/Qu7WYzpwjRk4VDxy4zs9VXX93rnXbayesOHTp4/f333wfr6HSxtFE32pu5pnqjsOj3W8cAs3D8iqdQZ7Rv3z74edSoUV5r72hPxD264YYben3OOed4rdNo4/FKx0+NWdE4L8alwqPHYyNHjgweu/TSS73W+DmNYOratWuwzq677uq17kdHjx7t9aeffhqso1ESW265ZdbfE8fUpYk4jNF/C4b4c9RxTaNu9N//+OOPYJ1BgwYlPh+KR9IxvO5f4/7QHtP9tY5XJ554YrCO7pd1v65RcrnOU3NF5aGw5Iqt1H7RiJEffvjBa41qNTNr3ry513qcpceD8f5Rf68eAz788MNed+rUKVhn2WWXzbptGt0aH3dqzxZS3MSCbvLkyV4/+eSTXj/33HPBcnpMp72jx3Px2KKxSXqcr7HB8THc4osv7vVqq63mtfbu8ssvH6zTp08fr7/55huviasrfHP7GqiOVxqxecQRR3itMbBm4Xjz4Ycfej1gwACv48i5Qh2j2LsDAAAAAAAAAFAguGgPAAAAAAAAAECB4KI9AAAAAAAAAAAFYr5k2sfZbZqFpTlCmr0WZyElZfits846Xq+55prBOpoR98wzz3itOdBps5810zB+Pfoc+jsxf+hnZWbWvXt3rzVHTZfTfzcz23jjjb3+4osvvB4+fLjXCy+8cLCO3kNBe0L7Pc5u23TTTb3W/N6Kigqvf/vtt2Ad7f9vv/3W60UWWcTrONOebNZ5K35/dYxIyrHUz9gsvN9CnD+eofdaMDMbMWJE4jYk/TtjVOOkn9uQIUOCx/SeLXpvDM36O/DAA4N1dPzTfPlFF13Ua82qNzPbe++9vdZ7MJSXl3sdZ6jqPWTeeustrws1QxAz6LgRf1aZe6SYmU2cONFr7YM4K3zKlCle6z7ss88+8zreb+k+UfNQ9V4Lcc6p5uxqj6e95wcWHDpmasay9oz2n1l4jwXALDyG13z6OGte9306xi233HJe634zpvvxX3/91etc58NK+z0esxnz5r+095DSz1HHKu0Js/AcIu1zJ+0Hv/vuO6/1Xmnxc+v+Pu7/pHXQcPSePrpvi8cDvTeB9ptmfV988cXBOknZ99o7f/75Z7DOnnvu6bUet+n4GJ8L63GfXpvRfmM8K3y5rpWmXWexxRbzWu+7offZiJ9Xr4v861//8lrvD5L2vqnzG39pDwAAAAAAAABAgeCiPQAAAAAAAAAABWK+xOPE0w50mk7SFKr43/XnhRZayOujjz7a63iKjcaKPPTQQ17r9KFcv1enRGodx0sU6rSKYhV/HmPHjvVapxrqZ61T6s3MtthiC6/XW289r3WKf654B40P0CmzOrXWzKxt27Ze6zQw7dH494wcOdJrnf6vUyfjiArMW7kiaJKiciorK4N1NG5JPz/t39tvvz1YJ46GmBO5prMmRfww9s0fY8aMCX4+//zzvb7sssu87ty5s9e77757sM5OO+3kdVJMncadmIX7Xn1M14+je04//XSvJ0+eHL8UNEL6vdda91s6ldrM7L333vNaxy3dp8a0z/W5dXyN19de1CnYWPDF+zCNB9NjJR2H3nnnnWAdjp1gljyuxRFeSscePWfUKf5xfKeOX59++mnW54olHavpuMix2YIhaV9rFvaBnk/ochqDEj+WFFGi569mYXyi9r/ux+N+JYZz/tDPN/4cVdL4omPdTz/9FDx25513et2zZ0+vNSqna9euwTp6DpJ0PBZHlfz8888JW52M8a4wJF0ryEWX02M2M7Nrr73W6xVWWCHrOvEYd8kll3j9wQcfeK293Vj6hTMYAAAAAAAAAAAKBBftAQAAAAAAAAAoEA0Wj6NTD+JpUjr9VKcQJkXTmIVTvzbYYAOvderN+PHjg3Vefvllr7///vus2xbT6Tta55qi1limWRSLeNrXRx995PX777/vtcaRtG7dOlhHpwrGsUsZuWKfNEZCp37FcRM6VVanGo4ePdrrJ554IlhHX4PetV2nwuWKHMC8l2aKWDxVUMfJX375xWudoqjTp+Pfo/R3xr9Hf67PFFbGu/kvHuMGDRrk9U033eT1BRdc4LVO0TebdRpihn6+uabo63j1zTffeH3MMccEy2m8E72zYNPPN44Z0f1TUoxDPFZ16NDBa91H5zq+TJqCTazXgikpIsLMbJ111vFaowg1HueHH36Yh1uHxippLMu1T0yi5xC5xkU9V2jatGnWfzcLx7ykmjGusOWKjkg6fo+jlfR8slmzZlmfK1fcl66z7LLLer388ssHy2n8icawaixF/L2g/+aPpGjWtPRzi8ed4cOHe92+fXuvu3fvnrU2C6/lJUUc6vmDWXg+o/vqXNfhUHhyxXkp3T9uuummwWO9evXKur720r333husc99993kd93Bjw1/aAwAAAAAAAABQILhoDwAAAAAAAABAgWiweBwVT5FIMzU6ngamU1tXXXVVr3XqzODBg4N17rnnHq8nTpyY9Xfmmj6UNBWHu6IXtniank7pOvHEE73efPPNvd5tt92CdXr06OG1TsvXHo2nHWqP/fbbb17niocYM2aM159//rnXX331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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(40,4))\n", + "for i in range(10): \n", + " #display original\n", + " ax = plt.subplot(3,20,i+1)\n", + " plt.imshow(X_test_noisy[i].reshape(28,28))\n", + " plt.gray()\n", + " ax.get_xaxis().set_visible(False)\n", + " ax.get_yaxis().set_visible(False)\n", + "\n", + " #display encoded image\n", + " ax = plt.subplot(3,20,i+1+20)\n", + " plt.imshow(encoded_images[i].reshape(8,4))\n", + " plt.gray()\n", + " ax.get_xaxis().set_visible(False)\n", + " ax.get_yaxis().set_visible(False)\n", + " #display reconstruction\n", + " ax = plt.subplot(3 , 20 ,2 * 20 + i+ 1)\n", + " plt.imshow(pred[i].reshape(28,28))\n", + " plt.gray()\n", + " ax.get_xaxis().set_visible(False)\n", + " ax.get_yaxis().set_visible(False)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "580c3e12-c29b-4040-a419-c2f194ac766e", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/cnn-batchnorm-comparison/README.md b/cnn-batchnorm-comparison/README.md new file mode 100644 index 0000000..a4ad839 --- /dev/null +++ b/cnn-batchnorm-comparison/README.md @@ -0,0 +1,33 @@ +# CNN BatchNorm Comparison โ€” MNIST + +Comparing a baseline CNN against the same architecture with Batch Normalization added, on MNIST digit classification. + +## Architecture + +``` +Conv2D(32, 3x3, stride 2) โ†’ Conv2D(64, 3x3, stride 2) โ†’ Flatten โ†’ Dense(10, softmax) +``` + +The BatchNorm version inserts `BatchNormalization` + separate `Activation('relu')` after each conv layer, instead of the activation being baked into the conv layer directly. + +## Clean ablation + +Both models use the **identical optimizer and learning rate** (SGD, lr=0.001) โ€” Batch Normalization is the only variable that changed. This makes the result directly attributable to BatchNorm, unlike the [MLP regularization comparison](../mnist-mlp-regularization/README.md) in this repo where two variables changed at once. + +## Results + +| Model | Test loss (categorical crossentropy) | +|---|---| +| Baseline CNN | 0.289 | +| CNN + BatchNorm | 0.094 | + +BatchNorm alone (same optimizer, same learning rate) cut test loss by roughly two-thirds โ€” consistent with its known effect of stabilizing and accelerating convergence, especially under plain SGD at a conservative learning rate. + +## Tech stack + +TensorFlow / Keras, NumPy, matplotlib + +## Notebooks + +- [`conv-pred.ipynb`](conv-pred.ipynb) โ€” baseline +- [`conv-pred-BN.ipynb`](conv-pred-BN.ipynb) โ€” with BatchNorm diff --git a/cnn-batchnorm-comparison/conv-pred-BN.ipynb b/cnn-batchnorm-comparison/conv-pred-BN.ipynb new file mode 100644 index 0000000..084da17 --- /dev/null +++ b/cnn-batchnorm-comparison/conv-pred-BN.ipynb @@ -0,0 +1,448 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "id": "449ccd64-ec1a-46b6-9e95-cb03f4d01296", + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras import datasets,utils,models,layers,optimizers,losses\n", + "import numpy as np \n", + "import matplotlib.pyplot as plt " + ] + }, + { + "cell_type": "markdown", + "id": "06e6b0ab-0b31-4ade-ac9f-4e1d37de2c85", + "metadata": {}, + "source": [ + "# data Prepration " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e70e5895-f688-4b36-8ee3-3e9fa77433c1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n", + "[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n" + ] + } + ], + "source": [ + "(train_images , train_labels), (test_images,test_labels ) = datasets.mnist.load_data()\n", + "\n", + "# preprocessing\n", + "X_train = train_images.reshape(60000,28,28,1)\n", + "X_test = test_images.reshape(10000,28,28,1)\n", + "\n", + "# Normalizing (0,1 )\n", + "X_train = X_train.astype('float') / 255\n", + "X_test = X_test.astype('float') / 255\n", + "\n", + "y_train = utils.to_categorical(train_labels)\n", + "y_test = utils.to_categorical(test_labels) \n", + "\n", + "print(train_labels[0])\n", + "print(y_train[0])\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "0d73c52c-40f2-4a37-a289-5bd24f24cec7", + "metadata": {}, + "source": [ + "# model creation " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e33a3d4a-7f5d-4763-b3c4-ede9a74b484a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"functional_1\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"functional_1\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“\n",
+       "โ”ƒ Layer (type)                         โ”ƒ Output Shape                โ”ƒ         Param # โ”ƒ\n",
+       "โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ\n",
+       "โ”‚ input_layer_4 (InputLayer)           โ”‚ (None, 28, 28, 1)           โ”‚               0 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ conv2d_5 (Conv2D)                    โ”‚ (None, 14, 14, 32)          โ”‚             320 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ batch_normalization_5                โ”‚ (None, 14, 14, 32)          โ”‚             128 โ”‚\n",
+       "โ”‚ (BatchNormalization)                 โ”‚                             โ”‚                 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ activation_2 (Activation)            โ”‚ (None, 14, 14, 32)          โ”‚               0 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ conv2d_6 (Conv2D)                    โ”‚ (None, 7, 7, 64)            โ”‚          18,496 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ batch_normalization_6                โ”‚ (None, 7, 7, 64)            โ”‚             256 โ”‚\n",
+       "โ”‚ (BatchNormalization)                 โ”‚                             โ”‚                 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ activation_3 (Activation)            โ”‚ (None, 7, 7, 64)            โ”‚               0 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ flatten_1 (Flatten)                  โ”‚ (None, 3136)                โ”‚               0 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ dense_1 (Dense)                      โ”‚ (None, 10)                  โ”‚          31,370 โ”‚\n",
+       "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n",
+       "
\n" + ], + "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", + "โ”‚ input_layer_4 (\u001b[38;5;33mInputLayer\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m1\u001b[0m) โ”‚ \u001b[38;5;34m0\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ conv2d_5 (\u001b[38;5;33mConv2D\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m32\u001b[0m) โ”‚ \u001b[38;5;34m320\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ batch_normalization_5 โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m32\u001b[0m) โ”‚ \u001b[38;5;34m128\u001b[0m โ”‚\n", + "โ”‚ (\u001b[38;5;33mBatchNormalization\u001b[0m) โ”‚ โ”‚ โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ activation_2 (\u001b[38;5;33mActivation\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m32\u001b[0m) โ”‚ \u001b[38;5;34m0\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ conv2d_6 (\u001b[38;5;33mConv2D\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m64\u001b[0m) โ”‚ \u001b[38;5;34m18,496\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ batch_normalization_6 โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m64\u001b[0m) โ”‚ \u001b[38;5;34m256\u001b[0m โ”‚\n", + "โ”‚ (\u001b[38;5;33mBatchNormalization\u001b[0m) โ”‚ โ”‚ โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ activation_3 (\u001b[38;5;33mActivation\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m64\u001b[0m) โ”‚ \u001b[38;5;34m0\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ flatten_1 (\u001b[38;5;33mFlatten\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m3136\u001b[0m) โ”‚ \u001b[38;5;34m0\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ dense_1 (\u001b[38;5;33mDense\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) โ”‚ \u001b[38;5;34m31,370\u001b[0m โ”‚\n", + "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 50,570 (197.54 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m50,570\u001b[0m (197.54 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 50,378 (196.79 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m50,378\u001b[0m (196.79 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 192 (768.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m192\u001b[0m (768.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "myInput = layers.Input(shape=(28,28,1))\n", + "conv1 = layers.Conv2D(32,3, padding='same', strides=2 )(myInput)\n", + "bn1 = layers.BatchNormalization()(conv1)\n", + "ac1 = layers.Activation('relu')(bn1)\n", + "conv2 = layers.Conv2D(64,3, padding='same', strides=2 )(ac1)\n", + "bn2 = layers.BatchNormalization()(conv2)\n", + "ac2=layers.Activation('relu')(bn2)\n", + "\n", + "flat = layers.Flatten()(ac2)\n", + "out_layer = layers.Dense(10,activation='softmax')(flat)\n", + "\n", + "mymodel = models.Model(myInput,out_layer)\n", + "\n", + "\n", + "mymodel.summary()\n", + "mymodel.compile(\n", + " optimizer=optimizers.SGD(learning_rate=0.001),\n", + " loss=losses.categorical_crossentropy\n", + ")\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "49ed788e-2c4e-4a77-9c86-6da3d1dcd089", + "metadata": {}, + "source": [ + "# Train and Evaluation" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "042a17cd-f9c0-4eea-975c-bc1bd4257a90", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 11ms/step - loss: 1.1879 - val_loss: 1.2940\n", + "Epoch 2/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.5931 - val_loss: 0.4890\n", + "Epoch 3/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.4617 - val_loss: 0.3935\n", + "Epoch 4/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.3955 - val_loss: 0.3476\n", + "Epoch 5/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.3528 - val_loss: 0.3151\n", + "Epoch 6/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.3217 - val_loss: 0.2909\n", + "Epoch 7/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.2972 - val_loss: 0.2712\n", + "Epoch 8/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.2775 - val_loss: 0.2564\n", + "Epoch 9/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.2610 - val_loss: 0.2423\n", + "Epoch 10/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.2469 - val_loss: 0.2302\n", + "Epoch 11/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.2345 - val_loss: 0.2196\n", + "Epoch 12/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.2236 - val_loss: 0.2103\n", + "Epoch 13/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.2140 - val_loss: 0.2024\n", + "Epoch 14/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.2051 - val_loss: 0.1950\n", + "Epoch 15/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1971 - val_loss: 0.1880\n", + "Epoch 16/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1901 - val_loss: 0.1819\n", + "Epoch 17/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1834 - val_loss: 0.1765\n", + "Epoch 18/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1773 - val_loss: 0.1715\n", + "Epoch 19/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1721 - val_loss: 0.1668\n", + "Epoch 20/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1669 - val_loss: 0.1627\n", + "Epoch 21/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1620 - val_loss: 0.1586\n", + "Epoch 22/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1577 - val_loss: 0.1551\n", + "Epoch 23/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1537 - val_loss: 0.1514\n", + "Epoch 24/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1497 - val_loss: 0.1479\n", + "Epoch 25/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1463 - val_loss: 0.1452\n", + "Epoch 26/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1428 - val_loss: 0.1422\n", + "Epoch 27/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1397 - val_loss: 0.1398\n", + "Epoch 28/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1366 - val_loss: 0.1371\n", + "Epoch 29/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1337 - val_loss: 0.1344\n", + "Epoch 30/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1309 - val_loss: 0.1326\n", + "Epoch 31/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1286 - val_loss: 0.1299\n", + "Epoch 32/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1258 - val_loss: 0.1281\n", + "Epoch 33/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1237 - val_loss: 0.1261\n", + "Epoch 34/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1213 - val_loss: 0.1240\n", + "Epoch 35/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1194 - val_loss: 0.1224\n", + "Epoch 36/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 11ms/step - loss: 0.1173 - val_loss: 0.1205\n", + "Epoch 37/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1151 - val_loss: 0.1189\n", + "Epoch 38/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1133 - val_loss: 0.1174\n", + "Epoch 39/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1115 - val_loss: 0.1161\n", + "Epoch 40/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1097 - val_loss: 0.1143\n", + "Epoch 41/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1082 - val_loss: 0.1129\n", + "Epoch 42/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1064 - val_loss: 0.1116\n", + "Epoch 43/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1050 - val_loss: 0.1101\n", + "Epoch 44/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 12ms/step - loss: 0.1035 - val_loss: 0.1090\n", + "Epoch 45/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1020 - val_loss: 0.1080\n", + "Epoch 46/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.1007 - val_loss: 0.1066\n", + "Epoch 47/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.0992 - val_loss: 0.1056\n", + "Epoch 48/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.0980 - val_loss: 0.1044\n", + "Epoch 49/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.0966 - val_loss: 0.1033\n", + "Epoch 50/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - loss: 0.0953 - val_loss: 0.1022\n" + ] + } + ], + "source": [ + "history = mymodel.fit(X_train,y_train,batch_size=128,epochs=50,validation_split=0.2)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "60822a89-5a77-4b5d-85e0-592889588a2e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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J1ALDxUl/nt/te3A/dG+xVVXXcUdd9zBe++9x8iRIwHYt28fb731Fv/5z3+orq7m4osv5sEHH8TlcvHss88yduxYvvzyS7p06XJcZdbW1nLRRRdx5pln8sknn1BRUcGkSZO47bbbeOaZZwgGg1xxxRX86Ec/4rnnnsPv9/Pxxx9jGAYA119/PYMGDWL27NlYrVZKS0ux2+3HVdO3SWrLzaJFixg7dixFRUVHNHjpxRdf5MILL6SgoICsrCyGDRvGW2+9lZhij4QGFIuISBzk5uZy0UUX8c9//jO6b/78+eTm5jJy5EgGDhzILbfcwoABA+jVqxcPPvgg3bt355VXXjnu7547dy51dXX87W9/o3///lxwwQU8+uij/P3vf2fnzp14PB4qKyu59NJL6dGjB3369GHChAnRUFVWVsaoUaM4+eST6dWrF1dddRUDBw487rpaktSWm5qaGgYOHMiNN97IuHHjvvX8RYsWceGFF/LQQw+Rk5PDnDlzGDt2LB999BGDBg1KQMXfIjrmpr65sT61iojICcyeFmlFScb3HoXrr7+em2++mVmzZuF0Opk7dy7f//73sVqt1NTUcP/99/Pqq6+ybds2gsEgdXV1lJWVHXeZ69atY+DAgaSnH2hlGjFiBOFwmC+//JJzzjmHiRMn8p3vfIcLL7yQUaNGcfXVV9OxY0cApk2bxqRJk/j73//OqFGjuOqqq+jRo8dx19WSpLbcjBkzhgcffJArr7zyiM6fOXMmP//5zzn99NPp1asXDz30EL169eI///nPYd/j8/nweDyNtriJ/qKaEPTF73tERCR2DCPSPZTo7Sj/D/DYsWMJh8O89tprlJeXs3jxYn7wgx8A8LOf/YwXXniB3/zmNyxevJjS0lIGDBiA3+8/7stjmma0i6nppYvsnzNnDh9++CHDhw9n3rx59O7dm2XLlgFw3333sWbNGi655BLeffdd+vbty0svvXTcdbWkVQ8oDofDVFVVkZube9hzZsyYQXZ2dnQrLi6OX0EHp3CNuxERkRhyu91ceeWVzJ07l+eee47evXszePBgABYvXszEiRP57ne/y4ABA+jQoQObNm2Kyff27duX0tJSamoOLAq9ZMkSLBYLvXv3ju4bNGgQ06dPZ+nSpfTv379RF1rv3r256667ePvtt7nyyiuZM2dOTGo7nFYdbv7whz9QU1PD1Vdffdhzpk+fTmVlZXQrLy+PX0FWG1gdkecKNyIiEmPXX389r732Gk8//XS01QagZ8+evPjii5SWlvLpp59y3XXXNZlZdTzf6XK5mDBhAp9//jnvvfcet99+OzfccAOFhYVs3LiR6dOn8+GHH7J582befvttvvrqK/r06UNdXR233XYb77//Pps3b2bJkiV88skn9OnTJya1HU6rnS313HPPcd999/Hvf/+b9u3bH/Y8p9OJ0+mMez3VviBvfr6DsYYTJ34NKhYRkZi74IILyM3N5csvv+S6666L7n/kkUf44Q9/yPDhw8nPz+cXv/hFzIZhpKWl8dZbb3HnnXdy+umnk5aWxrhx43j44Yejx7/44gueffZZ9uzZQ8eOHbntttu45ZZbCAaD7Nmzh/Hjx7Nz507y8/O58soruf/++2NS2+EYpnkUE+3jyDAMXnrpJa644opvPXfevHnceOONzJ8/n0suueSovsfj8ZCdnU1lZSVZWVnHWG1TOyq9nDnj/1jmvI0Oxl64eSEUnRqzzxcRkePn9XrZuHEjJSUluFyuZJcjh2jp3+do/n63um6p5557jokTJ/LPf/7zqINNPGW4Io1gtWZDt5RabkRERJIhqeGmurqa0tJSSktLAdi4cSOlpaXRqWvTp09n/Pjx0fOfe+45xo8fzx/+8AfOPPNMduzYwY4dO6isrExG+Y2k2a0YBnip7wIL1LT8BhERkSSYO3cuGRkZzW79+vVLdnkxkdQxN8uXL+f888+Pvp42bRoAEyZM4JlnnmH79u2N5ug//vjjBINBpkyZwpQpU6L7G85PJovFIMNpozbcEG7UciMiIieeyy67jKFDhzZ7LN53Dk6UpIab8847j5aG/BwaWN5///34FnScMp026mrru6W0eKaIyAnrBBlumhSZmZlkZmYmu4xmxerfpdWNuTmRZbhs1EW7pRRuRERONA0tE7W1+m/0iajhpoNWq/W4PqfVTgU/EWU4Dw436pYSETnRWK1WcnJyqKioACLTmA93911JrHA4zK5du0hLS8NmO754onATQxkuO7WmBhSLiJzIOnToABANOHLisFgsdOnS5bgDp8JNDGU6bXjRVHARkROZYRh07NiR9u3bEwgEkl2OHMThcGCxHP+IGYWbGMpw2qht6JbSgGIRkROa1Wo97rEdcmLSgOIYynDZqDM1oFhERCSZ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pLjQymoiIiISU0aSp50r3IiIiEhKUbgRERGRlKJwIyIiIilF4UZERERSisKNiIiIpBSFGxEREUkpCjciIiKSUhRuREREJKUo3IiIiEhKUbgRERGRlKJwIyIiIilF4UZERERSisKNiIiIpBRbsgtItIZl2D0eT5IrERERkSPV8He74e94S9pcuKmqqgKguLg4yZWIiIjI0aqqqiI7O7vFcwzzSCJQCgmHw2zbto3MzEwMw4jpZ3s8HoqLiykvLycrKyumny1N6Xonlq53Yul6J5aud2Idy/U2TZOqqiqKioqwWFoeVdPmWm4sFgudO3eO63dkZWXpfxwJpOudWLreiaXrnVi63ol1tNf721psGmhAsYiIiKQUhRsRERFJKQo3MeR0Orn33ntxOp3JLqVN0PVOLF3vxNL1Tixd78SK9/VucwOKRUREJLWp5UZERERSisKNiIiIpBSFGxEREUkpCjciIiKSUhRuYmTWrFmUlJTgcrkYPHgwixcvTnZJKWPRokWMHTuWoqIiDMPg5ZdfbnTcNE3uu+8+ioqKcLvdnHfeeaxZsyY5xbZyM2bM4PTTTyczM5P27dtzxRVX8OWXXzY6R9c7dmbPns0pp5wSvZHZsGHDeOONN6LHda3ja8aMGRiGwdSpU6P7dM1j57777sMwjEZbhw4dosfjea0VbmJg3rx5TJ06lbvvvptVq1Zx9tlnM2bMGMrKypJdWkqoqalh4MCBPProo80e/93vfsfDDz/Mo48+yieffEKHDh248MILo+uIyZFbuHAhU6ZMYdmyZSxYsIBgMMjo0aOpqamJnqPrHTudO3fmt7/9LcuXL2f58uVccMEFXH755dH/wOtax88nn3zCE088wSmnnNJov655bPXr14/t27dHt9WrV0ePxfVam3LczjjjDHPy5MmN9p188snmL3/5yyRVlLoA86WXXoq+DofDZocOHczf/va30X1er9fMzs42//KXvyShwtRSUVFhAubChQtN09T1ToR27dqZTz75pK51HFVVVZm9evUyFyxYYJ577rnmnXfeaZqmfr9j7d577zUHDhzY7LF4X2u13Bwnv9/PihUrGD16dKP9o0ePZunSpUmqqu3YuHEjO3bsaHT9nU4n5557rq5/DFRWVgKQm5sL6HrHUygU4vnnn6empoZhw4bpWsfRlClTuOSSSxg1alSj/brmsbd+/XqKioooKSnh+9//Phs2bADif63b3MKZsbZ7925CoRCFhYWN9hcWFrJjx44kVdV2NFzj5q7/5s2bk1FSyjBNk2nTpnHWWWfRv39/QNc7HlavXs2wYcPwer1kZGTw0ksv0bdv3+h/4HWtY+v5559n5cqVfPLJJ02O6fc7toYOHcrf/vY3evfuzc6dO3nwwQcZPnw4a9asifu1VriJEcMwGr02TbPJPokfXf/Yu+222/jss8/44IMPmhzT9Y6dk046idLSUvbv388LL7zAhAkTWLhwYfS4rnXslJeXc+edd/L222/jcrkOe56ueWyMGTMm+nzAgAEMGzaMHj168Oyzz3LmmWcC8bvW6pY6Tvn5+Vit1iatNBUVFU0SqcRew8h7Xf/Yuv3223nllVd477336Ny5c3S/rnfsORwOevbsyZAhQ5gxYwYDBw7kj3/8o651HKxYsYKKigoGDx6MzWbDZrOxcOFC/vSnP2Gz2aLXVdc8PtLT0xkwYADr16+P+++3ws1xcjgcDB48mAULFjTav2DBAoYPH56kqtqOkpISOnTo0Oj6+/1+Fi5cqOt/DEzT5LbbbuPFF1/k3XffpaSkpNFxXe/4M00Tn8+nax0HI0eOZPXq1ZSWlka3IUOGcP3111NaWkr37t11zePI5/Oxbt06OnbsGP/f7+Mekizm888/b9rtdvOpp54y165da06dOtVMT083N23alOzSUkJVVZW5atUqc9WqVSZgPvzww+aqVavMzZs3m6Zpmr/97W/N7Oxs88UXXzRXr15tXnvttWbHjh1Nj8eT5Mpbn1tvvdXMzs4233//fXP79u3Rrba2NnqOrnfsTJ8+3Vy0aJG5ceNG87PPPjN/9atfmRaLxXz77bdN09S1ToSDZ0uZpq55LP3kJz8x33//fXPDhg3msmXLzEsvvdTMzMyM/m2M57VWuImRxx57zOzatavpcDjM0047LTp1Vo7fe++9ZwJNtgkTJpimGZlSeO+995odOnQwnU6nec4555irV69ObtGtVHPXGTDnzJkTPUfXO3Z++MMfRv+7UVBQYI4cOTIabExT1zoRDg03uuaxc80115gdO3Y07Xa7WVRUZF555ZXmmjVrosfjea0N0zTN42//ERERETkxaMyNiIiIpBSFGxEREUkpCjciIiKSUhRuREREJKUo3IiIiEhKUbgRERGRlKJwIyIiIilF4UZERERSisKNiLRJhmHw8ssvJ7sMEYkDhRsRSbiJEydiGEaT7aKLLkp2aSKSAmzJLkBE2qaLLrqIOXPmNNrndDqTVI2IpBK13IhIUjidTjp06NBoa9euHRDpMpo9ezZjxozB7XZTUlLC/PnzG71/9erVXHDBBbjdbvLy8rj55puprq5udM7TTz9Nv379cDqddOzYkdtuu63R8d27d/Pd736XtLQ0evXqxSuvvBI9tm/fPq6//noKCgpwu9306tWrSRgTkROTwo2InJB+/etfM27cOD799FN+8IMfcO2117Ju3ToAamtrueiii2jXrh2ffPIJ8+fP55133mkUXmbPns2UKVO4+eabWb16Na+88go9e/Zs9B33338/V199NZ999hkXX3wx119/PXv37o1+/9q1a3njjTdYt24ds2fPJj8/P3EXQESOXUzWFhcROQoTJkwwrVarmZ6e3mh74IEHTNM0TcCcPHlyo/cMHTrUvPXWW03TNM0nnnjCbNeunVldXR09/tprr5kWi8XcsWOHaZqmWVRUZN59992HrQEw/+u//iv6urq62jQMw3zjjTdM0zTNsWPHmjfeeGNsfmARSSiNuRGRpDj//POZPXt2o325ubnR58OGDWt0bNiwYZSWlgKwbt06Bg4cSHp6evT4iBEjCIfDfPnllxiGwbZt2xg5cmSLNZxyyinR5+np6WRmZlJRUQHArbfeyrhx41i5ciWjR4/miiuuYPjw4cf0s4pIYinciEhSpKenN+km+jaGYQBgmmb0eXPnuN3uI/o8u93e5L3hcBiAMWPGsHnzZl577TXeeecdRo4cyZQpU/j9739/VDWLSOJpzI2InJCWLVvW5PXJJ58MQN++fSktLaWmpiZ6fMmSJVgsFnr37k1mZibdunXj//7v/46rhoKCAiZOnMg//vEPZs6cyRNPPHFcnyciiaGWGxFJCp/Px44dOxrts9ls0UG78+fPZ8iQIZx11lnMnTuXjz/+mKeeegqA66+/nnvvvZcJEyZw3333sWvXLm6//XZuuOEGCgsLAbjvvvuYPHky7du3Z8yYMVRVVbFkyRJuv/32I6rvnnvuYfDgwfTr1w+fz8err75Knz59YngFRCReFG5EJCnefPNNOnbs2GjfSSedxBdffAFEZjI9//zz/PjHP6ZDhw7MnTuXvn37ApCWlsZbb73FnXfeyemnn05aWhrjxo3j4Ycfjn7WhAkT8Hq9PPLII/z0pz8lPz+f733ve0dcn8PhYPr06WzatAm3283ZZ5/N888/H4OfXETizTBN00x2ESIiBzMMg5deeokrrrgi2aWISCukMTciIiKSUhRuREREJKVozI2InHDUWy4ix0MtNyIiIpJSFG5EREQkpSjciIiISEpRuBEREZGUonAjIiIiKUXhRkRERFKKwo2IiIikFIUbERERSSn/H/TOk+wZcqBlAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot losses \n", + "losses = history.history['loss']\n", + "val_losses = history.history['val_loss']\n", + "\n", + "plt.plot(losses)\n", + "plt.plot(val_losses)\n", + "plt.xlabel('Epochs')\n", + "plt.ylabel('loss')\n", + "\n", + "plt.legend(['loss','val_loss'])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "0e498679-4267-4a12-8a26-28c2fd4119ba", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.0940\n", + "test loss 0.09398777782917023\n", + "\u001b[1m313/313\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJ4AAACKCAYAAADrG4B0AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAL+dJREFUeJzt3XucTdX/+PH3mDEzjFuM2wwjfWpIQpF75COEKZ8ukqTkfilRSqSiTEpIN0pRiMh00eUbX2XwqY9yD/lI8iHXIvdxz/r98fm1vmttzpkzZ/aec+bM6/l49Hi813mfvfcya/bZZ3Z7vVeUUkoJAAAAAAAA4LJCoe4AAAAAAAAAIhM3ngAAAAAAAOAJbjwBAAAAAADAE9x4AgAAAAAAgCe48QQAAAAAAABPcOMJAAAAAAAAnuDGEwAAAAAAADzBjScAAAAAAAB4ghtPAAAAAAAA8ETY3nh6++23JSoqSooVKxbqrlxgx44d0r17d0lKSpK4uDhJTk6WW2+9NdTdCnvffPONtGvXTi655BIpUqSIXHHFFfLss8+GuluWV199VapXry5xcXFStWpVGTVqlJw9ezbU3QpbK1askDZt2kjx4sWlWLFi0qJFC/n2229D3S3t3XfflaioKJ//Pf/886HuYthZvHixdO/eXapXry4JCQmSnJwsHTp0kNWrV4e6axrjmnNLlizx+fP67rvvQt09ERHJysqSu+66S6pVqybFixeXhIQEueqqq2T06NGSlZUV6u6FNa6vkWfdunXSvn17SUlJkSJFikjp0qWlUaNG8t5774W6axY+h3Nu7dq18o9//EOSkpKkaNGiUr16dXnmmWfkxIkToe6ahXM2Z8J9XLnG5ly3bt38ft8Ml+9Pe/fulW7dukm5cuUkPj5eatWqJVOnTg11ty4QE+oOXMzu3btlyJAhkpSUJEeOHAl1dywbN26UG264QS677DIZN26cVKpUSfbu3SsLFy4MddfC2uzZs6Vr165y5513yowZM6RYsWLyyy+/yJ49e0LdNS09PV2efPJJefzxx6V169aycuVKGTFihOzevVumTJkS6u6FnZUrV0qzZs2kfv36MnPmTFFKydixY6Vly5aSmZkpjRo1CnUXpX379rJ8+fILXn/qqadk0aJF3DC+iMmTJ8sff/whDz30kNSoUUP2798v48ePl4YNG8rChQvl73//e6i7yLjmwnPPPSctWrSwXqtZs2aIemM7e/asKKXk4YcflqpVq0qhQoVk2bJl8swzz8iSJUvkq6++CnUXwxLX18h0+PBhqVy5snTu3FmSk5MlKytLZs2aJV27dpXt27fLiBEjQt1F7Y477pBHHnnEei0lJSVEvQlvmzZtksaNG0u1atVk4sSJkpiYqD/nVq9eLfPnzw91F0WEczan8sO4co3NuSeffFL69u17wes333yzxMXFyXXXXReCXtmOHDkiTZs2lTNnzsjYsWOlYsWK8v7770vPnj3lyJEj8vDDD4e6i/9HhaG0tDR18803q/vuu08lJCTkal9//PGH2r9/vyv9On/+vKpTp46qU6eOOnXqlCv7LAh27dqlEhISVL9+/Vzdr5tje+DAARUfH6969+5tvZ6enq6ioqLUjz/+6MpxIkmbNm1U+fLlVVZWln7t6NGjKjExUTVu3Djo/bo5rhdz/PhxVaxYMdW0aVPPjpGf/fbbbxe8duzYMVW+fHnVsmXLoPfLuIZWZmamEhE1b948V/fr9bgqpdRjjz2mRET98ssvnh4nP+L6WvA0aNBAVa5cOejt3T5nRUQNGDDAtf1FuieeeEKJiNq6dav1eu/evZWIqIMHDwa1X87Z0MoP4+oL19icWbJkiRIRNWLEiKD34ea4jhkzRomIWrVqlfV669atVUJCgjp06JArx3FD2E21e++992Tp0qUyadIkV/a3fv16qVixorRt21ZmzJghx44dC3pfy5Ytk3Xr1smgQYMkLi7Olf4VBG+//bZkZWXJ0KFDXd2vm2O7YMECOXXqlNx///3W6/fff78opeSTTz7JZW8jz7fffis33HCDFC1aVL9WvHhxadasmfzrX/+SvXv3BrVfN8f1YubOnSvHjx+Xnj17urrfSFGuXLkLXitWrJjUqFFDdu7cGfR+GdfI5PW4ioiULVtWRERiYsLyIe2Q4vpa8CQmJubqXMiLcxa+FS5cWERESpYsab1eqlQpKVSokMTGxga1X87Z0MoP4+oL19icmTp1qkRFRUn37t2D3oeb4/rtt99K+fLlpW7dutbraWlpkpWVJQsWLAh6324LqxtPv//+uwwaNEief/55qVSpkiv7bNiwoUyfPl0KFy4svXr1knLlyknHjh3lo48+ktOnT+doX8uWLROR//5x3a5dO4mPj5dixYpJWlqabN682ZX+RqJly5ZJ6dKlZfPmzVKnTh2JiYmRcuXKSd++feXo0aNB79fNsd24caOIiFx99dXW6xUrVpTExESdx/85c+bMRW/A/vXahg0bgtqvm+N6MVOnTpUSJUpIx44dc72vguLIkSOyZs0aueqqq4LeB+MaHgYMGCAxMTFSokQJadOmjXzzzTe52p8X46qUknPnzsnRo0dlwYIFMn78eOncuTNTdy6C62vkO3/+vJw7d072798vkyZNkoULF+bqRqMX5+zs2bOlSJEiEhcXJ3Xr1pV33nkn6P5Fuvvuu09KlSol/fr1k23btsmxY8fk888/lzfffFMGDBggCQkJQe2Xcza08sO4/oVrbPCOHDkiGRkZ0rJlS6latWrQ+3FzXLP7e2z9+vVB99N1IX3eyuH2229XjRs3VufPn1dKKVem2pkOHTqkpk2bplq3bq1iYmJUyZIlVbdu3dTChQvVuXPnst2+T58+SkRUiRIlVI8ePdRXX32lZs6cqapUqaISExPVnj17XOtrJKlWrZqKj49XxYsXV88995zKzMxUY8eOVUWKFFFNmjTR450buR3bXr16qbi4uIvmUlNTVevWrXPdx0hTp04dlZqaqv7880/92tmzZ9Vll12mRETNnj0718fI7bg6/fvf/1Yiovr06ZPrvhUkXbp0UTExMRc8xhssxjXvrVmzRj300EPq448/VsuWLVPTpk1TV155pYqOjlYLFixw5Rhujev777+vRET/d//996uzZ8+60sdIw/U18v313VNEVGxsrJo0aZJr+3bjnL377rvVrFmz1LJly1RGRoZq27ZtrqehRLp///vfqnr16tbn3MCBA105X5XinA2VcB/Xv3CNDd7kyZOViKj333/ftX3mdlwHDRqkChUqpHbs2GG93rVrVyUiF0yZDaWwufGUkZGhYmNjrXnDgd54On/+vDp79qz1X3b279+vJk+erJo3b66ioqJUuXLlsp3b2qtXLyUiqk2bNtbra9euVSKinnjiiWyPWxBdccUVSkTUmDFjrNcnTpyoREQtWrTI57Z5Obbx8fEXzaWmpl4w5lBq6tSpSkRUv3791K5du9Svv/6qevTooaKjo5WIqDlz5vjcNq/G1WnIkCFKRNTKlStztF1BNmLECCUi6tVXX832vYxr/nLo0CFVqVIlVatWLb/vy+txPXjwoFq5cqVavHixSk9P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AADgiZDWeLriiiusdqB1nd577z2r/corr/h8b6dOnXTsXLLUWSfBXM7XrEeC3DGXgXTOaTWX7+3SpYuVM2v6HDp0yJvO+VGjRg0dO5cEPn78uI4nTJiQZ32KNGXKlLHavXv39vleammFv8svv1zH5jLqTmY9PxGR999/37M+4eKaN2/uM7d06VJXjtGrVy+rPWzYMB2bNYucChXi/4k5Ob+vmK655hodT58+3cp17txZxwcPHgzq2M5aLh07drTa5hLrzmWfn376aR0vW7bMylHXKf84efKkz/Zll11m5cxaXs4aTwWVuay6iEhSUlJA261du9Zq+1tW3az11rNnTyvn/J56/vz5gI7vZH42O89n5D1/NZ3Mv39FRObOnatjs96TCDWf8oL5966ISFpams/3zpo1y+vuhAzf7gAAAAAAAOAJbjwBAAAAAADAEyGdamc+np2d//znPzo2l3gVEfnzzz99ble2bFkdOx9VnzlzptW+//77A+4PArdx40Ydf/jhh1bu7rvv1vELL7xg5cxHhV999VUr9+abb+r43LlzQfctJub/TgFzmpCI/Viq07x583QcSctc5jXz/BQRufTSS32+98iRIx73BjnlnC41fPhwHSckJPjc7rPPPvOsT/DNnN4xf/58K2dOmyhXrlzA+7zlllt07Jy+V758easdHR2tY+f1eN26dTo2l/oWEdm3b1/A/YlUv/zyi46dn5vmFJsbb7zRys2ZM0fH/fv3t3Ivvviijp3XP1OJEiWstrO8wbXXXqtjc5qVSPDT+2B/B3JOW/3xxx913L17d0+O37RpUx3Hx8dbuX79+um4ZcuWVs78ffTH/J2OdM7PO39TZ03OkiTPPvusjp2fk+Y0uIoVK1o559S6QI/vVKlSJR3zuZz3spu6ak6p/OCDD6zc8uXLdeycanfnnXf63A7uqFq1qtU2p8g7nT592uvuhAxPPAEAAAAAAMAT3HgCAAAAAACAJ7jxBAAAAAAAAE/keY0nc/n0Fi1a+HzfmTNnrLZZC2jHjh0BHy85OVnHzjmTZu0DkeCXF0Xgxo8f7zN32223WW1zbruzpkTDhg11fODAgYCPv3jxYqttzms2f8dE7NoUgwcP9rsfuMOsGRRsDQLkndtvv91q33vvvT7f++677+p41apVXnUJfpg1looVK2bl2rdvr+N27doFtX9nzS/n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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Evaluation on test data \n", + "test_loss = mymodel.evaluate(X_test,y_test)\n", + "print(\"test loss\",test_loss)\n", + "\n", + "test_labels_p = mymodel.predict(X_test)\n", + "test_labels_p = np.argmax(test_labels_p, axis=1 )\n", + "\n", + "n = 0\n", + "\n", + "f,axs = plt.subplots(1,10,figsize = (15,15))\n", + "for i in range(len(test_labels)): \n", + " if n >= 10 :\n", + " break\n", + " if (test_labels_p[i] != test_labels[i]):\n", + " axs[n].imshow(test_images[i],cmap='gray')\n", + " axs[n].set_title(f'{test_labels[i]} -> {test_labels_p[i]}')\n", + " axs[n].axis('off')\n", + " n= n+1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a5c46a75-ba84-42ee-8824-74fbd79ef95a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/cnn-batchnorm-comparison/conv-pred.ipynb b/cnn-batchnorm-comparison/conv-pred.ipynb new file mode 100644 index 0000000..1705c3e --- /dev/null +++ b/cnn-batchnorm-comparison/conv-pred.ipynb @@ -0,0 +1,431 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "7a66657b-f3e8-430a-8551-54536858cda2", + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras import datasets,utils,models,layers,optimizers,losses\n", + "import numpy as np \n", + "import matplotlib.pyplot as plt " + ] + }, + { + "cell_type": "markdown", + "id": "c7b33119-4f56-40c2-a9ac-e021855d5db1", + "metadata": {}, + "source": [ + "# data Prepration " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d5e08183-17c7-422f-b2ad-18f9659aef78", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n", + "[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n" + ] + } + ], + "source": [ + "(train_images , train_labels), (test_images,test_labels ) = datasets.mnist.load_data()\n", + "\n", + "# preprocessing\n", + "X_train = train_images.reshape(60000,28,28,1)\n", + "X_test = test_images.reshape(10000,28,28,1)\n", + "\n", + "# Normalizing (0,1 )\n", + "X_train = X_train.astype('float') / 255\n", + "X_test = X_test.astype('float') / 255\n", + "\n", + "y_train = utils.to_categorical(train_labels)\n", + "y_test = utils.to_categorical(test_labels) \n", + "\n", + "print(train_labels[0])\n", + "print(y_train[0])\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "23ff2c0e-ccbf-4a77-ba99-8a9a397a47f6", + "metadata": {}, + "source": [ + "# model creation " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "052f3a1e-1409-42ca-b99b-140ea2b9a4f9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"functional\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"functional\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“\n",
+       "โ”ƒ Layer (type)                         โ”ƒ Output Shape                โ”ƒ         Param # โ”ƒ\n",
+       "โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ\n",
+       "โ”‚ input_layer (InputLayer)             โ”‚ (None, 28, 28, 1)           โ”‚               0 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ conv2d (Conv2D)                      โ”‚ (None, 14, 14, 32)          โ”‚             320 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ conv2d_1 (Conv2D)                    โ”‚ (None, 7, 7, 64)            โ”‚          18,496 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ flatten (Flatten)                    โ”‚ (None, 3136)                โ”‚               0 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ dense (Dense)                        โ”‚ (None, 10)                  โ”‚          31,370 โ”‚\n",
+       "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n",
+       "
\n" + ], + "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", + "โ”‚ input_layer (\u001b[38;5;33mInputLayer\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m1\u001b[0m) โ”‚ \u001b[38;5;34m0\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ conv2d (\u001b[38;5;33mConv2D\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m32\u001b[0m) โ”‚ \u001b[38;5;34m320\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ conv2d_1 (\u001b[38;5;33mConv2D\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m64\u001b[0m) โ”‚ \u001b[38;5;34m18,496\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ flatten (\u001b[38;5;33mFlatten\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m3136\u001b[0m) โ”‚ \u001b[38;5;34m0\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ dense (\u001b[38;5;33mDense\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) โ”‚ \u001b[38;5;34m31,370\u001b[0m โ”‚\n", + "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 50,186 (196.04 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m50,186\u001b[0m (196.04 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 50,186 (196.04 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m50,186\u001b[0m (196.04 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:TensorFlow GPU support is not available on native Windows for TensorFlow >= 2.11. Even if CUDA/cuDNN are installed, GPU will not be used. Please use WSL2 or the TensorFlow-DirectML plugin.\n" + ] + } + ], + "source": [ + "myInput = layers.Input(shape=(28,28,1))\n", + "conv1 = layers.Conv2D(32,3,activation='relu', padding='same', strides=2 )(myInput)\n", + "conv2 = layers.Conv2D(64,3, activation='relu', padding='same', strides=2 )(conv1)\n", + "\n", + "flat = layers.Flatten()(conv2)\n", + "out_layer = layers.Dense(10,activation='softmax')(flat)\n", + "\n", + "mymodel = models.Model(myInput,out_layer)\n", + "\n", + "\n", + "mymodel.summary()\n", + "mymodel.compile(\n", + " optimizer=optimizers.SGD(learning_rate=0.001),\n", + " loss=losses.categorical_crossentropy\n", + ")\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "c2d83c86-ac20-4c4c-8b08-331a9fb383e8", + "metadata": {}, + "source": [ + "# Train and Evaluation" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "80ed9096-af37-4844-9bf3-3d9f4106896a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 8ms/step - loss: 2.2916 - val_loss: 2.2780\n", + "Epoch 2/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 2.2610 - val_loss: 2.2424\n", + "Epoch 3/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 2.2172 - val_loss: 2.1859\n", + "Epoch 4/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 2.1412 - val_loss: 2.0813\n", + "Epoch 5/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 1.9934 - val_loss: 1.8713\n", + "Epoch 6/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 1.7034 - val_loss: 1.4830\n", + "Epoch 7/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 1.2747 - val_loss: 1.0378\n", + "Epoch 8/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.9160 - val_loss: 0.7580\n", + "Epoch 9/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.7160 - val_loss: 0.6122\n", + "Epoch 10/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.6078 - val_loss: 0.5302\n", + "Epoch 11/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.5434 - val_loss: 0.4800\n", + "Epoch 12/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.5018 - val_loss: 0.4461\n", + "Epoch 13/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 8ms/step - loss: 0.4727 - val_loss: 0.4233\n", + "Epoch 14/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 8ms/step - loss: 0.4517 - val_loss: 0.4054\n", + "Epoch 15/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - loss: 0.4354 - val_loss: 0.3918\n", + "Epoch 16/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.4224 - val_loss: 0.3820\n", + "Epoch 17/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.4119 - val_loss: 0.3730\n", + "Epoch 18/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.4030 - val_loss: 0.3658\n", + "Epoch 19/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3953 - val_loss: 0.3595\n", + "Epoch 20/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3888 - val_loss: 0.3543\n", + "Epoch 21/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3829 - val_loss: 0.3496\n", + "Epoch 22/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3777 - val_loss: 0.3452\n", + "Epoch 23/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - loss: 0.3730 - val_loss: 0.3416\n", + "Epoch 24/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3686 - val_loss: 0.3383\n", + "Epoch 25/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3648 - val_loss: 0.3349\n", + "Epoch 26/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3610 - val_loss: 0.3327\n", + "Epoch 27/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3576 - val_loss: 0.3293\n", + "Epoch 28/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3543 - val_loss: 0.3270\n", + "Epoch 29/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3514 - val_loss: 0.3248\n", + "Epoch 30/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3485 - val_loss: 0.3225\n", + "Epoch 31/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3459 - val_loss: 0.3201\n", + "Epoch 32/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3432 - val_loss: 0.3180\n", + "Epoch 33/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3409 - val_loss: 0.3160\n", + "Epoch 34/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 8ms/step - loss: 0.3384 - val_loss: 0.3142\n", + "Epoch 35/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3362 - val_loss: 0.3121\n", + "Epoch 36/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3341 - val_loss: 0.3103\n", + "Epoch 37/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 8ms/step - loss: 0.3319 - val_loss: 0.3086\n", + "Epoch 38/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3298 - val_loss: 0.3080\n", + "Epoch 39/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 8ms/step - loss: 0.3278 - val_loss: 0.3059\n", + "Epoch 40/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3259 - val_loss: 0.3039\n", + "Epoch 41/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3240 - val_loss: 0.3022\n", + "Epoch 42/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3221 - val_loss: 0.3007\n", + "Epoch 43/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3205 - val_loss: 0.2991\n", + "Epoch 44/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3186 - val_loss: 0.2975\n", + "Epoch 45/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3168 - val_loss: 0.2965\n", + "Epoch 46/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3151 - val_loss: 0.2947\n", + "Epoch 47/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3135 - val_loss: 0.2935\n", + "Epoch 48/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3118 - val_loss: 0.2921\n", + "Epoch 49/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3103 - val_loss: 0.2907\n", + "Epoch 50/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - loss: 0.3086 - val_loss: 0.2898\n" + ] + } + ], + "source": [ + "history = mymodel.fit(X_train,y_train,batch_size=128,epochs=50,validation_split=0.2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "d67a7b08-2bed-45c7-968a-8eec643ec655", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAGwCAYAAABB4NqyAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXgtJREFUeJzt3Xl8VNXB//HPzCQzk3VCWLJAgMi+CAIim+ACIiBUKiptlaWPlOKDC+Wxvz6prdUuUvvUtSitrUqtimhZpCoFrLIouLAEEAFBtggJYUsm+zb398fNTDJkIWSbLN/363Vf9865S85clHw559xzLYZhGIiIiIi0ItZAV0BERESksSkAiYiISKujACQiIiKtjgKQiIiItDoKQCIiItLqKACJiIhIq6MAJCIiIq1OUKAr0BR5PB5OnTpFREQEFosl0NURERGRGjAMg6ysLOLj47Faq2/jUQCqxKlTp0hISAh0NURERKQWUlJS6NSpU7XHKABVIiIiAjBvYGRkZIBrIyIiIjXhdrtJSEjw/R6vjgJQJbzdXpGRkQpAIiIizUxNhq9oELSIiIi0OgpAIiIi0uooAImIiEirozFAIiIiVSgpKaGoqCjQ1ZBy7Hb7JR9xrwkFIBERkYsYhkFaWhoZGRmBropcxGq1kpiYiN1ur9N1FIBEREQu4g0/HTp0IDQ0VJPiNhHeiYpTU1Pp3Llznf5cFIBERETKKSkp8YWftm3bBro6cpH27dtz6tQpiouLCQ4OrvV1NAhaRESkHO+Yn9DQ0ADXRCrj7foqKSmp03UUgERERCqhbq+mqb7+XBSAREREpNVRABIREZFWRwFIRESkhbj++utZsGBBoKvRLCgANbKPD52loLhuA7dERESkbhSAGtHh9GxmvfI5Y5/cxLt7TmEYRqCrJCIi0iopADWitMx8OocW8e2FPO57Yxe3LdnKjuMXAl0tERG5BMMwyC0sbvSlLv9QvnDhAjNnzqRNmzaEhoYyceJEDh065Nt//PhxpkyZQps2bQgLC6Nfv368//77vnPvuusu2rdvT0hICD169OCVV16p831sSjQRYiO6tlMQ/3H+P/a1G8l/nZzCrhMZTFuylVuujONnE3rTua3mnBARaYryikro+8i6Rv+5X/36ZkLttftVPXv2bA4dOsSaNWuIjIzkZz/7GZMmTeKrr74iODiY+fPnU1hYyObNmwkLC+Orr74iPDwcgF/+8pd89dVXrF27lnbt2nH48GHy8vLq86sFnAJQY/p6HdbsNK7MXsmnrm38I/pBHjvUmff2prLhq9PMGtmF+27sgSuk9jNbioiIeIPPJ598wsiRIwF4/fXXSUhIYPXq1dxxxx2cOHGCadOmceWVVwJwxRVX+M4/ceIEgwYN4uqrrwaga9eujf4dGlpAA9CiRYtYuXIlBw4cICQkhJEjR/LEE0/Qq1evKs9ZuXIlS5YsITk5mYKCAvr168ejjz7KzTff7Dtm6dKl/PCHP6xwbl5eHk6ns0G+S40MnA6R8bDmfmwXjjI7+3/5bt9b+d/cu1h7tJi/bjnK2zu+5cGxPbh7eBeCbeqhFBFpCkKCbXz165svfWAD/Nza2L9/P0FBQQwbNsxX1rZtW3r16sX+/fsBeOCBB7j33ntZv34948aNY9q0aQwYMACAe++9l2nTprFz507Gjx/P1KlTfUGqpQjob9hNmzYxf/58Pv30UzZs2EBxcTHjx48nJyenynM2b97MTTfdxPvvv8+OHTu44YYbmDJlCrt27fI7LjIyktTUVL8loOHHK3E03LsVRj4AFiuub97hhYx5vH/9Kbq3DyMjt4jH/vUVk57dwuH07EDXVkREMGcfDrUHNfpS21mPqxo7ZBiG75pz5szhyJEjzJgxg71793L11Vfzpz/9CYCJEydy/PhxFixYwKlTpxg7diwPPfRQ7W5eE2UxmtCjSGfOnKFDhw5s2rSJMWPG1Pi8fv36MX36dB555BHAbAFasGABGRkZtaqH2+3G5XKRmZlJZGRkra5RIyd3wjv3Qfo+ADzdb2J1x5/yu4/dnMspJNwRxNPTr+KmvjENVwcREfGTn5/P0aNHSUxMbBr/cL4M119/PVdddRXz58+nZ8+efl1g586dIyEhgVdffZXbb7+9wrlJSUm899577Nmzp8K+v/zlL/z0pz/F7XY3+He4lOr+fC7n93eT6mPJzMwEIDo6usbneDwesrKyKpyTnZ1Nly5d6NSpE5MnT67QQlReQUEBbrfbb2kUHQfD3I1wwy/AZsd6eAO3bZvGxuu/YViXKLILivnRq9t5esPXeDxNJqeKiEgT16NHD2699VZ+9KMf8fHHH7N7927uvvtuOnbsyK233grAggULWLduHUePHmXnzp18+OGH9OnTB4BHHnmEd955h8OHD7Nv3z7effdd376WoskEIMMwWLhwIddeey39+/ev8XlPPvkkOTk53Hnnnb6y3r17s3TpUtasWcOyZctwOp2MGjXK7/G/8hYtWoTL5fItCQkJdf4+NRZkh+t+CvM+hk7XQGEWEf/5GctCfs+PrmkHwLP/OcTcf2zHnV/UePUSEZFm7ZVXXmHIkCFMnjyZESNGYBgG77//PsHB5oM2JSUlzJ8/nz59+jBhwgR69erFCy+8AJhvXE9KSmLAgAGMGTMGm83Gm2++GcivU++aTBfY/Pnzee+99/j444/p1KlTjc5ZtmwZc+bM4Z133mHcuHFVHufxeBg8eDBjxozhueeeq7C/oKCAgoIC32e3201CQkLDd4FVqGgJfPE3+OAxKMqBLqNY2fcZ/vdf31BY7OGKdmG8OHMI3TtENF6dRERamebcBdYatKgusPvvv581a9bw0Ucf1Tj8LF++nHvuuYe33nqr2vADYLVaGTp0aJUtQA6Hg8jISL8lIKw2GPZjmP0vcETC8U+47eBPWTFnEHEuJ0fO5jD1+a2s25cWmPqJiIi0EAENQIZhcN9997Fy5Uo+/PBDEhMTa3TesmXLmD17Nm+88Qa33HJLjX5OcnIycXFxda1y4+g4BO76JwSHwZGNXPnJ/fzrv69hWGI02QXF/PgfO3hq/UGNCxIREamlgAag+fPn89prr/HGG28QERFBWloaaWlpfrNNJiUlMXPmTN/nZcuWMXPmTJ588kmGDx/uO8c7gBrgscceY926dRw5coTk5GTuuecekpOTmTdvXqN+vzrpPAzueguCQuDQetqtncdrPxzM7JFdAXjuw8P86NXt5BfpxaoiIiKXK6ABaMmSJWRmZnL99dcTFxfnW5YvX+47JjU1lRMnTvg+/+Uvf6G4uJj58+f7nfPggw/6jsnIyGDu3Ln06dOH8ePHc/LkSTZv3sw111zTqN+vzrpeC99fBjYHHHiX4Hd+zKO39OLJOwbiCLLynwPpPP7+/kDXUkREpNlpMoOgm5JGmweopr5eB2/eBZ4iGPA9mLqEjYfOMvuVLwD428yrGae5gkRE6oUGQTdtLWoQtFxCz5vhjlfAYoM9b8K7D3J9j3bMudYcM/XTf+7mtDs/wJUUERFpPhSAmos+U2DaX8FihZ2vwr9/xk9v7km/+Egu5Bax8K1kDYoWERGpIQWg5qT/NLj1BcACn7+I48Nf8dz3riIk2MYnh8/x4pYjga6hiIhIs6AA1Nxc9X2Y/LS5vW0x3c5v5ldT+gLwx3UH2fNtRuDqJiIi0kwoADVHV/8QRpU+9faf3zB9SDyTroyl2GPwwLJdZBcUB7Z+IiLSLHXt2pVnnnmmRsdaLBZWr17doPVpSApAzdW1C8HpgjP7sXy5gkXfHUC8y8mxc7k8umZfoGsnIiLSpCkANVchUTBqgbm98XFcdoNnvjcIqwX+ueNb1uw+FcjaiYiINGkKQM3ZsB9DWAe4cAx2/YNrEqO578YeADy8ci8p53MDWz8RkZbCMKAwp/GXy5iq7y9/+QsdO3bE4/H4lX/nO99h1qxZfPPNN9x6663ExMQQHh7O0KFD+eCDD+rtFu3du5cbb7yRkJAQ2rZty9y5c8nOzvbt37hxI9dccw1hYWFERUUxatQojh8/DsDu3bu54YYbiIiIIDIykiFDhrB9+/Z6q1tlghr06tKw7GFw3f+D9x+CTX+Agd/ngRu788nhs+w4foEH39zFWz8eQZBNOVdEpE6KcuHx+Mb/uT8/Zf5dXwN33HEHDzzwAB999BFjx44F4MKFC6xbt45//etfZGdnM2nSJH7729/idDr5+9//zpQpUzh48CCdO3euUzVzc3OZMGECw4cP54svviA9PZ05c+Zw3333sXTpUoqLi5k6dSo/+tGPWLZsGYWFhXz++edYLBYA7rrrLgYNGsSSJUuw2WwkJycTHBxcpzpdin4zNneDZ0FUZ8hOgy/+SpDNyjPTryLCGcTOExk89+HhQNdQREQaQXR0NBMmTOCNN97wlb399ttER0czduxYBg4cyI9//GOuvPJKevTowW9/+1uuuOIK1qxZU+ef/frrr5OXl8err75K//79ufHGG1m8eDH/+Mc/OH36NG63m8zMTCZPnky3bt3o06cPs2bN8gWvEydOMG7cOHr37k2PHj244447GDhwYJ3rVR21ADV3QXa4PglW3wsfPw1DZpMQ7eJ3372SB5btYvGHh7i+V3sGd24T6JqKiDRfwaFma0wgfu5luOuuu5g7dy4vvPACDoeD119/ne9973vYbDZycnJ47LHHePfddzl16hTFxcXk5eX5vW+ztvbv38/AgQMJCytrrRo1ahQej4eDBw8yZswYZs+ezc0338xNN93EuHHjuPPOO4mLiwNg4cKFzJkzh3/84x+MGzeOO+64g27dutW5XtVRC1BLMGA6tOsFeRdg2/MAfGdgPFOvisdjwEsfHw1wBUVEmjmLxeyKauyltIuopqZMmYLH4+G9994jJSWFLVu2cPfddwPw05/+lBUrVvC73/2OLVu2kJyczJVXXklhYWGdb49hGL7urIq3zix/5ZVX2LZtGyNHjmT58uX07NmTTz/9FIBHH32Uffv2ccstt/Dhhx/St29fVq1aVed6VUcBqCWw2uDGX5jb256HnLMAzBl9BQAbvjpNZm5RoGonIiKNJCQkhNtuu43XX3+dZcuW0bNnT4YMGQLAli1bmD17Nt/97ne58soriY2N5dixY/Xyc/v27UtycjI5OTm+sk8++QSr1UrPnj19ZYMGDSIpKYmtW7fSv39/v+66nj178pOf/IT169dz22238corr9RL3aqiANRS9JkCcVdBYTZseQqAfvGR9I6NoLDYw7t79Vi8iEhrcNddd/Hee+/x8ssv+1p/ALp3787KlStJTk5m9+7d/OAHP6jwxFhdfqbT6WTWrFl8+eWXfPTRR9x///3MmDGDmJgYjh49SlJSEtu2beP48eOsX7+er7/+mj59+pCXl8d9993Hxo0bOX78OJ988glffPEFffr0qZe6VUUBqKWwWGDsI+b2F3+DzG+xWCxMG9wJgBU7vg1g5UREpLHceOONREdHc/DgQX7wgx/4yp9++mnatGnDyJEjmTJlCjfffDODBw+ul58ZGhrKunXrOH/+PEOHDuX2229n7NixLF682Lf/wIEDTJs2jZ49ezJ37lzuu+8+fvzjH2Oz2Th37hwzZ86kZ8+e3HnnnUycOJHHHnusXupWFYthXMYkA62E2+3G5XKRmZlJZGRkoKtTc4YBSyfD8Y/Np8O+8xzpWfmMWPQhJR6DD//nOq5oHx7oWoqINGn5+fkcPXqUxMREnE5noKsjF6nuz+dyfn+rBaglKd8KtOs1OPcNHSKcjOnRDoCVO08GsHIiIiJNhwJQS9N5GPScAEYJfPQ4ANOGmN1gq3adxONRg5+IiFTv9ddfJzw8vNKlX79+ga5evdA8QC3Rjb+Ar/8NX/4Trl3AuD59iXQGcTIjj0+PnGNk93aBrqGIiDRh3/nOdxg2bFil+xp6hubGogDUEsVeCf2nwZcr4MPf4vzBciYPjOeNz07wz53fKgCJiNRAax4iGxERQURERKCrUan6+nNRF1hLdcPDYLGZLUEpn/ueBvv3l2nkFBQHuHIiIk2Xt4UjN1cvlG6KvBM32my2Ol1HLUAtVdtu5gzRu9+APW8xeNL/kdgujKNnc1j7ZRq3l44LEhERfzabjaioKNLT0wHzEe6qZjmWxuXxeDhz5gyhoaEEBdUtwigAtWS9J5kB6Oim0jmBOvLH9V+zYse3CkAiItWIjY0F8IUgaTqsViudO3eucyhVAGrJul4LFiuc/Rrcp/ju4E48ueFrth05x7cXcunU5vJesici0lpYLBbi4uLo0KEDRUV6lVBTYrfbsVrrPoJHAaglC2kDcQPh1C44uoWOA6cz4oq2bP3mHKt2nuT+sT0CXUMRkSbNZrPVeayJNE0aBN3SJV5nro9uAvANhl6562SrfsJBRERaNwWgli5xjLk+sgkMgwn9Ywm12zh6NoedJy4Etm4iIiIBogDU0nUeATY7uL+F80cIcwQxsX8cAP/coVdjiIhI66QA1NLZQ6HTNeb2kY0ATBvSEYB395wiv6gkQBUTEREJHAWg1uAK/3FAwxPb0jEqhKz8YjZ8dTqAFRMREQkMBaDWwDcQegt4PFitFm4bbLYCrdj5bQArJiIiEhgBDUCLFi1i6NChRERE0KFDB6ZOncrBgwcved6mTZsYMmQITqeTK664gj//+c8VjlmxYgV9+/bF4XDQt29fVq1a1RBfoXnoOBjs4ZB3Hk5/CcBtpU+Dbf76DOnu/EDWTkREpNEFNABt2rSJ+fPn8+mnn7JhwwaKi4sZP348OTk5VZ5z9OhRJk2axOjRo9m1axc///nPeeCBB1ixYoXvmG3btjF9+nRmzJjB7t27mTFjBnfeeSefffZZY3ytpscWDF1Gmtul3WCJ7cIY3DkKjwGrkzUYWkREWheL0YQmgzlz5gwdOnRg06ZNjBkzptJjfvazn7FmzRr279/vK5s3bx67d+9m27ZtAEyfPh23283atWt9x0yYMIE2bdqwbNmyS9bD7XbjcrnIzMwkMjKyjt+qidi6GNY/DN1vgrv/CcDrnx3n4VVf0ismgn8vGK133YiISLN2Ob+/m9QYoMzMTACio6OrPGbbtm2MHz/er+zmm29m+/btvunKqzpm69atlV6zoKAAt9vtt7Q43oHQx7dCsfkm3ckD4rEHWTl4Oot9p1rgdxYREalCkwlAhmGwcOFCrr32Wvr371/lcWlpacTExPiVxcTEUFxczNmzZ6s9Ji0trdJrLlq0CJfL5VsSEhLq+G2aoA79ILQtFOXAyR0AuEKCuamveZ9W7lQ3mIiItB5NJgDdd9997Nmzp0ZdVBd31Xh78cqXV3ZMVV08SUlJZGZm+paUlJTLrX7TZ7WWzQpdOg4IYGJ/843HO46fD0StREREAqJJBKD777+fNWvW8NFHH9GpU6dqj42Nja3QkpOenk5QUBBt27at9piLW4W8HA4HkZGRfkuL5HscfrOvqH+8C4ADaVkUl3gCUSsREZFGF9AAZBgG9913HytXruTDDz8kMTHxkueMGDGCDRs2+JWtX7+eq6++muDg4GqPGTlyZP1VvjnytgClfA6F5pN2naNDCbPbKCj2cORs1U/fiYiItCQBDUDz58/ntdde44033iAiIoK0tDTS0tLIy8vzHZOUlMTMmTN9n+fNm8fx48dZuHAh+/fv5+WXX+all17ioYce8h3z4IMPsn79ep544gkOHDjAE088wQcffMCCBQsa8+s1PdFXgCsBPEVwwnxizmq10CfObPHadyozkLUTERFpNAENQEuWLCEzM5Prr7+euLg437J8+XLfMampqZw4ccL3OTExkffff5+NGzdy1VVX8Zvf/IbnnnuOadOm+Y4ZOXIkb775Jq+88goDBgxg6dKlLF++nGHDhjXq92tyLJaybrAjZeOA+sWbAegrPQkmIiKtRFAgf3hNpiBaunRphbLrrruOnTt3Vnve7bffzu23317bqrVcV1wHya/5DYTu6w1AqQpAIiLSOjSJQdDSiLzjgFL3QK755Fe/0oHQ+065axRKRUREmjsFoNYmIhba9wYMOLYFgO4dwgmyWsjILSI1U+8FExGRlk8BqDXyzQdkPg7vDLbRvUM4gGaEFhGRVkEBqDWqZCB0Xw2EFhGRVkQBqDXqei1YrHDuELhPAdA3zjsQWo/Ci4hIy6cA1BqFREHcVeZ2aStQ+YHQIiIiLZ0CUGvlfTt86ePw3hagby/kkZlXFKhaiYiINAoFoNaq/Dggw8AVGkzHqBBA44BERKTlUwBqrRKGgc0OWafg3DdAuRmhNSGiiIi0cApArZU91AxBAEc3AnoSTEREWg8FoNbsosfhywZC60kwERFp2RSAWjPvQOhjW8Dj8bUAHU7PpqC4JIAVExERaVgKQK1Z/GCwR0DeBUjbQ7zLiSskmGKPwaHT2YGunYiISINRAGrNbEHQdZS5fXQTFoulbCC0xgGJiEgLpgDU2nUdba5PfAaUnxFaAUhERFouBaDWrkNvc33+CAD9OpoBSAOhRUSkJVMAau2irzDXF46aA6HjzCfB9qdm4fEYAayYiIhIw1EAau1cncEaBMX5kJXKFe3DsAdZyS4o5sT53EDXTkREpEEoALV2tiCI6mJunz9CsM1K79gIQOOARESk5VIAkrJusPPmKzF8A6H1JJiIiLRQCkBSLgCVDoSO10BoERFp2RSApEIA6quXooqISAunACTlAtBRAHrHRmKxwGl3AWezCwJYMRERkYahACT+LUCGQZgjiMS2YYDGAYmISMukACQQ1RksVijKhezTAPRRN5iIiLRgCkACQXYzBEElA6EVgEREpOVRABKTtxvs3MWPwutJMBERaXkUgMRUxZNgR87mkFtYHKhaiYiINAgFIDFdFIA6RDhpH+HAMOBAWlYAKyYiIlL/FIDEdFEAAs0ILSIiLZcCkJjKzwVkmG+B10BoERFpqQIagDZv3syUKVOIj4/HYrGwevXqao+fPXs2FoulwtKvXz/fMUuXLq30mPz8/Ab+Ns1cVBfAAoVZkHMW0IzQIiLScgU0AOXk5DBw4EAWL15co+OfffZZUlNTfUtKSgrR0dHccccdfsdFRkb6HZeamorT6WyIr9ByBDvBlWBuewdCl3aBHUh1U1ziCVTNRERE6l1QIH/4xIkTmThxYo2Pd7lcuFwu3+fVq1dz4cIFfvjDH/odZ7FYiI2Nrbd6thrRiZB5wnwrfOdhdG0bRqjdRm5hCUfP5tAjJiLQNRQREakXzXoM0EsvvcS4cePo0qWLX3l2djZdunShU6dOTJ48mV27dlV7nYKCAtxut9/SKl00ENpqtdAnTt1gIiLS8jTbAJSamsratWuZM2eOX3nv3r1ZunQpa9asYdmyZTidTkaNGsWhQ4eqvNaiRYt8rUsul4uEhISGrn7TVMmTYBoILSIiLVGzDUBLly4lKiqKqVOn+pUPHz6cu+++m4EDBzJ69GjeeustevbsyZ/+9Kcqr5WUlERmZqZvSUlJaeDaN1F6FF5ERFqJgI4Bqi3DMHj55ZeZMWMGdru92mOtVitDhw6ttgXI4XDgcDjqu5rNj+91GOZb4bFY/J4EMwwDi8USwAqKiIjUj2bZArRp0yYOHz7MPffcc8ljDcMgOTmZuLi4RqhZM9emq7kuyIS8CwD0jInAZrVwPqeQNLemEhARkZYhoAEoOzub5ORkkpOTATh69CjJycmcOHECMLumZs6cWeG8l156iWHDhtG/f/8K+x577DHWrVvHkSNHSE5O5p577iE5OZl58+Y16HdpEeyhENnR3C7tBnMG2+jePhxQN5iIiLQcAQ1A27dvZ9CgQQwaNAiAhQsXMmjQIB555BHAHOjsDUNemZmZrFixosrWn4yMDObOnUufPn0YP348J0+eZPPmzVxzzTUN+2VaioveCg8aCC0iIi1PQMcAXX/99Rilr12ozNKlSyuUuVwucnNzqzzn6aef5umnn66P6rVO0YlwbIv/QOj4SFbuOqkWIBERaTGa5RggaUDVPAm2P00BSEREWgYFIPFXSQBKbB8GwMkLeZR4qm6xExERaS4UgMRfJQGoQ4STYJuFYo9BamZegComIiJSfxSAxF+bRHOdd973KLzNaqFjVAgAKecVgEREpPlTABJ/jnAIL32R7PmjvuKE6FAAvr1Q9QB0ERGR5kIBSCqqpBusUxszAKVcUAuQiIg0fwpAUlGlAcjsAvv2vFqARESk+VMAkoqiS8cBlQtAZV1gagESEZHmTwFIKqqkBSihtAUoRWOARESkBVAAkooqC0ClLUBp7nwKiksCUSsREZF6owAkFXkDUM4ZyDdnf24bZick2IZhwKkMvRVeRESaNwUgqcgZCWHtze0L5qPwFoulbCC0usFERKSZUwCSylXyVnhvN5gmQxQRkeZOAUgqp4HQIiLSgikASeV8AahsNmjfZIiaC0hERJo5BSCpXKVPgnnHAKkLTEREmjcFIKlcJZMheluANAhaRESaOwUgqZy3BSg7DQpzAEgoDUBnswvJLSwOVM1ERETqTAFIKhfSxlzANw7IFRpMhDMIgJPqBhMRkWZMAUiqFt3NXJ8v9yi8763w6gYTEZHmSwFIqlbNQGjNBSQiIs2ZApBUrZIApEfhRUSkJVAAkqpVMhdQQhs9Ci8iIs2fApBUrZq3wmsMkIiINGcKQFI1bwByn4Qis8Wn7H1gCkAiItJ8KQBJ1UKjweEyty8cA6BjlNkF5s4vJjOvKEAVExERqRsFIKmaxQJt/d8KH+YIom2YHdCM0CIi0nwpAEn1KnsSzNcNpoHQIiLSPCkASfUqfRTe+ySYWoBERKR5UgCS6lX2JJjvpahqARIRkeZJAUiqV9lcQL7ZoNUCJCIizVNAA9DmzZuZMmUK8fHxWCwWVq9eXe3xGzduxGKxVFgOHDjgd9yKFSvo27cvDoeDvn37smrVqgb8Fi2cNwBlpkBxAaD3gYmISPMX0ACUk5PDwIEDWbx48WWdd/DgQVJTU31Ljx49fPu2bdvG9OnTmTFjBrt372bGjBnceeedfPbZZ/Vd/dYhrD3YwwEDLhwHysYApZzPwzCMAFZORESkdoIC+cMnTpzIxIkTL/u8Dh06EBUVVem+Z555hptuuomkpCQAkpKS2LRpE8888wzLli2rS3VbJ4vFbAVK22O+Fb59Tzq2CcFigbyiEs7nFNI23BHoWoqIiFyWZjkGaNCgQcTFxTF27Fg++ugjv33btm1j/PjxfmU333wzW7durfJ6BQUFuN1uv0XKuWggtCPIRkyEE4AUDYQWEZFmqFkFoLi4OF588UVWrFjBypUr6dWrF2PHjmXz5s2+Y9LS0oiJifE7LyYmhrS0tCqvu2jRIlwul29JSEhosO/QLFX6TjANhBYRkeYroF1gl6tXr1706tXL93nEiBGkpKTwxz/+kTFjxvjKLRaL33mGYVQoKy8pKYmFCxf6PrvdboWg8iqdCyiUL45d0EBoERFplppVC1Blhg8fzqFDh3yfY2NjK7T2pKenV2gVKs/hcBAZGem3SDmVzgXknQxRXWAiItL8NPsAtGvXLuLi4nyfR4wYwYYNG/yOWb9+PSNHjmzsqrUcbbqY68xvwVMClH8dhlqARESk+QloF1h2djaHDx/2fT569CjJyclER0fTuXNnkpKSOHnyJK+++ipgPuHVtWtX+vXrR2FhIa+99horVqxgxYoVvms8+OCDjBkzhieeeIJbb72Vd955hw8++ICPP/640b9fixERB9Yg8BRDVhq4OpZ7HYZagEREpPkJaADavn07N9xwg++zdxzOrFmzWLp0KampqZw4ccK3v7CwkIceeoiTJ08SEhJCv379eO+995g0aZLvmJEjR/Lmm2/yi1/8gl/+8pd069aN5cuXM2zYsMb7Yi2N1QaRHSHjOGScAFdH32SIJy/k4fEYWK1Vj7ESERFpaiyGZrKrwO1243K5yMzM1Hggr6WT4dgWuO2vMOBOiks89PrlvynxGHyaNJZYlzPQNRQRkVbucn5/N/sxQNJIojqb6wxzNuggm5X4KO9cQBoHJCIizYsCkNSMq3RagIyyLslOURoILSIizZMCkNSMrwUoxVfknQxRA6FFRKS5UQCSmvEFoLIWIN9b4dUCJCIizYwCkNRMVGkXWOa34PEAkOCdC0hjgEREpJlRAJKaiewIFiuUFEBOOoBvLqCU8+oCExGR5kUBSGrGFgwR8eZ26TggbwtQmjuf4hJPoGomIiJy2RSApOYuehS+fbgDe5CVEo9BamZ+ACsmIiJyeRSApOZ844DMFiCr1VKuG0zjgEREpPlQAJKaq+RJsE6lT4LpUXgREWlOFICk5nyTIZabC8jbAqQnwUREpBlRAJKaq2wuoGjNBSQiIs2PApDUnDcAZaZA6Tt0fWOA1AUmIiLNiAKQ1Jyrk7kuyoXcc0DZbNDfqgtMRESaEQUgqbkgB4THmtul3WDeLrDT7gLyi0oCVTMREZHLogAkl+eicUBtQoMJs9sAOJmhbjAREWkeFIDk8lw0F5DFYvE9Cq+B0CIi0lwoAMnlqfRJMHMgtOYCEhGR5kIBSC5PNZMhai4gERFpLmoVgP7+97/z3nvv+T7/v//3/4iKimLkyJEcP3683ionTZDLG4DKTYZYOhD6W70VXkREmolaBaDHH3+ckBCz22Pbtm0sXryYP/zhD7Rr146f/OQn9VpBaWLKtwBdNBeQHoUXEZHmIqg2J6WkpNC9e3cAVq9eze23387cuXMZNWoU119/fX3WT5oa71xAhVmQnwEhbXxzAWkyRBERaS5q1QIUHh7OuXPmRHjr169n3LhxADidTvLy9EuwRbOHQlh7c7t0HFCn0kHQ53MKySkoDlTNREREaqxWAeimm25izpw5zJkzh6+//ppbbrkFgH379tG1a9f6rJ80RRe9FDXSGYwrJBjQQGgREWkeahWAnn/+eUaMGMGZM2dYsWIFbdu2BWDHjh18//vfr9cKShNU3aPwGggtIiLNQK3GAEVFRbF48eIK5Y899lidKyTNwEWTIYL5TrAvT7rVAiQiIs1CrVqA/v3vf/Pxxx/7Pj///PNcddVV/OAHP+DChQv1VjlpoqK6mGu/FiDvbNBqARIRkaavVgHopz/9KW63G4C9e/fyP//zP0yaNIkjR46wcOHCeq2gNEG+MUDlJ0M0u8DUAiQiIs1BrbrAjh49St++fQFYsWIFkydP5vHHH2fnzp1MmjSpXisoTVBlY4BKH4XX6zBERKQ5qFULkN1uJzfX/Jf+Bx98wPjx4wGIjo72tQxJC+YdA5SfAfnmn3fZIOhcjNIJEkVERJqqWrUAXXvttSxcuJBRo0bx+eefs3z5cgC+/vprOnXqVK8VlCbIEQEhbSDvgjkQ2tnP9z6wrIJiMnKLaBNmD3AlRUREqlarFqDFixcTFBTEP//5T5YsWULHjh0BWLt2LRMmTKjxdTZv3syUKVOIj4/HYrGwevXqao9fuXIlN910E+3btycyMpIRI0awbt06v2OWLl2KxWKpsOTn51/295RqXDQXkDPYRpzLCcCRszmBqpWIiEiN1KoFqHPnzrz77rsVyp9++unLuk5OTg4DBw7khz/8IdOmTbvk8Zs3b+amm27i8ccfJyoqildeeYUpU6bw2WefMWjQIN9xkZGRHDx40O9cp9N5WXWTS4jqDGl7/MYBXdE+jNTMfI6cyWZIlzYBrJyIiEj1ahWAAEpKSli9ejX79+/HYrHQp08fbr31Vmw2W42vMXHiRCZOnFjj45955hm/z48//jjvvPMO//rXv/wCkMViITY2tsbXlVrwDoTOLBeA2oXzyeFzagESEZEmr1YB6PDhw0yaNImTJ0/Sq1cvDMPg66+/JiEhgffee49u3brVdz0r5fF4yMrKIjo62q88OzubLl26UFJSwlVXXcVvfvMbv4B0sYKCAgoKCnyfNZC7Bip5EuyK9mEAfJOeHYgaiYiI1FitxgA98MADdOvWjZSUFHbu3MmuXbs4ceIEiYmJPPDAA/Vdxyo9+eST5OTkcOedd/rKevfuzdKlS1mzZg3Lli3D6XQyatQoDh06VOV1Fi1ahMvl8i0JCQmNUf3mzReAymaD7tY+HNAYIBERafosRi2eWQ4LC+PTTz/lyiuv9CvfvXs3o0aNIjv78lsALBYLq1atYurUqTU6ftmyZcyZM4d33nnH9zb6yng8HgYPHsyYMWN47rnnKj2mshaghIQEMjMziYyMvKzv0Wqk7oG/jIbQdvD/vgHg2wu5XPvERwTbLOz/9QSCbLXK1yIiIrXidrtxuVw1+v1dqy4wh8NBVlZWhfLs7Gzs9oZ//Hn58uXcc889vP3229WGHwCr1crQoUOrbQFyOBw4HI76rmbL5m0Byj0LhTlgDyPeFYIz2Ep+kYdvL+TRtV1YYOsoIiJShVr9E33y5MnMnTuXzz77DMMwMAyDTz/9lHnz5vGd73ynvuvoZ9myZcyePZs33niDW2655ZLHG4ZBcnIycXFxDVqvVickChyl6TrzWwCsVgtd25qh58hZjQMSEZGmq1YB6LnnnqNbt26MGDECp9OJ0+lk5MiRdO/evcKTWtXJzs4mOTmZ5ORkwHzFRnJyMidOmANrk5KSmDlzpu/4ZcuWMXPmTJ588kmGDx9OWloaaWlpZGZm+o557LHHWLduHUeOHCE5OZl77rmH5ORk5s2bV5uvKtWpZCC0bxzQGY0DEhGRpqtWXWBRUVG88847HD58mP3792MYBn379qV79+6XdZ3t27dzww03+D57X6Q6a9Ysli5dSmpqqi8MAfzlL3+huLiY+fPnM3/+fF+593iAjIwM5s6dS1paGi6Xi0GDBrF582auueaa2nxVqY4rAU5/WfmTYApAIiLShNU4AF3qLe8bN270bT/11FM1uub1119f7XujvKGmsp9RlaeffvqyJ2SUWqrmUfgjZ9QFJiIiTVeNA9CuXbtqdJzFYql1ZaSZ8b4UNbPio/BqARIRkaasxgHoo48+ash6SHNUSQtQYumTX2ezC3DnFxHpDA5EzURERKqliVqk9i56ISpAhDOYDhHmlAIaCC0iIk2VApDUXlQXc52dBkX5vmKNAxIRkaZOAUhqLzQagkPNbfdJX/EVehReRESaOAUgqT2Lpdw4oOO+4ivaaTJEERFp2hSApG4qGQekyRBFRKSpUwCSuqlmLqCjZ3Mo8Vz2u3ZFREQanAKQ1I03AJWbC6hTm1DsNisFxR5OZeQFqGIiIiJVUwCSuvFOhliuBchmtdC1nTk4+hs9CSYiIk2QApDUjfdR+HJjgACuaKdxQCIi0nQpAEndeAdBZ52C4kJfsW8uID0JJiIiTZACkNRNeAcIcoLh0VxAIiLSbCgASd1YLODqZG6XGwhdNhu0ApCIiDQ9CkBSd5U8Ct+tdAxQmjuf7ILiQNRKRESkSgpAUneVTIboCg2mXbgdgKNqBRIRkSZGAUjqrpIWICj3JJgGQouISBOjACR1V8lkiFA2DugbtQCJiEgTowAkdVfJC1Gh/EBotQCJiEjTogAkdecdA+Q+BSVlA541GaKIiDRVCkBSdxGxYA0GTzFkpfqKy78U1aOXooqISBOiACR1Z7WBq6O5XW4cUEJ0KEFWC3lFJaS58wNUORERkYoUgKR+VPIkWLDNSpe25ktR1Q0mIiJNiQKQ1A+XNwBd/CSYOQ5Ib4UXEZGmRAFI6oeeBBMRkWZEAUjqRxVzAXXzTYaoLjAREWk6FICkfkR5X4dx0WzQeimqiIg0QQpAUj98LUDfgsfjK/aOATqZkUdeYUkgaiYiIlKBApDUj4h4cy6gkkK/brDoMDtRocGAOR+QiIhIU6AAJPXDFgQd+pjbaXv8dnVrr5eiiohI06IAJPUnbqC5PpXsV3xFO40DEhGRpiWgAWjz5s1MmTKF+Ph4LBYLq1evvuQ5mzZtYsiQITidTq644gr+/Oc/VzhmxYoV9O3bF4fDQd++fVm1alUD1F4q8Aag1N1+xZoLSEREmpqABqCcnBwGDhzI4sWLa3T80aNHmTRpEqNHj2bXrl38/Oc/54EHHmDFihW+Y7Zt28b06dOZMWMGu3fvZsaMGdx555189tlnDfU1xCvuKnOdmgxG2bu/9CSYiIg0NRbDMJrEWyotFgurVq1i6tSpVR7zs5/9jDVr1rB//35f2bx589i9ezfbtm0DYPr06bjdbtauXes7ZsKECbRp04Zly5bVqC5utxuXy0VmZiaRkZG1+0KtUWEuLOoIhgcWHoDIOAAOp2cx7qnNhNltfPnYzVgslgBXVEREWqLL+f3drMYAbdu2jfHjx/uV3XzzzWzfvp2ioqJqj9m6dWuV1y0oKMDtdvstUgv2UGjf29wu1w3WOToMm9VCTmEJ6VkFAaqciIhImWYVgNLS0oiJifEri4mJobi4mLNnz1Z7TFpaWpXXXbRoES6Xy7ckJCTUf+VbC984oGRfkT3ISkKbEEDjgEREpGloVgEIqNB94u3BK19e2THVdbskJSWRmZnpW1JSUqo8Vi6hioHQvkfhNQ5IRESagKBAV+ByxMbGVmjJSU9PJygoiLZt21Z7zMWtQuU5HA4cDkf9V7g1qvJJsDD+c0ABSEREmoZm1QI0YsQINmzY4Fe2fv16rr76aoKDg6s9ZuTIkY1Wz1Yt9kpz7T4J2Wd8xXoUXkREmpKABqDs7GySk5NJTk4GzMfck5OTOXHCfKFmUlISM2fO9B0/b948jh8/zsKFC9m/fz8vv/wyL730Eg899JDvmAcffJD169fzxBNPcODAAZ544gk++OADFixY0JhfrfVyREDb7uZ2WlkrkG8yRM0GLSIiTUBAA9D27dsZNGgQgwYNAmDhwoUMGjSIRx55BIDU1FRfGAJITEzk/fffZ+PGjVx11VX85je/4bnnnmPatGm+Y0aOHMmbb77JK6+8woABA1i6dCnLly9n2LBhjfvlWrNKusG8LUDfXsgjv0gvRRURkcBqMvMANSWaB6iOPnkONvwS+nwHpv8DMAeiD3hsPVn5xaxbMIZesREBrqSIiLQ0LXYeIGkmKmkBslgsvlagIxoHJCIiAaYAJPUvboC5zjgOeRd8xd28r8Q4qyfBREQksBSApP6FtIGoLuZ26h5fcTc9CSYiIk2EApA0jMoGQrfTS1FFRKRpUACShlHNk2DfnMlGY+9FRCSQFICkYcRfZa7LvROsS9tQLBbIyi/mbHZhQKolIiICCkDSUGJLW4DOHYZ8NwDOYBudSl+Keig9K1A1ExERUQCSBhLeHiI7mtunv/QVD+wUBcBnR84HoFIiIiImBSBpOJWMAxrToz0Amw+dqewMERGRRqEAJA2nkgB0bY92AOxOySAztygQtRIREVEAkgZUSQCKjwqhe4dwPAZs/eZsgComIiKtnQKQNBxvADpzAApzfcWjS1uBNh9SABIRkcBQAJKGExEHYR3A8MDpfb7iMT1LxwF9fUbzAYmISEAoAEnDsVjKdYMl+4qHJUZjt1k5mZHHUb0XTEREAkABSBpWJeOAQu1BXN21DQBb1A0mIiIBoAAkDauSAAQwuvRx+C16HF5ERAJAAUgaljcApe+H4gJfsXcg9LZvzlFY7AlEzUREpBVTAJKGFdUZnFHgKYL0r3zFfeMiaRduJ6ewhJ0nLgSufiIi0iopAEnDsljKvRi1rBvMarVwbXezFUjdYCIi0tgUgKThXXIckAZCi4hI41IAkoZXZQAyW4D2nszkfE5hY9dKRERaMQUgaXhxV5nrtC+hpOz9Xx0infSOjcAw4JPDagUSEZHGowAkDa9NItgjoKQAzhz021V+VmgREZHGogAkDc9qhbgB5nYV3WBbDp3VazFERKTRKABJ46hiHNDQrtE4gqykufM5nJ4dgIqJiEhrpAAkjcM7DuiiAOQMtnFNYjSgt8OLiEjjUQCSxuFtAUrbC54Sv13X9dRrMUREpHEpAEnjaNcDgkKgKAfOfeO3yzsf0KdHzpFfVFLZ2SIiIvVKAUgah9UGsVea26nJfrt6xoTTIcJBfpGHHcf1WgwREWl4CkDSeKoYCG2xWHytQJvVDSYiIo1AAUgaTxUBCGBMz9LH4b/WQGgREWl4AQ9AL7zwAomJiTidToYMGcKWLVuqPHb27NlYLJYKS79+/XzHLF26tNJj8vPzG+PrSHXKvxTV4/Hb5X0x6lepbs5kFTRyxUREpLUJaABavnw5CxYs4OGHH2bXrl2MHj2aiRMncuLEiUqPf/bZZ0lNTfUtKSkpREdHc8cdd/gdFxkZ6XdcamoqTqezMb6SVKd9b7DZocANGcf8drUNd9C/YyQAHx9WN5iIiDSsgAagp556invuuYc5c+bQp08fnnnmGRISEliyZEmlx7tcLmJjY33L9u3buXDhAj/84Q/9jrNYLH7HxcbGNsbXkUuxBZd1gx3+T4XdvrfDqxtMREQaWMACUGFhITt27GD8+PF+5ePHj2fr1q01usZLL73EuHHj6NKli195dnY2Xbp0oVOnTkyePJldu3ZVe52CggLcbrffIg2k/zRznfx6hV3e12Js1msxRESkgQUsAJ09e5aSkhJiYmL8ymNiYkhLS7vk+ampqaxdu5Y5c+b4lffu3ZulS5eyZs0ali1bhtPpZNSoURw6dKjKay1atAiXy+VbEhISavel5NKuvAOsQXBqF5z+ym/XkC5tCAm2cTa7gANpWQGqoIiItAYBHwRtsVj8PhuGUaGsMkuXLiUqKoqpU6f6lQ8fPpy7776bgQMHMnr0aN566y169uzJn/70pyqvlZSURGZmpm9JSUmp1XeRGghrBz0nmNu73/Db5QiyMaJbW0BvhxcRkYYVsADUrl07bDZbhdae9PT0Cq1CFzMMg5dffpkZM2Zgt9urPdZqtTJ06NBqW4AcDgeRkZF+izSgq+4y17uXQ0mR367yb4cXERFpKAELQHa7nSFDhrBhwwa/8g0bNjBy5Mhqz920aROHDx/mnnvuueTPMQyD5ORk4uLi6lRfqUc9boLQdpCTXmEwtHcg9OfHzpNXqNdiiIhIwwhoF9jChQv529/+xssvv8z+/fv5yU9+wokTJ5g3bx5gdk3NnDmzwnkvvfQSw4YNo3///hX2PfbYY6xbt44jR46QnJzMPffcQ3Jysu+a0gTYgmHAdHP7osHQ3dqHEe9yUljs4fNj5wNQORERaQ2CAvnDp0+fzrlz5/j1r39Namoq/fv35/333/c91ZWamlphTqDMzExWrFjBs88+W+k1MzIymDt3LmlpabhcLgYNGsTmzZu55pprGvz7yGW46gfw6fNwcC3knofQaMAcE3Zdr/Ys+zyFNz8/4XtTvIiISH2yGHreuAK3243L5SIzM1PjgRrSn0dD2h6Y+AcY9mNf8cG0LCY8uxnDgPcfGE3feP0ZiIjIpV3O7++APwUmrdigu831Rd1gvWIjuOVKc8zWs//5urFrJSIirYACkARO/9vBGmy+GyztS79dC8b1wGKBdftO8+XJzABVUEREWioFIAmcsLbQyzsn0DK/Xd07RHDrwHgAnvlArUAiIlK/FIAksLxzAu2pOCfQA2N7YLXAB/vT2fNtRuPXTUREWiwFIAms7uMgrAPknIFD/nNCXdE+nKmDOgLw9Aa1AomISP1RAJLAsgXDgDvN7UpekPrAjT2wWS18dPAMO09caOTKiYhIS6UAJIF31Q/M9df/hhz/V2B0bRfGbaWtQM98UPXrTERERC6HApAEXkw/iLsKPMWw9+0Ku++/sQdBVgubvz7Dds0OLSIi9UABSJoG72DoSrrBOrcN5Y6rOwHwtJ4IExGReqAAJE3DlbeDzQ5peyF1T4Xd82/oTrDNwieHz/HZkXMBqKCIiLQkCkDSNIRGQ6+J5vZFcwIBdGoTyp1XJwBqBRIRkbpTAJKmo/ycQMWFFXbPv6E7dpuVT4+cZ+s3ZyvsFxERqSkFIGk6uo2F8BjIPQeH1lfYHR8VwvevMVuBntlwCL3HV0REaksBSJoOWxAMmG5uJ79R6SH/fUN37EFWPj92nk8OayyQiIjUjgKQNC3eOYEOrYPsMxV2x0Q6uWtYZwCe2nBQrUAiIlIrCkDStHToA/GDzTmBPn+x0kPuvb4bzmArO09ksOnriiFJRETkUhSApOkZeb+5/vgp87H4i3SIcHL3sC4APLzqS9Kz8huzdiIi0gIoAEnT0++70Huy2Qq0+t4Kb4kHuH9sD65oF8bJjDx+9OoO8gpLAlBRERFprhSApOmxWGDy0xASbbYAbXmywiGukGBenj2UqNBgdqdk8D9vJ+PxaDyQiIjUjAKQNE3hHWDS/5nbm/+v0tmhu7YL48UZVxNss/D+3jT+uP5gI1dSRESaKwUgabr6T4M+U0q7wv670skRr0mM5olpAwB4YeM3vLU9pbFrKSIizZACkDRdFgvc8pTZFXa68q4wgNsGd+KBG7sD8POVezVLtIiIXJICkDRt4R3glj+a21v+WGlXGMBPburJlIHxFHsM5v1jB9+cyW7ESoqISHOjACRNX7/boM93yp4Kq6QrzGKx8H+3D2Bw5yjc+cX819IvOJ9T8TgRERFQAJLmwNsVFtoWTn9ptgRVwhls48WZV9OpTQjHz+Xy439sp6BYj8eLiEhFCkDSPIS3h0nerrAnIXV3pYe1C3fwyuyhRDiC+OLYBf53xV69LkNERCpQAJLmo/9t0PfWap8KA+gRE8ELdw/GZrWwatdJ/rDuoOYIEhERPwpA0rxMerKsK2zz/1V52Oge7fnNrf0BWLLxG3706nYycjUmSERETApA0ryEt4dbSh+H3/IknNpV5aE/GNaZx797JfYgK/85kM4tz31MckpG49RTRESaNAUgaX76fRf6TgWjBF6/o8rxQGCGoJX3jqRzdCgnM/K4489b+fvWYxoXJCLSyikASfM0+WmIHQA5Z+CVW+DolioP7d/RxbsPXMuEfrEUlRj8as0+7lu2i6z8ii9ZFRGR1iHgAeiFF14gMTERp9PJkCFD2LKl6l9kGzduxGKxVFgOHDjgd9yKFSvo27cvDoeDvn37smrVqob+GtLYQqNh9rvQ5VoozILXboP9/6ry8EhnMEvuHswjk/sSZLXw3p5UvrP4E/anuhux0iIi0lQENAAtX76cBQsW8PDDD7Nr1y5Gjx7NxIkTOXHiRLXnHTx4kNTUVN/So0cP375t27Yxffp0ZsyYwe7du5kxYwZ33nknn332WUN/HWlsThfcvQJ6T4aSQnhrJuz4e5WHWywW/uvaRN6aN4J4l5OjZ3OY+vwnvPWF3h8mItLaWIwADoYYNmwYgwcPZsmSJb6yPn36MHXqVBYtWlTh+I0bN3LDDTdw4cIFoqKiKr3m9OnTcbvdrF271lc2YcIE2rRpw7Jly2pUL7fbjcvlIjMzk8jIyMv7UtL4Sorh3QWw6x/m57GPwLULzQkUq3Ahp5CFbyXz0cEzAEy9Kp7/ndiHWJezESosIiIN4XJ+fwesBaiwsJAdO3Ywfvx4v/Lx48ezdevWas8dNGgQcXFxjB07lo8++shv37Zt2ypc8+abb672mgUFBbjdbr9FmhFbEHznT2boAfjPr2Hdw+DxVHlKmzA7L80ayk9v7oXVAquTT3Hd/33Eovf363F5EZFWIGAB6OzZs5SUlBATE+NXHhMTQ1paWqXnxMXF8eKLL7JixQpWrlxJr169GDt2LJs3b/Ydk5aWdlnXBFi0aBEul8u3JCQk1OGbSUBYLDDuV3Dz4+bnT5+H1fOgpOqBzlarhfk3dOef945kaNc2FBR7+MvmI4z+w0cs/vAQuYXFjVR5ERFpbEGBroDlom4KwzAqlHn16tWLXr16+T6PGDGClJQU/vjHPzJmzJhaXRMgKSmJhQsX+j673W6FoOZqxHxzosTV/w17lkNeBtyxFOyhVZ4yuHMb3vrxCDYePMMT/z7AgbQs/rj+a5ZuPc4DY7vzvaGdsQcF/HkBERGpRwH7W71du3bYbLYKLTPp6ekVWnCqM3z4cA4dOuT7HBsbe9nXdDgcREZG+i3SjA38Hnx/GQSFwKF18NJ4OLmj2lMsFgs39O7A+w+M5tnvXUXn6FDOZhfwyDv7GPvURlbt+pYSvU5DRKTFCFgAstvtDBkyhA0bNviVb9iwgZEjR9b4Ort27SIuLs73ecSIERWuuX79+su6prQAPW+GmashpA2c3gt/HQvvPQT5mdWeZrVauPWqjnyw8Dp+M7U/7SMcpJzP4yfLdzPx2c28uu0YmbmaP0hEpLkL6FNgy5cvZ8aMGfz5z39mxIgRvPjii/z1r39l3759dOnShaSkJE6ePMmrr74KwDPPPEPXrl3p168fhYWFvPbaa/z+979nxYoV3HbbbQBs3bqVMWPG8Lvf/Y5bb72Vd955h1/84hd8/PHHDBs2rEb10lNgLUj2GVj/C9jzpvk5PAYmLIJ+t1X7lJhXbmExr3xyjD9v+oasfHNMkD3Iys39Yrnz6k6M6tYOq/XS1xERkYZ3Ob+/AxqAwJwI8Q9/+AOpqan079+fp59+2jeeZ/bs2Rw7doyNGzcC8Ic//IEXX3yRkydPEhISQr9+/UhKSmLSpEl+1/znP//JL37xC44cOUK3bt343e9+5wtINaEA1AId2QTvLYRzh83P3W6ESX+Ett1qdHpmbhErdn7LW9tTOJCW5SvvGBXC7UM6cfuQTiREVz3OSEREGl6zCkBNkQJQC1VcAJ88C5v/CCUFYHPAmIdg1IMQ5KjRJQzD4MuTbt7ansLq5JO+ViGAUd3bcseQBMb26UCEM7ihvoWIiFRBAaiOFIBauHPfwHv/A0dK55Bq2wMmPmG2CtWgW8wrv6iEdfvSeHv7t3x8+KyvPNhmYVhiW27s3YGxfTrQpW1YfX8DERGphAJQHSkAtQKGAV+ugH8nQU66Wda+Dwy9BwZMB+fl/bmnnM9lxc5vWZN8iiNnc/z2dWsfxtg+MdzYuwNDurQh2KZH6kVEGoICUB0pALUieRmw8few81UoKg0u9nDzUfqr74GYvpd9ySNnsvnwQDofHkjn86PnKS73+HykM4gxPdszqns7hnaNplv7sGrnqBIRkZpTAKojBaBWKD8Tdr8JX/wNzn5dVt5lFAydY75wNch+2Zd15xex5euz/OfAaTYePMP5HP/XbLQNs3N11zYM7RrNNYnR9I2LJEgtRCIitaIAVEcKQK2YYcDRzfDFX+HA+2CUmOXhMTBoBvSfBh36XNZYIa8Sj0FySgYbD6bz2dHzJKdkUFjs/76yULuNwZ3NQDSocxT94iNpG16zAdoiIq2dAlAdKQAJAJknYcdSc/GOEwJz0HTf70DfWyF2QK3CEEBBcQl7v83ki2MX+OLYebYfO487v+L7x2IjnfSLj6RffCR941307xhJx6gQdZ2JiFxEAaiOFIDET3EhHPgX7HkLvvkQSsp1Y0V1KQ1DU6HjkFqHIQCPx+Dg6Sy+OHaeL45d4MuTmRy9aEC1lyskmH7xkfSJi6R7h3B6dAine4dwokIvv5tORKSlUACqIwUgqVK+G75eB/vfgUMfQHFe2b7IjtBnClxxA3QeDiFRdf5x2QXF7E918+XJTPadcrPvlJtDp7P8BlaX1y7c4QtDPWLC6d7e3G4f4VCLkYi0eApAdaQAJDVSmAOHNsD+NWYoKswut9MCsVdC19HQdRR0HgGh0fXyYwuKSzh0OpuvTrk5kJbF4TPZHD6dxanM/CrPCbXb6BwdSte2YXRpG0qXtmF0bRtK57ahxLlCsOl1HiLSAigA1ZECkFy2onyze+zrtXDsEzj/zUUHWCCmvxmGuoyCjoPNFqN6bJXJLijmm/RsDqVnczg9m8PpWRxKzyblfC7VvcjebrPSKTqETm1C6RgVQscoJx3bhNAxKpT4KCexkU49mSYizYICUB0pAEmduVPh+Cdw7GNzXf7Rei+nywxFMf3MpUM/8wkzR3i9VqWguIRvL+Rx4lwux87lcPxcLsdL1ykXcikqqf6vAJvVQmykk45RIcS6nMS6nMREOokrXce6nHSIcGiCRxEJOAWgOlIAknqXddoMQsc/gePb4OxB8FR84guANomlgagvtO9lhqK23Wv8vrLLUeIxOJWRx4nzuZy8kMe3GXmcysjj5IU8TmbkkZqZd8mABGZDVrtwB7GRTmIiHbSPcNI+wkH7CAcdStftw821M9hW799DRAQUgOpMAUgaXHGB2Sp0eh+c/hJOf2VuZ6dVfrzFBtFXmIGofW8zFLXvZQaj4JAGq6bHY3Amu4BvSwPR6cx80tz5pJVbn3bnVzkouzKRziDaRzhoG+agbbjdXLzbpet24XaiwxxEhQRj1fgkEakhBaA6UgCSgMk5WxqK9sGZA+aSfgAKMqs+JyLOfBy/TVdoU7r2fo6IA2vDdk15PAbncgo57c4nNTOf9Kx8zmQVcCargPTStXcpLPFc+oLlWC0QFWonOqx0CbUTHW6nbZidNqFmeHKFBBMVaicqJJio0GAinMEa1C3SSikA1ZECkDQphgFZaaWB6CCc2W+u0/dDfkb159rs4EoAVydziewIro4QWfrZ1REcEY30NQzcecWkZ+VzNruQczkFnMsu5FxOIeeyvdvm+mx2QaWTQtaExQKRzuDSYBTsF5AqlIUG+8ojQ4LVPSfSzCkA1ZECkDQLhgF5F+DCsbIl43jp9nHITKl6nFF5DpcZhMJjzCUipmy7fJkjsl6fWruUwmIPGblmQLqQU7rOLeRcdiHncwo5n1vI+exCMvOKyMwrIiO3kJzCkjr9TLvNSmRIEJHOYCKcQUSGlK6dZevyZb7tkGAinUGE2YPUZScSQApAdaQAJC1CSTFknTLDkPskZH5bts48Ce5vzZfA1lSQE8I6QFi70qV9uXXpdmi7snWws+G+WxUKiz2484vIyC0iM6+QjNwiLuQW+UJSZm4hGXnm/oxynzPziqiPvwktFgh3BBHhCCLMEUS4M4hwh7mEOcq2w53m54hy+yKc/sc4g62avFLkMl3O7++gRqqTiDQ2WxBEdTaXqhRklYahk5Cdbg7Czk6H7NPmk2vZp83PBZlQnA+ZJ8ylJuzhENq2NBC1LQ1HpevQaHBGmVMBhJSunVFmK1MdxizZg6y0C3fQ7jJfIOvxGGQXFuPOKyIr31y784vJyi8qK8svwp1XTFZB2THlywtLPGZvZX4xWbXsvivPZrUQZrcR5ggi1G4j3BFEqD2IMIetdB1EmN1GqCOIcF+ZuQ4vPcd7bpg9iBC7DUeQQpWIlwKQSGvmiIAOvc2lOoW55gthc85CzpnS5Wwln89A7lmz660w21wyjl9GhSzgjCwLRE6XGYqcLrO80m1XueMjwRZ82bfBarWYXVrOyz/XK7+oBHe+GYpyCorJzi8mu8BccgqKySot827nFHj3l5CdX0ROQYl5bGExhmFOUeDOL671WKhKv6cFQkvDUKjdDEuhpdshwaVljiBCS7dDSkOVuS+IUEfZcSHBttLrBBESbFOLlTQ7CkAicmn2ULB3NZ8suxTDMLvWcs+ZS85ZMxTlnC37nHfBHMCdnwl5peviPKD03PxMoIYtTRcLDvUPRo5IsIeZS3CIub/8dnBo6feLuChQuS6rG88ZbMMZbKNDHceUezwGeUUlvuCUU1BCTmHpdmEJuaXBKbewpLSsmFzfMSUXfTbPKSw2n77zGPhCWUPwhiNnaSAKsdtwBtlKW59spZ/Ncm+AKn+OGc6shASXhTRnkA2n3Yoz2DxWE25KfVEAEpH6ZbGY3VohUdC2W83PKy7wD0TegFTgLv3s9t/2BiVvmfddbEW55pKVWvfvYnOUtTg5XWaLWXBpeLKHlgUob4jyfS6/P6TcuvTcIGeVXX1Wq8Xs3nLU31/PxSUecotKyCssIbewhNzC4nLbJeQVmYHKW5ZTuj+nwNyXU2DuyyksJq+ohPzCEt/1CorLpjbIKyohr6huA9EvJchq8YVNZ7DVF6TMoGQjJLgsLHmPCwm24Qi24gyy+socpduOYCuOIPNa5cu92wpcLZcCkIg0DUEOCO9gLrVRUlwuIF20FOWaL68tyisLSIW5/tuFWeXOcQMGlBSUdv2l1+tXBSqGIntoxW27t7WqtAXLHmqOrfK2YtnDyl2nNFgFh5r3slx3VJDNSqTNWqcuvqqUlLZY5XkDVFEx+UUe8kvDUEHpOq+wrCzfe3y5de5Fn71r7zneQerFHqNBW7EuZrNafMGpLDSVBqZywckbyMwwZR5rD7Li8C1m2LLbrL7Q5bj4ukFW37XtNnUpNjQFIBFpGWxB5uDq0Oi6X8vjMVuUyoeoArc5aNwXnkoDVaXb+WVl3tBVmGsGKi9v+OJc3etbgaVcKCpdB3vDUek62Flun/dYh7nfb3H47/O2aJVu24JDCbc7CK/HFquLGYZBQbGHgiKPXyjyBqn84hLyizx+oansmLJzzGuU+AJaQbG59p5fUFRCfrHH12UIZsDLKSyp8xQLl8tiwRecKrROBfm3XFUIVzYzSPmHsPKfveeb235BLdiG3WYl2GZp8QFMAUhE5GJWa2m3VySQUH/X9ZRU0gqVZ4ali1ukypcVZpe2UuWUlpfuK8z2D1mG95e0US5gNQZLWajyhqMgZ2nIqmTb77PDP2yVX9uCwWLDYrXhtNhwWqy4rDawWMFqA7sNnEHluhlLW8esdZvQ0uMxKCwpDUdFHgqKy0JTfmlI8m4XFHlKA5R/sCosNs8r2zY/+7bLXdd3/eKyli7DoPR6HjLz6uGP6DJZLOa8WOVDkS9klQtO3vBkDzL32S8OVb5gZivXGmYe1ybUzqDObRr/y5VSABIRaSxWGzjCzaUhlBSVBaLivHLhqPznfDMYFZeuy38uzjfHYhXnm+XlPxfnl14nv+yanqLSH2yUtnjl0DAtWpfJZr+o9eviFq/KWr/KWrmsQQ6cpYsvkNlKt0Pspduliy20bNsaVKfJQg3DoKjEIL+4NFgVlVQISf5hzFwXlpQLXEUeCkvKApZ3u3xZQWkIK39OQbHH71U1hoHvOOrxScTyrkqIYvX8UQ1y7ZpQABIRaSlswebibKQJXCsLXIXeMJVnhqei0rXf54vDVRXrkiKz1cwoKV17Src9ZWWeotKwVq6ZpKTQXLiMiT7rhaVcMPKGp4sCk2+fvbSVq6zcYrNjD3JiL3+OLdgMVtZgs5vXGgTBweAMNgO1Nfii1rOQiq1pNQxl3pavi1urylqtylq0vKHLr6WrXNiqLJCZ1y4r696hgf4hUEMKQCIiUjuNHbiqYxjlWqdy/Vu/Lm7xqrQ1LK9c8CqsJJBdvK90bZQfG2SUhbumxBu0bMFm65hv7b9tDbLjtJkLNntZAPOeG+Qod16580Mc5a5VLrT5wputdF0a5Lyfg0MCe1sC+tNFRETqg6XcwG/qYSB8TXlKLgpHpWGppKAsJPltF17e8Z5icykpumi7tHWspMg83q/L8qJBQ00xlAF0GgpzPgjYj1cAEhERqS2rrXR6gtBA16SMYfi3YhXllQal0q7BKrfLLcUXfy4oW3uKyu33nl9Qtl1cWBbWPMVlXZV+n4vNlqkAUgASERFpSSzlxiJJlTTFpYiIiLQ6AQ9AL7zwAomJiTidToYMGcKWLVuqPHblypXcdNNNtG/fnsjISEaMGMG6dev8jlm6dCkWi6XCkp/fBPs/RUREJCACGoCWL1/OggULePjhh9m1axejR49m4sSJnDhR+UsQN2/ezE033cT777/Pjh07uOGGG5gyZQq7du3yOy4yMpLU1FS/xekMbF+jiIiINB0Ww/DOO9n4hg0bxuDBg1myZImvrE+fPkydOpVFixbV6Br9+vVj+vTpPPLII4DZArRgwQIyMjJqXS+3243L5SIzM5PIyCbweKeIiIhc0uX8/g5YC1BhYSE7duxg/PjxfuXjx49n69atNbqGx+MhKyuL6Gj/Rx6zs7Pp0qULnTp1YvLkyRVaiC5WUFCA2+32W0RERKTlClgAOnv2LCUlJcTExPiVx8TEkJaWVqNrPPnkk+Tk5HDnnXf6ynr37s3SpUtZs2YNy5Ytw+l0MmrUKA4dOlTldRYtWoTL5fItCQn1+O4fERERaXICPgj64rfNGoZRozfQLlu2jEcffZTly5fToUMHX/nw4cO5++67GThwIKNHj+att96iZ8+e/OlPf6ryWklJSWRmZvqWlJSU2n8hERERafICNg9Qu3btsNlsFVp70tPTK7QKXWz58uXcc889vP3224wbN67aY61WK0OHDq22BcjhcOBwaL4EERGR1iJgLUB2u50hQ4awYcMGv/INGzYwcuTIKs9btmwZs2fP5o033uCWW2655M8xDIPk5GTi4uLqXGcRERFpGQI6E/TChQuZMWMGV199NSNGjODFF1/kxIkTzJs3DzC7pk6ePMmrr74KmOFn5syZPPvsswwfPtzXehQSEoLL5QLgscceY/jw4fTo0QO3281zzz1HcnIyzz//fGC+pIiIiDQ5AQ1A06dP59y5c/z6178mNTWV/v378/7779OlSxcAUlNT/eYE+stf/kJxcTHz589n/vz5vvJZs2axdOlSADIyMpg7dy5paWm4XC4GDRrE5s2bueaaaxr1u4mIiEjTFdB5gJoqzQMkIiLS/DSLeYBEREREAkUBSERERFqdgI4Baqq8vYKaEVpERKT58P7ersnoHgWgSmRlZQFoRmgREZFmKCsry/d0eFU0CLoSHo+HU6dOERERUaNZqS+H2+0mISGBlJQUDbBuBLrfjUv3u3Hpfjcu3e/GVZv7bRgGWVlZxMfHY7VWP8pHLUCVsFqtdOrUqUF/RmRkpP4HakS6341L97tx6X43Lt3vxnW59/tSLT9eGgQtIiIirY4CkIiIiLQ6CkCNzOFw8Ktf/UovX20kut+NS/e7cel+Ny7d78bV0Pdbg6BFRESk1VELkIiIiLQ6CkAiIiLS6igAiYiISKujACQiIiKtjgJQI3rhhRdITEzE6XQyZMgQtmzZEugqtRibN29mypQpxMfHY7FYWL16td9+wzB49NFHiY+PJyQkhOuvv559+/YFprLN3KJFixg6dCgRERF06NCBqVOncvDgQb9jdL/rz5IlSxgwYIBvMrgRI0awdu1a337d64a1aNEiLBYLCxYs8JXpntefRx99FIvF4rfExsb69jfkvVYAaiTLly9nwYIFPPzww+zatYvRo0czceJETpw4EeiqtQg5OTkMHDiQxYsXV7r/D3/4A0899RSLFy/miy++IDY2lptuusn33jepuU2bNjF//nw+/fRTNmzYQHFxMePHjycnJ8d3jO53/enUqRO///3v2b59O9u3b+fGG2/k1ltv9f0S0L1uOF988QUvvvgiAwYM8CvXPa9f/fr1IzU11bfs3bvXt69B77UhjeKaa64x5s2b51fWu3dv43//938DVKOWCzBWrVrl++zxeIzY2Fjj97//va8sPz/fcLlcxp///OcA1LBlSU9PNwBj06ZNhmHofjeGNm3aGH/72990rxtQVlaW0aNHD2PDhg3GddddZzz44IOGYei/7/r2q1/9yhg4cGCl+xr6XqsFqBEUFhayY8cOxo8f71c+fvx4tm7dGqBatR5Hjx4lLS3N7/47HA6uu+463f96kJmZCUB0dDSg+92QSkpKePPNN8nJyWHEiBG61w1o/vz53HLLLYwbN86vXPe8/h06dIj4+HgSExP53ve+x5EjR4CGv9d6GWojOHv2LCUlJcTExPiVx8TEkJaWFqBatR7ee1zZ/T9+/HggqtRiGIbBwoULufbaa+nfvz+g+90Q9u7dy4gRI8jPzyc8PJxVq1bRt29f3y8B3ev69eabb7Jz506++OKLCvv033f9GjZsGK+++io9e/bk9OnT/Pa3v2XkyJHs27evwe+1AlAjslgsfp8Nw6hQJg1H97/+3XfffezZs4ePP/64wj7d7/rTq1cvkpOTycjIYMWKFcyaNYtNmzb59ute15+UlBQefPBB1q9fj9PprPI43fP6MXHiRN/2lVdeyYgRI+jWrRt///vfGT58ONBw91pdYI2gXbt22Gy2Cq096enpFZKt1D/vEwW6//Xr/vvvZ82aNXz00Ud06tTJV677Xf/sdjvdu3fn6quvZtGiRQwcOJBnn31W97oB7Nixg/T0dIYMGUJQUBBBQUFs2rSJ5557jqCgIN991T1vGGFhYVx55ZUcOnSowf/7VgBqBHa7nSFDhrBhwwa/8g0bNjBy5MgA1ar1SExMJDY21u/+FxYWsmnTJt3/WjAMg/vuu4+VK1fy4YcfkpiY6Ldf97vhGYZBQUGB7nUDGDt2LHv37iU5Odm3XH311dx1110kJydzxRVX6J43oIKCAvbv309cXFzD//dd52HUUiNvvvmmERwcbLz00kvGV199ZSxYsMAICwszjh07FuiqtQhZWVnGrl27jF27dhmA8dRTTxm7du0yjh8/bhiGYfz+9783XC6XsXLlSmPv3r3G97//fSMuLs5wu90Brnnzc++99xoul8vYuHGjkZqa6ltyc3N9x+h+15+kpCRj8+bNxtGjR409e/YYP//5zw2r1WqsX7/eMAzd68ZQ/ikww9A9r0//8z//Y2zcuNE4cuSI8emnnxqTJ082IiIifL8bG/JeKwA1oueff97o0qWLYbfbjcGDB/seG5a6++ijjwygwjJr1izDMMzHKX/1q18ZsbGxhsPhMMaMGWPs3bs3sJVupiq7z4Dxyiuv+I7R/a4///Vf/+X7e6N9+/bG2LFjfeHHMHSvG8PFAUj3vP5Mnz7diIuLM4KDg434+HjjtttuM/bt2+fb35D32mIYhlH3diQRERGR5kNjgERERKTVUQASERGRVkcBSERERFodBSARERFpdRSAREREpNVRABIREZFWRwFIREREWh0FIBEREWl1FIBERKpgsVhYvXp1oKshIg1AAUhEmqTZs2djsVgqLBMmTAh01USkBQgKdAVERKoyYcIEXnnlFb8yh8MRoNqISEuiFiARabIcDgexsbF+S5s2bQCze2rJkiVMnDiRkJAQEhMTefvtt/3O37t3LzfeeCMhISG0bduWuXPnkp2d7XfMyy+/TL9+/XA4HMTFxXHffff57T979izf/e53CQ0NpUePHqxZs8a378KFC9x11120b9+ekJAQevToUSGwiUjTpAAkIs3WL3/5S6ZNm8bu3bu5++67+f73v8/+/fsByM3NZcKECbRp04YvvviCt99+mw8++MAv4CxZsoT58+czd+5c9u7dy5o1a+jevbvfz3jssce488472bNnD5MmTeKuu+7i/Pnzvp//1VdfsXbtWvbv38+SJUto165d490AEam9enmnvIhIPZs1a5Zhs9mMsLAwv+XXv/61YRiGARjz5s3zO2fYsGHGvffeaxiGYbz44otGmzZtjOzsbN/+9957z7BarUZaWpphGIYRHx9vPPzww1XWATB+8Ytf+D5nZ2cbFovFWLt2rWEYhjFlyhTjhz/8Yf18YRFpVBoDJCJN1g033MCSJUv8yqKjo33bI0aM8Ns3YsQIkpOTAdi/fz8DBw4kLCzMt3/UqFF4PB4OHjyIxWLh1KlTjB07tto6DBgwwLcdFhZGREQE6enpANx7771MmzaNnTt3Mn78eKZOncrIkSNr9V1FpHEpAIlIkxUWFlahS+pSLBYLAIZh+LYrOyYkJKRG1wsODq5wrsfjAWDixIkcP36c9957jw8++ICxY8cyf/58/vjHP15WnUWk8WkMkIg0W59++mmFz7179wagb9++JCcnk5OT49v/ySefYLVa6dmzJxEREXTt2pX//Oc/dapD+/btmT17Nq+99hrPPPMML774Yp2uJyKNQy1AItJkFRQUkJaW5lcWFBTkG2j89ttvc/XVV3Pttdfy+uuv8/nnn/PSSy8BcNddd/GrX/2KWbNm8eijj3LmzBnuv/9+ZsyYQUxMDACPPvoo8+bNo0OHDkycOJGsrCw++eQT7r///hrV75FHHmHIkCH069ePgoIC3n33Xfr06VOPd0BEGooCkIg0Wf/+97+Ji4vzK+vVqxcHDhwAzCe03nzzTf77v/+b2NhYXn/9dfr27QtAaGgo69at48EHH2To0KGEhoYybdo0nnrqKd+1Zs2aRX5+Pk8//TQPPfQQ7dq14/bbb69x/ex2O0lJSRw7doyQkBBGjx7Nm2++WQ/fXEQamsUwDCPQlRARuVwWi4VVq1YxderUQFdFRJohjQESERGRVkcBSERERFodjQESkWZJvfciUhdqARIREZFWRwFIREREWh0FIBEREWl1FIBERESk1VEAEhERkVZHAUhERERaHQUgERERaXUUgERERKTV+f9y5raEVXuPCAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot losses \n", + "losses = history.history['loss']\n", + "val_losses = history.history['val_loss']\n", + "\n", + "plt.plot(losses)\n", + "plt.plot(val_losses)\n", + "plt.xlabel('Epochs')\n", + "plt.ylabel('loss')\n", + "\n", + "plt.legend(['loss','val_loss'])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "0db70e62-8983-4bc6-bbe2-52d6fbbf68c1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2894\n", + "test loss 0.28942954540252686\n", + "\u001b[1m313/313\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step\n" + ] + }, + { + "data": { + "image/png": "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pXXr1hnqU3aybt06KVy4sOzdu1eqVasmkZGREhcXJz179pTk5OQMb9ff43oziYmJUqxYsZt+AMSNkpKSZNu2bVKpUqUMb8PtcZ05c6bkz59fOnTokOltZQdJSUmycOFCady4sZQtWzbD2/HnuN7qXLFjx44M9zM7CcWxReaF6rjy2SnzQu0cy3tx+mWV7zoifxyzaWlpkpycLMuXL5dx48bJ448/LqVLl87Q9lwR5CuutG3btqnnn39eLVmyRK1bt069//77qmLFiipnzpxq+fLlftnHmTNn1Pvvv6+aNWumIiMjVYECBVSXLl3UihUrVFpa2i1f/9xzzykRUfnz51fdunVTX375pZozZ44qU6aMKlq0qDp+/Lhf+hmO2rdvr+rUqaOXx/hjqZ2JsQ28atWqqfLly1uX2aempqpy5copEVFz587N9D4yO65KKTV58mRVqFAh9csvvyillJo1axaXi3tRoUIFFR0drfLly6dGjhypEhMT1ZgxY1SePHlU3bp1b7rELb38Ma5O7733nhIRNXHixEz3L7vo1KmTioyMvOGy+4zy97ju2bNHiYh67rnn/NK/7GDq1KlKRNS8efP8ts3Mjmu/fv1Ujhw51KFDh6zHO3furEREPfvss37razgLxbF1Yqld+oXquPLZKfNC7RzLe3H6ZZXvOkopNW/ePCUi+t8zzzyjUlNTM90/fwqZiaebOXPmjCpZsqSqUqWK1+ddu3ZNpaamWv9u5eTJk2rq1KmqQYMGKiIiQsXFxd1yDWSPHj2UiKiEhATr8W+//VaJiBo0aNCtf6hsaOHChSp37tzq+++/14/5OvHE2IaumTNnKhFRvXr1UkePHlWHDx9W3bp1Uzlz5lQioj755BOPrw3UuB48eFDFxsaqGTNm6Mf48OTdXXfdpUREjRo1ynp8woQJSkTUqlWrPL42UOPq9O9//1vlzp1bPfroo36ZGMsOXn31VSUiavLkybd8brDGdcCAARyr6VSjRg1VpEgRn+qcBWpcd+/eraKiolS9evXUrl271O+//66mTJmicufOrURE9ezZ0+efLzsLxbF1YuIp/UJxXPnslHmheI7lvTj9ssJ3netOnz6ttmzZolavXq1GjBih8ufPr1q3bm1NmgVbyC21MxUsWFBatmwpO3bskIsXL3p83tq1ayVXrlzWv4MHD3rddnJyspw9e1aS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Tz/9ZLXLlSunY2ftLH+c18yafSIiH330kdW+9957dWx+Pha5sbZcMFHjCQAAAAAAAEHDxBMAAAAAAABcERnMnefOndtqm7cTNC/PFhEZOXKkjr/88kuf9+FcXmdy3koWgffXv/5Vx+bSOqeUlJRAdMejqKgoq23esvTixYtWbt26dQHpUyhx/n7M9q5duwLdHfhRp06drPZnn33m9304b9f+1ltv6di5tM5cKvLuu+9auUmTJum4fPnyVs55KXO4atCggY7N86aIfVz26dPHys2cOVPHzluw++r333+32rt377bap06d0vGUKVOsnLmEvnr16lbum2++yVB/sqOEhASfn9ujRw8dm+diEZG//e1vOnYeS96Y50YRkcjIoH7MzBaSkpKstq/LnJxL7bwtWQnHZUr+YJ4fnaUVXnrpJR3fddddVs5chmcucxYROX78uD+7KCI3lhapVauWjps3b27lzHNI2bJlfd6HW0vv4dmiRYustrnsy1wOKxJaS+2yMmeZAn8stXN+j3zttdestjnv4Sw/UadOnUzvP5C44gkAAAAAAACuYOIJAAAAAAAArmDiCQAAAAAAAK4I+OL72NhYHb/88stWzrz1o7NWxNixY3UcyrchhXfm+IuIvPDCCx6fu2TJEh1Pnz7dtT75ok2bNlbbrEH23nvvWTnz9rrZRXx8vNUuUaKEjp23ekboq1y5so6d9UN69erl9/2Z9f1ERGrWrKnjTz/91Mo9+eSTOr527ZqVO3funI4vXbpk5VatWpXpfmYFS5cu1bGzdtaQIUN0PHXq1ID16boZM2bo+KmnnrJyZs2RYsWKBaxP4ca87fOtLFu2TMezZs2ycuYt1Z21gJzMuobOmmwIXU2aNLHazlthm3WdnDVZs0vNvFtZsWKFjp01dMx6a87b3rdo0ULHqampVs6ssees92TW6VuwYIHHfhUqVMhqO99vnZ/F/cFZewY283PyY489ZuUaNmyo4zNnzlg5c5w3bNjgcZsi9ria36GQPv369bPa8+fP1/Gbb75p5Xbu3Knj7du3+2X/zvqYf//733U8bdo0K2e+FztrRYUirngCAAAAAACAK5h4AgAAAAAAgCsCvtSubdu2OjZvNSoicvjwYR2bt/IVuXG5B7Kmt99+22p7u03z0KFD3e6Oz7p27RrsLoS0/fv3W23ztsIDBgywcpMnT9bx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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Evaluation on test data \n", + "test_loss = mymodel.evaluate(X_test,y_test)\n", + "print(\"test loss\",test_loss)\n", + "\n", + "test_labels_p = mymodel.predict(X_test)\n", + "test_labels_p = np.argmax(test_labels_p, axis=1 )\n", + "\n", + "n = 0\n", + "\n", + "f,axs = plt.subplots(1,10,figsize = (15,15))\n", + "for i in range(len(test_labels)): \n", + " if n >= 10 :\n", + " break\n", + " if (test_labels_p[i] != test_labels[i]):\n", + " axs[n].imshow(test_images[i],cmap='gray')\n", + " axs[n].set_title(f'{test_labels[i]} -> {test_labels_p[i]}')\n", + " axs[n].axis('off')\n", + " n= n+1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0b9378ab-d1c6-4c6d-80e4-1fbdde35d385", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/Autoencoder-Denoising.md b/docs/Autoencoder-Denoising.md new file mode 100644 index 0000000..9b10906 --- /dev/null +++ b/docs/Autoencoder-Denoising.md @@ -0,0 +1,19 @@ +# Autoencoder Image Denoising โ€” MNIST + +## Setup + +A minimal fully-connected autoencoder: `Input(784) โ†’ Dense(32, relu) โ†’ Dense(784, sigmoid)`. Gaussian noise (factor 0.5) is added to MNIST digits, and the network is trained to reconstruct the *original clean* image from the noisy input โ€” binary crossentropy loss between reconstruction and ground truth. + +## Why a 32-unit bottleneck matters + +Compressing a 784-pixel image down to 32 values and then reconstructing it forces the network to learn which features actually matter for representing a digit, rather than memorizing pixels. If the reconstruction still looks like a recognizable digit after that bottleneck, it's evidence the encoder learned a genuinely useful compressed representation. + +## Result + +![Original, noisy, and denoised digits](images/autoencoder-denoising-result.png) + +Despite the aggressive compression (784 โ†’ 32 โ†’ 784), the reconstructions are clearly recognizable digits โ€” the noise is substantially removed and the core digit shape is preserved. + +## Notebook + +[`encoder-noisy-image.ipynb`](../autoencoder-denoising/encoder-noisy-image.ipynb) diff --git a/docs/CNN-BatchNorm.md b/docs/CNN-BatchNorm.md new file mode 100644 index 0000000..21d18ab --- /dev/null +++ b/docs/CNN-BatchNorm.md @@ -0,0 +1,31 @@ +# CNN BatchNorm Comparison โ€” MNIST + +## Setup + +A baseline CNN (`Conv2D(32) โ†’ Conv2D(64) โ†’ Flatten โ†’ Dense(10, softmax)`) compared against the identical architecture with BatchNormalization inserted after each conv layer. Both models use the same optimizer and learning rate (SGD, lr=0.001) โ€” BatchNorm is the only variable that changed, making this a clean ablation. + +## Training curves + +**Baseline CNN:** + +![Baseline CNN loss curve](images/cnn-baseline-loss.png) + +**CNN + BatchNorm:** + +![BatchNorm CNN loss curve](images/cnn-bn-loss.png) + +The BatchNorm version's curve drops faster and settles lower โ€” visible directly in the training dynamics, not just the final number. + +## Results + +| Model | Test loss | +|---|---| +| Baseline CNN | 0.289 | +| CNN + BatchNorm | 0.094 | + +Since the optimizer and learning rate were held constant, this ~3x reduction in test loss is attributable to BatchNormalization itself โ€” consistent with its known role in stabilizing gradients and accelerating convergence. + +## Notebooks + +- [`conv-pred.ipynb`](../cnn-batchnorm-comparison/conv-pred.ipynb) +- [`conv-pred-BN.ipynb`](../cnn-batchnorm-comparison/conv-pred-BN.ipynb) diff --git a/docs/Home.md b/docs/Home.md new file mode 100644 index 0000000..8b0fa6e --- /dev/null +++ b/docs/Home.md @@ -0,0 +1,9 @@ +# Deep Learning Portfolio โ€” Documentation + +Deep dives into each experiment: architecture, training configuration, and results โ€” illustrated with real plots from the notebooks. + +## Projects + +- [MLP Regularization](MLP-Regularization.md) โ€” Dropout comparison (with an honest note on a confounded variable) +- [CNN BatchNorm Comparison](CNN-BatchNorm.md) โ€” clean ablation, BatchNorm's effect isolated +- [Autoencoder Denoising](Autoencoder-Denoising.md) โ€” noisy-to-clean image reconstruction through a compressed bottleneck diff --git a/docs/MLP-Regularization.md b/docs/MLP-Regularization.md new file mode 100644 index 0000000..7f8a81a --- /dev/null +++ b/docs/MLP-Regularization.md @@ -0,0 +1,41 @@ +# MLP Regularization โ€” MNIST + +## Setup + +A baseline multilayer perceptron (`Dense(500) โ†’ Dense(100) โ†’ Dense(10)`) compared against the same architecture with `Dropout(0.2)` added after each hidden layer. + +## โš ๏ธ Two variables changed, not one + +Before looking at the results: the baseline uses SGD at `lr=0.001`, while the dropout run uses SGD at `lr=0.01` โ€” a 10x higher learning rate, in addition to Dropout being added. This means the comparison below shows what happened between two different configurations, not the isolated effect of Dropout. A rigorous ablation would hold the learning rate constant. This is flagged directly rather than presenting a confounded result as clean evidence for Dropout's effect. + +## Training curves + +**Baseline:** + +![Baseline loss curve](images/mlp-baseline-loss.png) + +**With Dropout (and higher learning rate):** + +![Dropout loss curve](images/mlp-dropout-loss.png) + +## Where each model gets it wrong + +**Baseline misclassifications:** + +![Baseline misclassified digits](images/mlp-baseline-misclassified.png) + +**Dropout version misclassifications:** + +![Dropout misclassified digits](images/mlp-dropout-misclassified.png) + +## Results + +| Model | Test loss | +|---|---| +| Baseline (no dropout, lr=0.001) | 0.279 | +| Dropout (0.2, lr=0.01) | 0.099 | + +## Notebooks + +- [`mnist-mlp-pred.ipynb`](../mnist-mlp-regularization/mnist-mlp-pred.ipynb) +- [`mnist-mlp-pred-dropout.ipynb`](../mnist-mlp-regularization/mnist-mlp-pred-dropout.ipynb) diff --git a/docs/images/autoencoder-denoising-result.png b/docs/images/autoencoder-denoising-result.png new file mode 100644 index 0000000..877e941 Binary files /dev/null and b/docs/images/autoencoder-denoising-result.png differ diff --git a/docs/images/cnn-baseline-loss.png b/docs/images/cnn-baseline-loss.png new file mode 100644 index 0000000..87892d6 Binary files /dev/null and b/docs/images/cnn-baseline-loss.png differ diff --git a/docs/images/cnn-bn-loss.png b/docs/images/cnn-bn-loss.png new file mode 100644 index 0000000..1e3d3a5 Binary files /dev/null and b/docs/images/cnn-bn-loss.png differ diff --git a/docs/images/mlp-baseline-loss.png b/docs/images/mlp-baseline-loss.png new file mode 100644 index 0000000..4216a21 Binary files /dev/null and b/docs/images/mlp-baseline-loss.png differ diff --git a/docs/images/mlp-baseline-misclassified.png b/docs/images/mlp-baseline-misclassified.png new file mode 100644 index 0000000..ed050c2 Binary files /dev/null and b/docs/images/mlp-baseline-misclassified.png differ diff --git a/docs/images/mlp-dropout-loss.png b/docs/images/mlp-dropout-loss.png new file mode 100644 index 0000000..92f6683 Binary files /dev/null and b/docs/images/mlp-dropout-loss.png differ diff --git a/docs/images/mlp-dropout-misclassified.png b/docs/images/mlp-dropout-misclassified.png new file mode 100644 index 0000000..7274834 Binary files /dev/null and b/docs/images/mlp-dropout-misclassified.png differ diff --git a/mnist-mlp-regularization/README.md b/mnist-mlp-regularization/README.md new file mode 100644 index 0000000..8ca235e --- /dev/null +++ b/mnist-mlp-regularization/README.md @@ -0,0 +1,40 @@ +# MLP Regularization โ€” MNIST + +Comparing a baseline multilayer perceptron against a Dropout-regularized version on MNIST digit classification. + +## Architecture + +Both models share the same base architecture: + +``` +Dense(500, relu) โ†’ Dense(100, relu) โ†’ Dense(10, softmax) +``` + +The dropout version adds `Dropout(0.2)` after each hidden layer. + +## โš ๏ธ Honest note on this comparison + +This is **not a clean ablation** โ€” two things changed between the baseline and dropout runs, not one: + +| | Baseline | Dropout version | +|---|---|---| +| Dropout | None | 0.2 after each hidden layer | +| Optimizer | SGD, lr=0.001 | SGD, lr=0.01 | + +The learning rate is 10x higher in the dropout run. That means the test loss improvement below **can't be attributed to Dropout alone** โ€” the higher learning rate is a confound. Both notebooks are included as-is because they reflect real experimentation, but the results should be read as "these two configurations produced these two outcomes," not as proof that Dropout alone caused the improvement. A clean ablation would hold the learning rate fixed and vary only Dropout. + +## Results + +| Model | Test loss (categorical crossentropy) | +|---|---| +| Baseline (no dropout, lr=0.001) | 0.279 | +| Dropout (0.2, lr=0.01) | 0.099 | + +## Tech stack + +TensorFlow / Keras, NumPy, matplotlib + +## Notebooks + +- [`mnist-mlp-pred.ipynb`](mnist-mlp-pred.ipynb) โ€” baseline +- [`mnist-mlp-pred-dropout.ipynb`](mnist-mlp-pred-dropout.ipynb) โ€” with Dropout diff --git a/mnist-mlp-regularization/mnist-mlp-pred-dropout.ipynb b/mnist-mlp-regularization/mnist-mlp-pred-dropout.ipynb new file mode 100644 index 0000000..3b0a270 --- /dev/null +++ b/mnist-mlp-regularization/mnist-mlp-pred-dropout.ipynb @@ -0,0 +1,443 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 15, + "id": "fe7570b6-1e0d-480f-b6cc-17868ec7ea43", + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras import datasets,utils,models,layers,optimizers,losses\n", + "import numpy as np \n", + "import matplotlib.pyplot as plt " + ] + }, + { + "cell_type": "markdown", + "id": "bf9f047c-ffaf-4cf8-973f-21b8f0bcba83", + "metadata": {}, + "source": [ + "# data preparation " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "91befa7a-0369-41c5-a042-e0256b97b76a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n", + "[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n" + ] + } + ], + "source": [ + "(train_images , train_labels), (test_images,test_labels ) = datasets.mnist.load_data()\n", + "\n", + "# preprocessing\n", + "X_train = train_images.reshape(60000,784)\n", + "X_test = test_images.reshape(10000,784)\n", + "\n", + "# Normalizing (0,1 )\n", + "X_train = X_train.astype('float') / 255\n", + "X_test = X_test.astype('float') / 255\n", + "\n", + "y_train = utils.to_categorical(train_labels)\n", + "y_test = utils.to_categorical(test_labels) \n", + "\n", + "print(train_labels[0])\n", + "print(y_train[0])\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "3c80e2f2-1805-4dcb-918d-f7ab72f95a38", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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bc12NY4dEsrLy9Nsj2+1G0/t2bOnXLXiHxXdgOjnn3/WbF8PuLMbDp17VkBUVJTmX375RXN5VpsdOnRIsz3X4OKLL9Zsz3RZtWpVOSv2DfQQAAAAGgQAAMCPhgys3bt3a77rrrs09+3bV7NdifDQQw9pbt26teYePXp4q0SfZLt+7SxdEZHff/9dsz1e2tvsmQr2HAtr3bp1bpefeuopb5ZUreymKfv379d84403VvixcnNzNa9cuVLz999/r3nbtm0VftyzRo0apdl2u9pubFSM3TO/PKtlSlt9AHd2U6xzNxxavXq1Zruax65as2cNpKamaj569KjmJUuWaLZDBvb62oYeAgAAQIMAAAD46ZCBZbuO0tLSNM+fP1+z3VglPj5ec0JCguYNGzZ4pb7awm5E4+3Nm+wwweTJkzU/8cQTmu0s95SUFLf7FxUVebE673n55ZedLuG87Codqzyz4/Evu4KntDMhLNt9vXfvXm+U5Nfshloi7sNdFWX/fbj55ps12+Ge2jyERg8BAACgQQAAAPx0yMBu0DJw4EDNnTt31myHCSy7WcumTZu8UF3t5O3NiGw3qh0aGDx4sGbbdTpgwACv1oPys5uCoWxr167V3LhxY4+3satB7DktcJZdiVXa5misMgAAALUaDQIAAFC7hwxiYmI0jx07VnP//v01N2vWrMzH+fvvvzXbGfT+eKzu+dj9720Wcd/cY/z48dXyfI899pjmZ555RnOjRo00L1y4UPPw4cOr5XkBJzVp0kRzaZ8xc+bM0VxbV834ozVr1jhdglfRQwAAAGgQAACAWjJkYLv9hwwZotkOE9hjRMvDHvFqjzz2haN9nWJnyp57FKh9DWbNmqXZHpubn5+v+frrr9c8bNgwzddcc43m5s2ba7b78NtuOdt1Ct9hh5TatGmjuSpnJfgze3ZKnTpl/z9s69at3iwHlZSYmOh0CV5FDwEAAKBBAAAAfGzI4KKLLtLctm1bza+99prmK6+8skKPafexnjFjhma7yU2grSaojODgYM32yF67QdDx48c122OkS2O7RdevX6/52WefrXSdqBl2SKk8XeCByG62deutt2q2nzenTp3S/Prrr2vOy8vzbnGolMsvv9zpEryKdzIAAKBBAAAAaBAAAABxYA5BZGSk5rlz57p9z465VXSsxo5Hp6SkaLZL2EpKSir0mIEmKytLc3Z2ttv37MFQll2OaOeAWHY5oj34o7p2PISzbrjhBs2pqanOFeJjIiIiNJe2Y+rBgwc1T5gwwdsloYo+//xzzXbujL/MQ6OHAAAA0CAAAABeHDLo0qWLZnu+/XXXXaf5kksuqfDjnjhxQrPdMW/q1Kmai4uLK/y4EDlw4IBme0CUiMhDDz2kefLkyWU+1syZMzW/8cYbmn/88ceqlAgfce7hV0Ag2L17t+Z9+/ZptkPcV1xxheY//vijZgqrJvQQAAAAGgQAAMCLQwZJSUke8/nk5ORoXr16tebTp09rtisICgoKqlAhzufw4cNul6dMmeIxI3BkZmZqHjRokIOV1A579uzRbFdBde3a1YlyUM3sMPX8+fM128Pyxo0bp9n+++ar6CEAAAA0CAAAgEiQ69yD70u7IbOKvaKcv/7z4rXxjqq+Nrwu3sF7xncF0nsmPDxc87JlyzTbg6zef/99zSNGjNBc0yvhyvu60EMAAABoEAAAAIYMHEf3p+8KpO7P2oT3jO8K1PeMHT6wqwxGjx6tOTY2VnNNrzhgyAAAAJQbDQIAAMCQgdPo/vRdgdr96et4z/gu3jO+iSEDAABQbjQIAABA+YcMAACA/6KHAAAA0CAAAAA0CAAAgNAgAAAAQoMAAAAIDQIAACA0CAAAgNAgAAAAQoMAAACIyP8AD/Odvxg/M/kAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#visualize Sample Traning Data \n", + "for i in range(5):\n", + " plt.subplot(1,5,i+1)\n", + " plt.imshow(train_images[i],cmap='gray')\n", + " plt.title(train_labels[i])\n", + " plt.axis('off')" + ] + }, + { + "cell_type": "markdown", + "id": "5e6329a7-76c8-4851-944d-63c83046a8cc", + "metadata": {}, + "source": [ + "# model creation" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "d538ccae-1104-4be7-ae82-abff974847d3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_2\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_2\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“\n",
+       "โ”ƒ Layer (type)                         โ”ƒ Output Shape                โ”ƒ         Param # โ”ƒ\n",
+       "โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ\n",
+       "โ”‚ dense_6 (Dense)                      โ”‚ (None, 500)                 โ”‚         392,500 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ dropout_2 (Dropout)                  โ”‚ (None, 500)                 โ”‚               0 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ dense_7 (Dense)                      โ”‚ (None, 100)                 โ”‚          50,100 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ dropout_3 (Dropout)                  โ”‚ (None, 100)                 โ”‚               0 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ dense_8 (Dense)                      โ”‚ (None, 10)                  โ”‚           1,010 โ”‚\n",
+       "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n",
+       "
\n" + ], + "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_6 (\u001b[38;5;33mDense\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m500\u001b[0m) โ”‚ \u001b[38;5;34m392,500\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ dropout_2 (\u001b[38;5;33mDropout\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m500\u001b[0m) โ”‚ \u001b[38;5;34m0\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ dense_7 (\u001b[38;5;33mDense\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m100\u001b[0m) โ”‚ \u001b[38;5;34m50,100\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ dropout_3 (\u001b[38;5;33mDropout\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m100\u001b[0m) โ”‚ \u001b[38;5;34m0\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ dense_8 (\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" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 443,610 (1.69 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m443,610\u001b[0m (1.69 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 443,610 (1.69 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m443,610\u001b[0m (1.69 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mymodel = models.Sequential()\n", + "mymodel.add(layers.Dense(500 , activation='relu' , input_shape = (784,) ))\n", + "mymodel.add(layers.Dropout(0.2))\n", + "mymodel.add(layers.Dense(100 , activation='relu' ))\n", + "mymodel.add(layers.Dropout(0.2))\n", + "mymodel.add(layers.Dense(10 , activation='softmax' ))\n", + "\n", + "mymodel.summary()\n", + "mymodel.compile(optimizer=optimizers.SGD(learning_rate=0.01),loss=losses.categorical_crossentropy)\n" + ] + }, + { + "cell_type": "markdown", + "id": "4814a7a9-0acd-41d4-8802-400735eb72c3", + "metadata": {}, + "source": [ + "# Train and Evaluation" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "630c5c9b-85b0-4cc0-aa27-aaa405d6338c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - loss: 1.3166 - val_loss: 0.6008\n", + "Epoch 2/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.6291 - val_loss: 0.4087\n", + "Epoch 3/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 6ms/step - loss: 0.4950 - val_loss: 0.3429\n", + "Epoch 4/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - loss: 0.4320 - val_loss: 0.3075\n", + "Epoch 5/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3911 - val_loss: 0.2837\n", + "Epoch 6/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3633 - val_loss: 0.2659\n", + "Epoch 7/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3384 - val_loss: 0.2510\n", + "Epoch 8/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 5ms/step - loss: 0.3214 - val_loss: 0.2400\n", + "Epoch 9/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3052 - val_loss: 0.2280\n", + "Epoch 10/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.2930 - val_loss: 0.2189\n", + "Epoch 11/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.2809 - val_loss: 0.2110\n", + "Epoch 12/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.2669 - val_loss: 0.2038\n", + "Epoch 13/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - loss: 0.2608 - val_loss: 0.1968\n", + "Epoch 14/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.2494 - val_loss: 0.1903\n", + "Epoch 15/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.2411 - val_loss: 0.1842\n", + "Epoch 16/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.2331 - val_loss: 0.1792\n", + "Epoch 17/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - loss: 0.2265 - val_loss: 0.1734\n", + "Epoch 18/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.2165 - val_loss: 0.1688\n", + "Epoch 19/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - loss: 0.2118 - val_loss: 0.1647\n", + "Epoch 20/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.2052 - val_loss: 0.1609\n", + "Epoch 21/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1994 - val_loss: 0.1569\n", + "Epoch 22/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1958 - val_loss: 0.1537\n", + "Epoch 23/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1899 - val_loss: 0.1504\n", + "Epoch 24/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1858 - val_loss: 0.1475\n", + "Epoch 25/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1806 - val_loss: 0.1449\n", + "Epoch 26/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1784 - val_loss: 0.1422\n", + "Epoch 27/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1728 - val_loss: 0.1390\n", + "Epoch 28/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - loss: 0.1699 - val_loss: 0.1367\n", + "Epoch 29/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1675 - val_loss: 0.1350\n", + "Epoch 30/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1627 - val_loss: 0.1324\n", + "Epoch 31/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1591 - val_loss: 0.1302\n", + "Epoch 32/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1549 - val_loss: 0.1282\n", + "Epoch 33/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1527 - val_loss: 0.1267\n", + "Epoch 34/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1499 - val_loss: 0.1244\n", + "Epoch 35/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1481 - val_loss: 0.1229\n", + "Epoch 36/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1425 - val_loss: 0.1213\n", + "Epoch 37/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1411 - val_loss: 0.1196\n", + "Epoch 38/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1396 - val_loss: 0.1177\n", + "Epoch 39/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1362 - val_loss: 0.1164\n", + "Epoch 40/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1340 - val_loss: 0.1150\n", + "Epoch 41/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1342 - val_loss: 0.1136\n", + "Epoch 42/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1298 - val_loss: 0.1135\n", + "Epoch 43/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - loss: 0.1263 - val_loss: 0.1114\n", + "Epoch 44/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1256 - val_loss: 0.1102\n", + "Epoch 45/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1242 - val_loss: 0.1094\n", + "Epoch 46/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1218 - val_loss: 0.1082\n", + "Epoch 47/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1194 - val_loss: 0.1071\n", + "Epoch 48/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1181 - val_loss: 0.1062\n", + "Epoch 49/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1147 - val_loss: 0.1048\n", + "Epoch 50/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.1152 - val_loss: 0.1041\n" + ] + } + ], + "source": [ + "history = mymodel.fit(X_train,y_train,batch_size=128,epochs=50,validation_split=0.2)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "5faabfcd-bd9c-4db2-870e-ac838ff72265", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot losses \n", + "losses = history.history['loss']\n", + "val_losses = history.history['val_loss']\n", + "\n", + "plt.plot(losses)\n", + "plt.plot(val_losses)\n", + "plt.xlabel('Epochs')\n", + "plt.ylabel('loss')\n", + "\n", + "plt.legend(['loss','val_loss'])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "ef70d735-63a6-4b11-b659-263f9030acd7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.0991\n", + "test loss 0.09906331449747086\n", + "\u001b[1m313/313\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step\n" + ] + }, + { + "data": { + "image/png": "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t0fNUuPRJtrfh03vv/++bN26VR599NE8vS6eRfNnJxNjmz/R9H3HlwYNGoiIyE8//RT0NmIV59j40qBBA3nxxRdl/fr1uui+K9LHayB/e2EX/pusArdz506VkZGh6tSpE/Q29u7dq5577jnVqFEjlZCQoMqUKaN69+6tcnJy8nyr6K5du1SxYsVUq1atrMe//vprJSLq8ccfD7qfse6xxx4L+VzTUI7tF198oXJzc61/gwYNUiKiXnzxRfXpp5+GrN+xbMOGDapkyZJqwIABQW8jlOM6cuRIJSJq6dKl1uM//vijEpF89TMWHTp06JTjIDc3V7Vp00YlJyer3Nxc9d133wW17VCOq1JKZWdnq+TkZNWyZUt16NChoPoUT7Kzs5WIqNGjR1uPP/3000pEgn6PC+W47tixQyUnJ6t+/fpZj48ZM4alnvMg2t6HTe3bt1fJyclq586dQW8jnkT7ZycTYxu8aPu+48tfU3vnzZsXku3FEs6x8aV79+6qUKFCQU9jC8fx2q5dO1WkSBG1bdu2kGwvFKLmwlOXLl3UoEGD1Ny5c1Vubq6aPHmyOu+881RiYqLfebFnkpubq4oVK6ZuueUWtWDBAnX06NF89fOpp55SIqJuv/12tXDhQvXqq6+qypUrq8zMTIoV+/DX7+yaa65RX3zxxSn/ghXqsXVR48m/7777To0YMUK9//77atGiReqpp55S6enpqn79+mrfvn1BbzeU4/rbb7+pUqVKqYyMDDVp0iSVk5Ojpk6dqqpXr66KFy+u1q5dG/S240koiouHclw//fRTlZKSoqpWrapycnJOeU/Zs2dPvvoaqzp06KCSkpLU448/rhYtWqTGjBmjkpOTVVZWVtDbDPX78KhRo1RCQoIaMmSIWrx4sXryySdVUlKS6t27d762G6sKwvvwXzZt2qQKFy6sunbtmu9txYOC9NmJsQ1cQfi+8+KLL6pu3bqp6dOnq5ycHPXee++phx56SKWkpKiGDRtSYNwHzrGxp3fv3urBBx9Uc+bMUYsXL1bz5s1TnTt3ViKi/v73vwe93VCO67hx49Qdd9yhZs6cqXJzc9WcOXNU69atlYioESNGBL1dL0TNhacxY8aoOnXqqJIlS6rChQurcuXKqeuvv1599dVX+drunj171P79+0PUy/+aMmWKql27tipatKgqW7as6tatm/r9999D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zNuDv/32Wyv373//W8fuFJ8VK1bo2Jzah4LN/Ps0l3Z2meca5I87xcb08ssvh7EnyI877rjDapufsw4ePGjlpk2bFo4uIQqsWrUq0l0osMwl6t2pdmlpaTp230PD8XnTLFvQr18/K3fbbbfp+I8//rByM2bM0PH69es96h18caevu+1HH31Ux+73ndKlS+u4UqVKVu7NN9/UsXkdRcT+TD5hwgQrx1Q7AAAAAAAAFDhceAIAAAAAAIAnuPAEAAAAAAAAT4S9xtOJEyd0vHz5citXs2ZNn69r0aKFjt16JObSlpdddlk+e3h65pxet94PbO64mnOH3eUk58+fr2NzaUcRkc2bN+u4Y8eOPnP5YdYNMus9idj1YmbPnm3lbr75Zh0fOnQoJH2JF/7mufur4xQqF1xwgY4XL17s+f4Kgho1aljtQOs6vfbaa1b7ueee8/nczp0767hMmTJWzq2TYC7n69Z+Q/D+9a9/6dg8b4rYy/d269bNypk1fXbt2uVN5/yoVauWjt0lgffv36/jp59+Omx9ijVly5a12n369PH5XGppRTezVqK5hLrLrOUnIvLGG2941if41rRpU5+5Tz75JCT76N27t9UePHiwjs3vN65w1NQtaNzPK6ZLL71Ux9OnT7dyXbp00fHOnTuD2vfFF19stTt16mS1H3roIR2b53sRkeHDh+t4yZIlVo66TgWH+53TbFevXt3KmbW83BpPkcI7CgAAAAAAADzBhScAAAAAAAB4IuxT7YJlLqHtqlOnjo7dqXbHjx/X8SuvvGLlpkyZYrUHDBig465duwbRS5zOuHHjdNykSRMrZ06vdJf+NKfhhWNpdHeal3kLqzu1YOnSpTpu0KCBlTty5IgHvYs+5cuX1/Fnn31m5cwplS+88IKV+/XXXz3t15m8/fbbEd1/NDJvzz6T//u//9OxucSriD2V2lWuXDkdu7eqz5w502r36NEj4P4gcKtXr9bxW2+9ZeXMc94//vEPK9erVy8dP//881bupZde0rF5vs2rxMT/fRwxpwqJiMyZM8fn6+bOnavjNWvWBL3/eGcenyIiVatW9fncPXv2eNwb5IU7VWrIkCE6Ll68uM/Xvffee571Cf5VrFhRx24JCnMalPk560zMkhTu9L2zzjrLahcuXFjH7vl45cqVOr722mutnL9SCfHil19+0bH7vpmWlqbjli1bWjmzZMfdd99t5Z588kkdu+c/U4kSJay2W96gbt26OjanWYkEP70P9mcgd9rq999/r+OePXt6sv+rrrpKx8nJyVburrvu0rFZlkjE/nv0x/yb9hp3PAEAAAAAAMATXHgCAAAAAACAJ7jwBAAAAAAAAE8UmBpP/nz00Uc6Hj16tJUz60a48zLdebTNmjULaH8bN27MYw/jm7nc9TXXXGPlTp48qeOjR4+GrU+ByM7O1rFbO2zFihU6fv/9961cmzZtdGz+fLFmx44dOjaXWxcRGTNmjI7dOcZjx47VcaTrPcUzc/n05s2b+3yee1yatYA2bNgQ8P4yMjJ07NZBM2sfiMT2cRMtxo8f7zN3ww03WO0aNWro2K0pccUVV+h4+/btAe8/JyfHat988806dmssmrUp7r//fr/bQWiYdYP8LR+OyLvxxhut9m233ebzua+++qqOly9f7lWXcAZmjaXU1FQr1759ex23a9cuqO27db/cY3jfvn06HjRokJUza3+5dYJgnw+nTZtm5czvO+a5UcSuv/Pjjz8GvD+zduKECROsnFv/2Kw3hOClp6dbbbNuXpUqVaycWavYrM8m4r/upPld0a3J5h6vZo2nokWL+txmXhw8eFDHrVq1Csk2A8EdTwAAAAAAAPAEF54AAAAAAADgiQQV4D3U7m2b0SQlJUXH7m2P5u37eeEuC/7BBx/o+NZbb7VyBw4cCGofwQrlbe/RPK7RrEuXLjp2l4J/4IEHdOxOS/GnII+rOW1LROTzzz/XsXkbqojI2rVrdewuzW7e1v3OO+8EvH9zKVoRkQcffFDHP/zwg5W78sordbx3796A9xGsUE9TCdXYnn322TpetWqVlTOXCHZvwXVv7Q5UhQoVdOwu7Wwu31yQFORj1p/atWtbbXMqhntONaezh4q7ZPfIkSN1PHny5JDvzxWr4+rP+eefb7X9TRGoX7++1TannkezWB3XwYMHW+3HH3/c53PNEhN5mereuXNnqz1nzpyAX+u1aD3H+lOxYkUdu9OjSpQooeNgf7ZNmzZZ7W+++cZqm1O2cnNzg9pHOET7Met+vl2/fr2OMzMzrdyCBQt0bH7+OpNhw4bpeNKkSXntYlSK9nG97rrrrPYbb7yh41BNdTMVKmTfBxRsuYnDhw9bbfM93v2+M2rUKB2b1zjyI5Bx5Y4nAAAAAAAAeIILTwAAAAAAAPAEF54AAAAAAADgiZio8WRya4dMnTpVx25dgvLly1ttcy6kW7dnxIgRoelgCET73Nh4c99991ltc5nyTp06Wbm3337b53ZiaVzNue0fffSRlXPnxJvMZWPN5X7PxKyJIGIvVdynTx8rZ74nhENBrD+BwMTSMRuoWrVqWW2zvkzXrl0D3o5bg+Sll17S8VtvvWXlzLpw4RCP4+rWeDJr47m/D2o8Rde4zp8/32p37NhRx2YdDxG7/pNbn+2GG26w2kOHDtXx3/72NysXbK0/LxT0c6y7lPqll17q87n33nuvjhcvXmzlvvvuOx0/++yzIelbpMXqMRvvCtq4msfaBRdcYOXS09Pzvf0z1Xg6ePCgjnft2mXlzLpfbr3UDz/8MN99ywtqPAEAAAAAACBiuPAEAAAAAAAAT8TcVDt/unfvbrWvuOIKq20u2bx169aw9CkYBe0WxVhnTusSsW/JdJdTrVKlis/txOq4Vq5c2Wo/9thjOr799ts92ae5PHHjxo2t3O7duz3Zpy8FfRoAfIvVYzbexeO4ulPt1qxZ4/O5TLWLrnH9448/rHa5cuV0PHHiRCs3efJkHc+aNcvKuZ9PRo8ereOnn37aypnT4iONc2zsitVjNt4V5HF1v9O88847Oj7nnHN8vu7dd9+12l9++WXA+zTLDUTTNGcXU+0AAAAAAAAQMVx4AgAAAAAAgCe48AQAAAAAAABPxFWNp1hRkOfGxgNzWUx3iUx/dRHiZVzNvrnLOd966606rlatmpXr0aOH1V6/fr2O3Xokw4YN0/G2bduC72wIUH8idsXLMRtv4nFcy5QpY7Wzs7N1XK9ePSt35MgRq/3ZZ5/puFWrVh70LjRidVxfeOEFq923b9+AXuf+DFOmTLHa/fr1y1/HwoRzbOyK1WM23jGusYkaTwAAAAAAAIgYLjwBAAAAAADAE0y1K4C4RTE2Ma6xiWkAsYtjNjYxriLlypXT8ebNm62cO4X8hhtu0PGCBQu87Vg+xOq4mmMlIvLxxx/r+MILL7RyK1eu1PHo0aOtnDm9UkTk4MGDIeqhtzjHxq5YPWbjHeMam5hqBwAAAAAAgIjhwhMAAAAAAAA8wYUnAAAAAAAAeIIaTwUQc2NjE+Mam6g/Ebs4ZmMT4xqbGNfYxDk2dnHMxibGNTZR4wkAAAAAAAARw4UnAAAAAAAAeIILTwAAAAAAAPAEF54AAAAAAADgCS48AQAAAAAAwBNceAIAAAAAAIAnElSo1yEFAAAAAAAAhDueAAAAAAAA4BEuPAEAAAAAAMATXHgCAAAAAACAJ7jwBAAAAAAAAE9w4QkAAAAAAACe4MITAAAAAAAAPMGFJwAAAAAAAHiCC08AAAAAAADwBBeeAAAAAAAA4In/B++jt0Cd5RkPAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Evaluation on test data \n", + "test_loss = mymodel.evaluate(X_test,y_test)\n", + "print(\"test loss\",test_loss)\n", + "\n", + "test_labels_p = mymodel.predict(X_test)\n", + "test_labels_p = np.argmax(test_labels_p, axis=1 )\n", + "\n", + "n = 0\n", + "\n", + "f,axs = plt.subplots(1,10,figsize = (15,15))\n", + "for i in range(len(test_labels)): \n", + " if n >= 10 :\n", + " break\n", + " if (test_labels_p[i] != test_labels[i]):\n", + " axs[n].imshow(test_images[i],cmap='gray')\n", + " axs[n].set_title(f'{test_labels[i]} -> {test_labels_p[i]}')\n", + " axs[n].axis('off')\n", + " n= n+1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "79b41f2d-d6f6-4ede-8af0-5a4e600157c3", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/mnist-mlp-regularization/mnist-mlp-pred.ipynb b/mnist-mlp-regularization/mnist-mlp-pred.ipynb new file mode 100644 index 0000000..6b3029b --- /dev/null +++ b/mnist-mlp-regularization/mnist-mlp-pred.ipynb @@ -0,0 +1,436 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 9, + "id": "fe7570b6-1e0d-480f-b6cc-17868ec7ea43", + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras import datasets,utils,models,layers,optimizers,losses\n", + "import numpy as np \n", + "import matplotlib.pyplot as plt " + ] + }, + { + "cell_type": "markdown", + "id": "bf9f047c-ffaf-4cf8-973f-21b8f0bcba83", + "metadata": {}, + "source": [ + "# data preparation " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "91befa7a-0369-41c5-a042-e0256b97b76a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n", + "[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n" + ] + } + ], + "source": [ + "(train_images , train_labels), (test_images,test_labels ) = datasets.mnist.load_data()\n", + "\n", + "# preprocessing\n", + "X_train = train_images.reshape(60000,784)\n", + "X_test = test_images.reshape(10000,784)\n", + "\n", + "# Normalizing (0,1 )\n", + "X_train = X_train.astype('float') / 255\n", + "X_test = X_test.astype('float') / 255\n", + "\n", + "y_train = utils.to_categorical(train_labels)\n", + "y_test = utils.to_categorical(test_labels) \n", + "\n", + "print(train_labels[0])\n", + "print(y_train[0])\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "3c80e2f2-1805-4dcb-918d-f7ab72f95a38", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgQAAAB9CAYAAADdsHu2AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAExVJREFUeJzt3X10zvUfx/H3zJnFzIyVlkM3WIk1IdXRmsTKTZmbJFHq0BFSJ+UUlU7FonUOSolT0+Y2i6IWndyF0bohWqQ7y81ZGcs2kyPX749+3r0vXbPba99r1/V8nLNzXte16+a9XbsuH5/bIJfL5RIAABDQ6jhdAAAAcB4NAgAAQIMAAADQIAAAAEKDAAAACA0CAAAgNAgAAIDQIAAAAEKDAAAAiJ80CDZs2CBBQUEev7Zt2+Z0eQGtqKhIHn30UYmOjpbQ0FCJi4uTJUuWOF0WPJg/f74EBQVJWFiY06UEtMLCQnnyySelZ8+eEhUVJUFBQTJlyhSny4KIfPHFF5KYmCgNGzaUsLAw6datm2zZssXpsqqNXzQIzpo6dapkZWW5fbVr187psgJa//79ZcGCBfLcc89JZmamdO7cWYYMGSKLFi1yujQYBw8elAkTJkh0dLTTpQS8/Px8eeutt+Svv/6Sfv36OV0O/i87O1vi4+OlpKRE0tLSJC0tTU6ePCndu3eXrKwsp8urFkH+cJbBhg0bpFu3bvLee+/JwIEDnS4H//fxxx9L7969ZdGiRTJkyBC9vmfPnvLdd99Jbm6uBAcHO1ghzurbt68EBQVJZGSkLF++XIqKipwuKWCd/UgOCgqSI0eOSFRUlDz33HP0Ejjstttukx07dsjPP/8s9evXF5F/enMuv/xyadOmjV/0FPhVDwF8y4oVKyQsLEwGDRrkdv2IESPk0KFDsn37docqg5Weni4bN26UOXPmOF0KRHS4E75ly5YtkpCQoI0BEZGGDRtKfHy8bN26VQ4fPuxgddXDrxoEY8aMkbp160p4eLgkJibK5s2bnS4poO3evVuuuuoqqVu3rtv1sbGx+n046/fff5dHH31UkpOTpXnz5k6XA/isU6dOSb169f5z/dnrdu3aVdMlVTu/aBA0atRIxo8fL3PnzpX169fLzJkz5bfffpOEhARZs2aN0+UFrPz8fImMjPzP9Wevy8/Pr+mScI6HH35YYmJiZPTo0U6XAvi0tm3byrZt2+TMmTN63enTp7Wn0x8+z+qWfRPf16FDB+nQoYNevummmyQpKUnat28vTz75pCQmJjpYXWA7X9cn3aLOysjIkFWrVsk333zDawGUYdy4cfLggw/K2LFjZdKkSXLmzBl5/vnnZf/+/SIiUqdO7f//de3/CUoREREhffr0kW+//VZKSkqcLicgNWnSxGOr+ejRoyIiHnsPUDOKiopkzJgxMm7cOImOjpaCggIpKCiQU6dOiYhIQUGBFBcXO1wl4DseeOABSU5OlrS0NGnevLm0aNFCcnJyZMKECSIicskllzhcYdX5bYNAxH22Lmpe+/bt5fvvv5fTp0+7XX92rI0loc45cuSI5OXlSUpKijRu3Fi/Fi9eLMXFxdK4cWMZOnSo02UCPmXixIly5MgR2bVrl/z666+ydetWOXbsmDRo0EA6duzodHlV5hdDBp4cO3ZMVq9eLXFxcRIaGup0OQEpKSlJ5s2bJxkZGTJ48GC9fsGCBRIdHS1dunRxsLrA1qxZM1m/fv1/rk9OTpaNGzdKZmamNG3a1IHKAN9Wr149/c9Mbm6uLF26VEaOHCkXXHCBw5VVnV80CO655x5p0aKFdOrUSZo2bSr79u2TlJQUycvLk9TUVKfLC1i333679OjRQ0aPHi3Hjx+XVq1ayeLFi+WTTz6R9PR09iBwUGhoqCQkJPzn+tTUVAkODvb4PdSczMxMKS4ulsLCQhERycnJkeXLl4uISK9evdyWvqFm7N69WzIyMqRTp05Sr1492blzpyQnJ0vr1q3lhRdecLq86uHyA9OmTXPFxcW5GjVq5AoODnZFRUW5kpKSXF988YXTpQW8wsJC1yOPPOJq1qyZKyQkxBUbG+tavHix02WhFPfdd5+rQYMGTpcR8Fq2bOkSEY9fv/zyi9PlBaS9e/e64uPjXZGRka6QkBBXq1atXJMnT3YVFRU5XVq18YudCgEAQNX49aRCAABQPjQIAAAADQIAAECDAAAACA0CAAAgNAgAAIBUYGMitv/1jupY9clr4x1VfW14XbyD94zv4j3jm8r7utBDAAAAaBAAAAAaBAAAQGgQAAAAoUEAAACEBgEAABAaBAAAQGgQAAAAoUEAAACEBgEAABAaBAAAQCpwlgFQ3Tp27Kh57NixmocPH6753Xff1Tx79mzNX3/9tZerA4DAQg8BAACgQQAAAESCXOU8F9EXj6UMDg7W3KhRozJvb7ul69evrzkmJkbzmDFjNL/yyiuahwwZ4vZYJ0+e1JycnKz5+eefL7MOK9COco2Li9O8bt06zeHh4WXe988//9TcpEmTaq3LE45yrbju3btrXrhwodv3br75Zs179+6t9HME2numoiZPnqzZfh7VqfPv//8SEhLc7rNx48ZqeW7eM76J448BAEC50SAAAAC+tcqgRYsWmkNCQjTfeOONmrt27ao5IiJC84ABAyr9vAcOHNA8a9YszUlJSZoLCwvd7rNz507N1dXd5q+uu+46zRkZGZrtMI/t0rK/61OnTmm2wwTXX3+95nNXHNj71Cbx8fGa7c+6YsUKJ8qplM6dO2vOzs52sJLAcv/992ueOHGi5jNnzni8fXUMu8D/0EMAAABoEAAAAIeHDOyMcxH3WeflWTVQFbYrzc7KLSoq0mxnSR8+fNjt/seOHdNclRnT/sSu3Lj22ms1p6ena7744ovLfJx9+/Zpnj59uuYlS5Zo3rJli2b7+omITJs2rZwV+xY787t169aafX3IwM5ev+yyyzS3bNnS7XbMIPce+7sODQ11sBL/06VLF8333nuvZrtq5uqrr/Z43wkTJmg+dOiQZjv0bT8ft2/fXrViq4geAgAAQIMAAADQIAAAAOLwHILc3Fy3y/n5+ZqrMofAjsMUFBRo7tatm2a7NC0tLa3Sz4V/zZ07V/O5OztWhJ1/EBYWptku77Tj7bGxsZV+Ll9iD3XKyspysJKKsfNCRo4cqdmOjYqI7Nmzp8ZqCgS33nqr5nHjxnm8jf2d9+nTR3NeXp73CvMDgwcP1jxz5kzNTZs21WznxGzYsEFzVFSU5hkzZnh8fHtfe/u77767cgVXE3oIAAAADQIAAODwkMHRo0fdLj/xxBOabffWN998o9nuJGjt2LFDc48ePTQXFxdrtktDxo8fX/GC8R8dO3bU3Lt3b82lLTGz3f6rVq3SbA+Ssstz7Gtvl3recsstZT5XbWOX79Um8+fP93i9XT6K6mGXq73zzjuaSxtitV3W+/fv915htVTduv/+E9ipUyfN8+bN02yXU2/atEnzCy+8oHnz5s2a69Wrp3nZsmWae/bs6bGGL7/8sqJle03t/AQCAADVigYBAADwrcONVq5cqdnuWmgPu7nmmms0P/jgg5ptl7MdJrC+++47zaNGjapSrYHM7jD56aefag4PD9dsD0/JzMzUbFcf2J2+7G6Dtgv6jz/+0GwPlLI7TdqhChH3VQrnHnzka+wKiYsuusjBSiqvtO5q+7eB6nHfffdpjo6O9ngbO+P93Xff9XZJtZrdebC0oS/7d2xXHxw/ftzj7e1tShsmsAfqLViwoHzF1gB6CAAAAA0CAADgY0MGVmndMX/++afH6+2GKEuXLtVc2nngqJg2bdpotqtBbHfxkSNHNNvDoGyXmD086qOPPvKYK+qCCy5wu/z4449rHjp0aKUftyb06tVL87k/hy+zwxv2QCPr4MGDNVWOX7Ob4TzwwAOa7Web3YDtxRdfrJG6aiu7OuDpp5/WbIc558yZo9kOZ5b275I1adKkMm/zyCOPaLbDok6jhwAAANAgAAAAPjxkUJopU6Zotpvi2Bnrdo/vtWvX1khd/sZuriHivorDdnPbFSB2L3672UZNd4W3aNGiRp+vKmJiYjxeb1fE+CL792CHD3744QfN9m8DFXPppZdqzsjIKPP2s2fP1rx+/XpvlFRrPfvss26X7TCBPdNmzZo1midOnKi5pKTE4+OGhoZqtqsJ7OeP3TTNDuV88MEH5aq9ptFDAAAAaBAAAIBaOGRgNx2yKwvsBjR2H2rbfWa7sV9//XXNdnYp/tGhQwe3y3aYwLrzzjs123MKUDXZ2dmOPbfdYOq2227TbDdxKW3DFTuD2858R8XY33tpx3t/9tlnmu0RvRCJiIjQ/PDDD7t9z37e22GCfv36lfm4rVq10rxw4ULNdvjaWr58uebp06eX+fhOo4cAAADQIAAAALVwyMD66aefNN9///2a7bGgw4YN85gbNGig2e73bTfUCWSvvvqq22U7W9YODTg1TGCPCvbHzaciIyMrfB97zod9veyqm+bNm2sOCQnRbDdwsr9bO8N6+/btmv/66y/N9gjZr776qsJ14x+2yzo5Odnjbewxu/Zcg9I2bAtU9m/bbux0LrtB0IUXXqh5xIgRmu+44w7N7dq10xwWFqbZDkPYnJ6errm0M3Z8CT0EAACABgEAAKjlQwbWihUrNO/bt0+z7fru3r275qlTp2pu2bKl5pdeeklzoO3F3qdPH832iGMR926wDz/8sKZKKpUdJjh3lciOHTtquJrKs13y9ud48803NduNVM7Hzka3QwanT5/WfOLECc05OTma3377bc12NY4dEsrLy9Nsj2+1G0/t2bOnXLXiHxXdgOjnn3/WbF8PuLMbDp17VkBUVJTmX375RXN5VpsdOnRIsz3X4OKLL9Zsz3RZtWpVOSv2DfQQAAAAGgQAAMCPhgys3bt3a77rrrs09+3bV7NdifDQQw9pbt26teYePXp4q0SfZLt+7SxdEZHff/9dsz1e2tvsmQr2HAtr3bp1bpefeuopb5ZUreymKfv379d84403VvixcnNzNa9cuVLz999/r3nbtm0VftyzRo0apdl2u9pubFSM3TO/PKtlSlt9AHd2U6xzNxxavXq1Zruax65as2cNpKamaj569KjmJUuWaLZDBvb62oYeAgAAQIMAAAD46ZCBZbuO0tLSNM+fP1+z3VglPj5ec0JCguYNGzZ4pb7awm5E4+3Nm+wwweTJkzU/8cQTmu0s95SUFLf7FxUVebE673n55ZedLuG87Codqzyz4/Evu4KntDMhLNt9vXfvXm+U5Nfshloi7sNdFWX/fbj55ps12+Ge2jyERg8BAACgQQAAAPx0yMBu0DJw4EDNnTt31myHCSy7WcumTZu8UF3t5O3NiGw3qh0aGDx4sGbbdTpgwACv1oPys5uCoWxr167V3LhxY4+3satB7DktcJZdiVXa5misMgAAALUaDQIAAFC7hwxiYmI0jx07VnP//v01N2vWrMzH+fvvvzXbGfT+eKzu+dj9720Wcd/cY/z48dXyfI899pjmZ555RnOjRo00L1y4UPPw4cOr5XkBJzVp0kRzaZ8xc+bM0VxbV834ozVr1jhdglfRQwAAAGgQAACAWjJkYLv9hwwZotkOE9hjRMvDHvFqjzz2haN9nWJnyp57FKh9DWbNmqXZHpubn5+v+frrr9c8bNgwzddcc43m5s2ba7b78NtuOdt1Ct9hh5TatGmjuSpnJfgze3ZKnTpl/z9s69at3iwHlZSYmOh0CV5FDwEAAKBBAAAAfGzI4KKLLtLctm1bza+99prmK6+8skKPafexnjFjhma7yU2grSaojODgYM32yF67QdDx48c122OkS2O7RdevX6/52WefrXSdqBl2SKk8XeCByG62deutt2q2nzenTp3S/Prrr2vOy8vzbnGolMsvv9zpEryKdzIAAKBBAAAAaBAAAABxYA5BZGSk5rlz57p9z465VXSsxo5Hp6SkaLZL2EpKSir0mIEmKytLc3Z2ttv37MFQll2OaOeAWHY5oj34o7p2PISzbrjhBs2pqanOFeJjIiIiNJe2Y+rBgwc1T5gwwdsloYo+//xzzXbujL/MQ6OHAAAA0CAAAABeHDLo0qWLZnu+/XXXXaf5kksuqfDjnjhxQrPdMW/q1Kmai4uLK/y4EDlw4IBme0CUiMhDDz2kefLkyWU+1syZMzW/8cYbmn/88ceqlAgfce7hV0Ag2L17t+Z9+/ZptkPcV1xxheY//vijZgqrJvQQAAAAGgQAAMCLQwZJSUke8/nk5ORoXr16tebTp09rtisICgoKqlAhzufw4cNul6dMmeIxI3BkZmZqHjRokIOV1A579uzRbFdBde3a1YlyUM3sMPX8+fM128Pyxo0bp9n+++ar6CEAAAA0CAAAgEiQ69yD70u7IbOKvaKcv/7z4rXxjqq+Nrwu3sF7xncF0nsmPDxc87JlyzTbg6zef/99zSNGjNBc0yvhyvu60EMAAABoEAAAAIYMHEf3p+8KpO7P2oT3jO8K1PeMHT6wqwxGjx6tOTY2VnNNrzhgyAAAAJQbDQIAAMCQgdPo/vRdgdr96et4z/gu3jO+iSEDAABQbjQIAABA+YcMAACA/6KHAAAA0CAAAAA0CAAAgNAgAAAAQoMAAAAIDQIAACA0CAAAgNAgAAAAQoMAAACIyP8AD/Odvxg/M/kAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#visualize Sample Traning Data \n", + "for i in range(5):\n", + " plt.subplot(1,5,i+1)\n", + " plt.imshow(train_images[i],cmap='gray')\n", + " plt.title(train_labels[i])\n", + " plt.axis('off')" + ] + }, + { + "cell_type": "markdown", + "id": "5e6329a7-76c8-4851-944d-63c83046a8cc", + "metadata": {}, + "source": [ + "# model creation" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "d538ccae-1104-4be7-ae82-abff974847d3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_1\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_1\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“\n",
+       "โ”ƒ Layer (type)                         โ”ƒ Output Shape                โ”ƒ         Param # โ”ƒ\n",
+       "โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ\n",
+       "โ”‚ dense_3 (Dense)                      โ”‚ (None, 500)                 โ”‚         392,500 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ dense_4 (Dense)                      โ”‚ (None, 100)                 โ”‚          50,100 โ”‚\n",
+       "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n",
+       "โ”‚ dense_5 (Dense)                      โ”‚ (None, 10)                  โ”‚           1,010 โ”‚\n",
+       "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n",
+       "
\n" + ], + "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_3 (\u001b[38;5;33mDense\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m500\u001b[0m) โ”‚ \u001b[38;5;34m392,500\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ dense_4 (\u001b[38;5;33mDense\u001b[0m) โ”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m100\u001b[0m) โ”‚ \u001b[38;5;34m50,100\u001b[0m โ”‚\n", + "โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n", + "โ”‚ dense_5 (\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" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 443,610 (1.69 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m443,610\u001b[0m (1.69 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 443,610 (1.69 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m443,610\u001b[0m (1.69 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mymodel = models.Sequential()\n", + "mymodel.add(layers.Dense(500 , activation='relu' , input_shape = (784,) ))\n", + "mymodel.add(layers.Dense(100 , activation='relu' ))\n", + "mymodel.add(layers.Dense(10 , activation='softmax' ))\n", + "\n", + "mymodel.summary()\n", + "mymodel.compile(\n", + " optimizer=optimizers.SGD(learning_rate=0.001),\n", + " loss=losses.categorical_crossentropy\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "4814a7a9-0acd-41d4-8802-400735eb72c3", + "metadata": {}, + "source": [ + "# Train and Evaluation" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "630c5c9b-85b0-4cc0-aa27-aaa405d6338c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - loss: 2.1530 - val_loss: 1.9959\n", + "Epoch 2/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 1.8536 - val_loss: 1.6980\n", + "Epoch 3/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 1.5651 - val_loss: 1.4134\n", + "Epoch 4/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 1.3076 - val_loss: 1.1737\n", + "Epoch 5/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 1.1013 - val_loss: 0.9892\n", + "Epoch 6/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.9456 - val_loss: 0.8521\n", + "Epoch 7/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.8299 - val_loss: 0.7510\n", + "Epoch 8/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.7434 - val_loss: 0.6750\n", + "Epoch 9/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.6776 - val_loss: 0.6170\n", + "Epoch 10/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.6265 - val_loss: 0.5717\n", + "Epoch 11/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.5857 - val_loss: 0.5357\n", + "Epoch 12/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.5528 - val_loss: 0.5065\n", + "Epoch 13/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.5256 - val_loss: 0.4824\n", + "Epoch 14/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.5027 - val_loss: 0.4620\n", + "Epoch 15/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.4832 - val_loss: 0.4446\n", + "Epoch 16/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.4664 - val_loss: 0.4298\n", + "Epoch 17/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.4517 - val_loss: 0.4169\n", + "Epoch 18/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.4388 - val_loss: 0.4054\n", + "Epoch 19/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.4273 - val_loss: 0.3955\n", + "Epoch 20/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.4170 - val_loss: 0.3864\n", + "Epoch 21/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.4078 - val_loss: 0.3783\n", + "Epoch 22/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3994 - val_loss: 0.3710\n", + "Epoch 23/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3917 - val_loss: 0.3643\n", + "Epoch 24/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3848 - val_loss: 0.3581\n", + "Epoch 25/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3783 - val_loss: 0.3527\n", + "Epoch 26/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3723 - val_loss: 0.3473\n", + "Epoch 27/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3668 - val_loss: 0.3425\n", + "Epoch 28/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3616 - val_loss: 0.3382\n", + "Epoch 29/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3567 - val_loss: 0.3340\n", + "Epoch 30/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3521 - val_loss: 0.3299\n", + "Epoch 31/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3478 - val_loss: 0.3262\n", + "Epoch 32/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3437 - val_loss: 0.3227\n", + "Epoch 33/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3399 - val_loss: 0.3194\n", + "Epoch 34/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3362 - val_loss: 0.3162\n", + "Epoch 35/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3326 - val_loss: 0.3132\n", + "Epoch 36/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3294 - val_loss: 0.3103\n", + "Epoch 37/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3261 - val_loss: 0.3076\n", + "Epoch 38/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3230 - val_loss: 0.3050\n", + "Epoch 39/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3201 - val_loss: 0.3025\n", + "Epoch 40/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3173 - val_loss: 0.3001\n", + "Epoch 41/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3145 - val_loss: 0.2979\n", + "Epoch 42/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3119 - val_loss: 0.2957\n", + "Epoch 43/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3094 - val_loss: 0.2934\n", + "Epoch 44/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3069 - val_loss: 0.2912\n", + "Epoch 45/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3044 - val_loss: 0.2894\n", + "Epoch 46/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.3022 - val_loss: 0.2872\n", + "Epoch 47/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.2999 - val_loss: 0.2854\n", + "Epoch 48/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.2977 - val_loss: 0.2835\n", + "Epoch 49/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.2955 - val_loss: 0.2819\n", + "Epoch 50/50\n", + "\u001b[1m375/375\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 0.2935 - val_loss: 0.2800\n" + ] + } + ], + "source": [ + "history = mymodel.fit(X_train,y_train,batch_size=128,epochs=50,validation_split=0.2)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "5faabfcd-bd9c-4db2-870e-ac838ff72265", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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riMpKckAjPT09Hr8mssoyHWdznr9S6PTr98zln58rHH+LBERqZXc3Fxj//79Rm5u7pVvbobuvvtu45ZbbjGeeeYZo2fPnq7yvn37Gk888YTrfWZmphEUFGQ89NBDrrJOnToZzz//fI3+HMBYvXq1YRiGsWTJEiMkJMTIyspyXX///fcNq9VqpKSkVPn5YcOGGQ888ECV1+644w5j8uTJVV673D+f9PT0Gv/93axmgaWnpwNmP2Z1tm/fzvjx493KbrrpJnbs2EFhYeFl79m2bVuV37lgwQKCgoJcR2xsbH1+RvWOfwx/6gmvTXYV9dRMMBERaUB33nkn77//Pq+88oqr9QegW7durFq1ioSEBPbs2cMPfvCDSjPG6vNnOp1O7r77br7++ms2bdrEAw88wIwZM4iMjOT48ePMnz+f7du3c/LkST788EMOHz5M7969yc3N5f7772fz5s2cPHmSTz/9lC+//NJtjFBjaDYByDAM5s2bx7XXXkvfvn2rvS8lJYXIyEi3ssjISIqKikhLS7vsPSkpKVV+5/z580lPT3cdSUlJ9fw11fALh6wUSD3gmtrYo3QgtHaFFxGRhnDjjTcSGhrKoUOH+MEPfuAqf/755wkJCWHEiBFMnjyZm266iauvvrpB/kxfX18++OADzp8/z5AhQ7jtttsYM2YMixYtcl0/ePAgt956Kz169GDWrFncf//9/PSnP8Vms3Hu3DnuuusuevTowbRp05g4cSKPP/54g9StOs1mFtj999/PV199xSeffHLFey/tZzRKw0TF8qruqa5/0uFw4HA0wQDk0K5g9YaCTEj/FoJj3fYEu1wdRUREasJms3H6dOUB2507d2bjxo1uZXPmzHF7f+LEiRr/OcYlaxT169ev0veXiYyMrHZMj91uZ/ny5TX+cxtKs2gBeuCBB1i7di2bNm2iQ4cOl703KiqqUktOamoqXl5ehIWFXfaeS1uFmpyXHcJLp/alHgCgc5gf3jYL2QXFnLqY68HKiYiItB0eDUCGYXD//fezatUqNm7cSFxc3BU/M3z4cDZs2OBW9uGHHzJ48GDXoknV3TNixIiGq3xdRcSbr6n7AbB7WekSbm6JceRMVnWfEhERaTJvvvkm/v7+VR59+vTxdPUahEe7wObMmcO//vUv3n33XQICAlytNkFBQfj4mBuFzp8/n1OnTvH6668D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auznrUHQIiIi0uaoBUhERETaHAUgERERaXMUgERERKTNUQASERGRNkcBqAm9/PLLxMXF4XQ6GTRoEB9//LGnq9RqbN26lcmTJxMTE4PFYmHNmjVu1w3D4LHHHiMmJgYfHx+uv/569u3b55nKtnALFixgyJAhBAQEEBERwdSpUzl06JDbPXreDWfx4sX079/ftRjc8OHDWb9+veu6nnXjWrBgARaLhblz57rK9MwbzmOPPYbFYnE7oqKiXNcb81krADWRFStWMHfuXB5++GF2797NqFGjmDhxIomJiZ6uWquQnZ3NgAEDWLRoUZXXn332WZ577jkWLVrEl19+SVRUFOPGjXPt+yY1t2XLFubMmcNnn33Ghg0bKCoqYvz48WRnZ7vu0fNuOB06dODpp59mx44d7NixgxtvvJEpU6a4/hLQs248X375JUuWLKF///5u5XrmDatPnz4kJye7jr1797quNeqzNqRJXHPNNcbs2bPdynr16mX85je/8VCNWi/AWL16tet9SUmJERUVZTz99NOusry8PCMoKMj461//6oEati6pqakGYGzZssUwDD3vphASEmL84x//0LNuRJmZmUb37t2NDRs2GNddd53x0EMPGYahf78b2qOPPmoMGDCgymuN/azVAtQECgoK2LlzJ+PHj3crHz9+PNu2bfNQrdqO48ePk5KS4vb8HQ4H1113nZ5/A0hPTwcgNDQU0PNuTMXFxbz11ltkZ2czfPhwPetGNGfOHL7zne8wduxYt3I984Z35MgRYmJiiIuL44477uDYsWNA4z9rbYbaBNLS0iguLiYyMtKtPDIykpSUFA/Vqu0oe8ZVPf+TJ096okqthmEYzJs3j2uvvZa+ffsCet6NYe/evQwfPpy8vDz8/f1ZvXo18fHxrr8E9Kwb1ltvvcWuXbv48ssvK13Tv98Na+jQobz++uv06NGDM2fO8OSTTzJixAj27dvX6M9aAagJWSwWt/eGYVQqk8aj59/w7r//fr766is++eSTStf0vBtOz549SUhI4OLFi6xcuZK7776bLVu2uK7rWTecpKQkHnroIT788EOcTme19+mZN4yJEye6zvv168fw4cPp2rUrr732GsOGDQMa71mrC6wJhIeHY7PZKrX2pKamVkq20vDKZhTo+TesBx54gLVr17Jp0yY6dOjgKtfzbnh2u51u3boxePBgFixYwIABA/jLX/6iZ90Idu7cSWpqKoMGDcLLywsvLy+2bNnCCy+8gJeXl+u56pk3Dj8/P/r168eRI0ca/d9vBaAmYLfbGTRoEBs2bHAr37BhAyNGjPBQrdqOuLg4oqKi3J5/QUEBW7Zs0fOvA8MwuP/++1m1ahUbN24kLi7O7bqed+MzDIP8/Hw960YwZswY9u7dS0JCgusYPHgwd955JwkJCXTp0kXPvBHl5+dz4MABoqOjG//f73oPo5Yaeeuttwxvb29j6dKlxv79+425c+cafn5+xokTJzxdtVYhMzPT2L17t7F7924DMJ577jlj9+7dxsmTJw3DMIynn37aCAoKMlatWmXs3bvX+P73v29ER0cbGRkZHq55y3PfffcZQUFBxubNm43k5GTXkZOT47pHz7vhzJ8/39i6datx/Phx46uvvjJ++9vfGlar1fjwww8Nw9CzbgoVZ4EZhp55Q/r5z39ubN682Th27Jjx2WefGTfffLMREBDg+ruxMZ+1AlATeumll4xOnToZdrvduPrqq13ThqX+Nm3aZACVjrvvvtswDHM65aOPPmpERUUZDofDGD16tLF3717PVrqFquo5A8arr77qukfPu+H8+Mc/dv3vRrt27YwxY8a4wo9h6Fk3hUsDkJ55w5k+fboRHR1teHt7GzExMcYtt9xi7Nu3z3W9MZ+1xTAMo/7tSCIiIiIth8YAiYiISJujACQiIiJtjgKQiIiItDkKQCIiItLmKACJiIhIm6MAJCIiIm2OApCIiIi0OQpAIiIi0uYoAImIVMNisbBmzRpPV0NEGoECkIg0SzNnzsRisVQ6JkyY4OmqiUgr4OXpCoiIVGfChAm8+uqrbmUOh8NDtRGR1kQtQCLSbDkcDqKiotyOkJAQwOyeWrx4MRMnTsTHx4e4uDjefvttt8/v3buXG2+8ER8fH8LCwpg1axZZWVlu97zyyiv06dMHh8NBdHQ0999/v9v1tLQ0vve97+Hr60v37t1Zu3at69qFCxe48847adeuHT4+PnTv3r1SYBOR5kkBSERarN///vfceuut7Nmzhx/+8Id8//vf58CBAwDk5OQwYcIEQkJC+PLLL3n77bf56KOP3ALO4sWLmTNnDrNmzWLv3r2sXbuWbt26uf0Zjz/+ONOmTeOrr75i0qRJ3HnnnZw/f9715+/fv5/169dz4MABFi9eTHh4eNM9ABGpuwbZU15EpIHdfffdhs1mM/z8/NyOJ554wjAMwwCM2bNnu31m6NChxn333WcYhmEsWbLECAkJMbKyslzX33//fcNqtRopKSmGYRhGTEyM8fDDD1dbB8D43e9+53qflZVlWCwWY/369YZhGMbkyZONH/3oRw3zg0WkSWkMkIg0WzfccAOLFy92KwsNDXWdDx8+3O3a8OHDSUhIAODAgQMMGDAAPz8/1/WRI0dSUlLCoUOHsFgsnD59mjFjxly2Dv3793ed+/n5ERAQQGpqKgD33Xcft956K7t27WL8+PFMnTqVESNG1Om3ikjTUgASkWbLz8+vUpfUlVgsFgAMw3CdV3WPj49Pjb7P29u70mdLSkoAmDhxIidPnuT999/no48+YsyYMcyZM4c//elPtaqziDQ9jQESkRbrs88+q/S+V69eAMTHx5OQkEB2drbr+qefforVaqVHjx4EBATQuXNn/ve//9WrDu3atWPmzJm88cYbLFy4kCVLltTr+0SkaagFSESarfz8fFJSUtzKvLy8XAON3377bQYPHsy1117Lm2++yRdffMHSpUsBuPPOO3n00Ue5++67eeyxxzh79iwPPPAAM2bMIDIyEoDHHnuM2bNnExERwcSJE8nMzOTTTz/lgQceqFH9HnnkEQYNGkSfPn3Iz8/nvffeo3fv3g34BESksSgAiUiz9d///pfo6Gi3sp49e3Lw4EHAnKH11ltv8X//939ERUXx5ptvEh8fD4Cvry8ffPABDz30EEOGDMHX15dbb72V5557zvVdd999N3l5eTz//PP84he/IDw8nNtuu63G9bPb7cyfP58TJ07g4+PDqFGjeOuttxrgl4tIY7MYhmF4uhIiIrVlsVhYvXo1U6dO9XRVRKQF0hggERERaXMUgERERKTN0RggEWmR1HsvIvWhFiARERFpcxSAREREpM1RABIREZE2RwFIRERE2hwFIBEREWlzFIBERESkzVEAEhERkTZHAUhERETanP8P3yeM69Pd/cEAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot losses \n", + "losses = history.history['loss']\n", + "val_losses = history.history['val_loss']\n", + "\n", + "plt.plot(losses)\n", + "plt.plot(val_losses)\n", + "plt.xlabel('Epochs')\n", + "plt.ylabel('loss')\n", + "\n", + "plt.legend(['loss','val_loss'])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "ef70d735-63a6-4b11-b659-263f9030acd7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.2786\n", + "test loss 0.27857887744903564\n", + "\u001b[1m313/313\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJ4AAACKCAYAAADrG4B0AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMxhJREFUeJzt3XmcjeX/+PH3MGYwxk7Zy8eWhGz5IEuKMEhItpIlhA9FKZQtS6Qo38iSkC1Lm/qYlEFEWbMrlUFR1sFkd/3++Py6uq6bGWfOnPucM2dez8fD4/G+zvuc+75mrrnPuc/tvt5XmFJKCQAAAAAAAOBjGQLdAQAAAAAAAIQmLjwBAAAAAADAFVx4AgAAAAAAgCu48AQAAAAAAABXcOEJAAAAAAAAruDCEwAAAAAAAFzBhScAAAAAAAC4ggtPAAAAAAAAcAUXngAAAAAAAOCKoLnwtHr1agkLC7vpv40bNwa6e5b4+Hjp3LmzFCxYUCIjI6VQoULSokWLQHcrzZgxY4aEhYVJtmzZAt2VGzC2Kbdu3Tpp3Lix5MqVS7JkySIlS5aUkSNHBrpbIiLy448/yoABA6Ry5cqSM2dOyZ07t9SsWVOWLFkS6K4FrVWrVknnzp2lTJkyEhUVJYUKFZLmzZvLli1bAt017f3330/y8yIsLEzGjh0b6C4GnU6dOiX7Owu2z1kRkT179khkZKSEhYXJ5s2bA92doJQWjlcRkaNHj0qnTp0kf/78kjlzZilfvrzMnDkz0N0Ket9//700bNhQoqOjJVu2bFKvXj1Zv359oLulJSYmyuOPPy6lS5eW6OhoiYqKkrvvvlteffVVSUxMDHT3gtL27dulSZMmUrRoUcmSJYvkzp1b/v3vf8sHH3wQ6K5Zjh07Jr1795bixYtLlixZpFixYtKlSxc5dOhQoLsW1IL5nFhEOG/ywrZt2+SRRx6RggULStasWaVMmTIyYsQI+euvvwLdNRFJW+fE4YHugNPo0aOlXr161mPlypULUG9utGvXLqlbt64UL15cXn/9dSlcuLAcPXpUYmNjA921NOG3336TAQMGSMGCBSUhISHQ3bEwtik3f/586dixozz22GMyZ84cyZYtm/z888/y+++/B7prIiLy5Zdfyueffy4dO3aUqlWrytWrV2XRokXSunVrGT58uLzyyiuB7mLQmTJlipw8eVL69u0rZcuWlePHj8uECROkevXqEhsbKw888ECguyhNmjSRDRs23PD4K6+8IitXruRi8U28/PLL0qNHjxseb9q0qURGRkrVqlUD0KukXbt2TTp37ix58+YNmveTYJQWjteEhASpVauWXL58WcaNGycFChSQBQsWSNeuXSUhIUGee+65QHcxKG3atElq164t1apVk7lz54pSSsaNGyf169eXuLg4+fe//x3oLsqVK1dEKSXPPfec3HnnnZIhQwZZu3atjBgxQlavXi1fffVVoLsYdM6cOSNFihSRtm3bSqFChSQxMVHmzZsnHTt2lIMHD8qQIUMC3UW5dOmS1K5dW06fPi3Dhw+XsmXLyv79+2Xo0KESGxsre/fulejo6EB3M+gE+znx31q1aiX9+/e3HitatGiAehPc9uzZIzVq1JDSpUvLxIkTJW/evPo9bsuWLfLJJ58Euotp65xYBYm4uDglImrx4sU+3e7JkyfV8ePHfbKt69evq4oVK6qKFSuqixcv+mSb6U1MTIxq2rSpevLJJ1VUVFSqtsXYBtaRI0dUVFSU6tmzp0+368txPX78uLp+/foNjzdp0kRlzZqVsb6JP/7444bHzp07p2677TZVv359r7fry3G9mfPnz6ts2bKpWrVqubaPULN69WolImrIkCFeb8OtcR0/frwqVKiQmjRpkhIRtWnTJp/vIxSkheN1zJgxSkTU5s2brccbNGigoqKi1OnTp32yn1DTsGFDddttt6nExET92NmzZ1XevHlVjRo1vN6u2+/FSin1wgsvKBFRP//8s6v7CSX33XefKlKkiNev9+W4rly5UomImjFjhvX4/PnzlYioZcuW+WQ/oSQtnBMrpZSIqF69evlse6Fu8ODBSkTUgQMHrMeffvppJSLq1KlTXm03vZ4TB81UO7fs2LFDChQoII0aNZI5c+bIuXPnvN7W2rVrZfv27dKvXz+JjIz0YS/Thw8++EDWrFkj77zzjk+2x9gG1owZMyQxMVEGDhzo0+36clzz5s0rYWFhNzxerVo1+euvv+TUqVOp6WpIyp8//w2PZcuWTcqWLSuHDx/2eru+HNebWbRokZw/f166du3q0+2GspkzZ0pYWJh07tzZ6224Ma4//fSTvPLKK/LOO+9I9uzZU729UJYWjtf169fLbbfdJpUrV7Yej4mJkcTERFmxYoXX2w5l69evl7p160rWrFn1Y9HR0VK7dm359ttv5ejRo15t1+33YhGRfPnyiYhIeHjQTawIWnnz5k3V78uX45opUyYREcmRI4f1eM6cOUVEJHPmzF5vO1SlhXNipFxyx0KGDBkkIiLCq+2m13PioLvw1KtXLwkPD5fs2bNLw4YNZd26danaXvXq1WX27NmSKVMm6datm+TPn19at24ty5Ytk0uXLqVoW2vXrhWR/33wN27cWDJnzizZsmWTmJgY2bdvX6r6Ger+/PNP6devn4wdO1YKFy7sk20ytoG1du1ayZ07t+zbt08qVqwo4eHhkj9/funRo4ecPXvW6+36clyTEhcXJ/ny5bvplzbcKCEhQbZu3Sp3332319twe1xnzpwp2bNnl9atW6d6W+lBQkKCLFmyROrXry933nmn19vx9bgqpaRr164SExMjzZo187pf6VmwHa+XL1++6X/o/P3Yjh07vO5nKLvV723nzp1ebdeN92KllFy9elXOnj0rK1askAkTJkjbtm2ZvpOM69evy9WrV+X48ePyzjvvSGxsbKouWvhyXGvWrCmVK1eWYcOGyaZNm+T8+fOydetWGTRokFSqVEkefPBBr/sZqtLSOfH8+fMlS5YsEhkZKZUrV5ZZs2Z53b9Q9+STT0rOnDmlZ8+e8ssvv8i5c+dk+fLl8u6770qvXr0kKirKq+2m23PiQN9y9betW7eqvn37qo8++kitXbtWvffee+quu+5SGTNmVCtWrPDJPk6fPq3ee+891aBBAxUeHq5y5MihOnXqpGJjY9XVq1dv+fru3bsrEVHZs2dXXbp0UV999ZWaO3euKlasmMqbN6/6/ffffdLPUNSyZUtVo0YNPe3JF1PtTIyt/5UuXVplzpxZRUdHq9GjR6u4uDg1btw4lSVLFlWzZs2bTnFLqdSO681Mnz5diYiaNGlSqvuXXrRv316Fh4ffMFXGW74e17179yoRUd27d/dJ/9KDKVOmKBFRCxYs8Nk2fTGub7/9tsqVK5c6duyYUkqpWbNmMdUuhYLteO3Xr5/KkCGDio+Ptx7v2LGjEhH19NNP+6SfoaZixYqqVKlS6tq1a/qxK1euqOLFiysRUfPnz0/1Pnz1XrxgwQIlIvrfU089pa5cuZLq/oWyv887RURFRESod955x2fb9sW4nj17VjVt2tQa17p166qTJ0/6rJ+hJK2cE7dr107NmzdPrV27Vi1ZskQ1atQo1VPuQ93evXtVmTJlrGPhP//5j0/GVKn0dU4cNBeebub06dOqcOHCqnz58sk+7/r16+rKlSvWv1s5fvy4mjJliqpTp44KCwtT+fPnv+Vc9G7duikRUQ0bNrQe37ZtmxIRNXjw4Fv/UOnQkiVLVEREhNq9e7d+zNMLT4xt8CpZsqQSETVmzBjr8YkTJyoRUStXrkzytf4aV6cvvvhCRUREqFatWvnsAyPUDRkyRImIevvtt2/53ECN64ABA7g4kUJVqlRRefLk8ajOmb/G9eDBgypbtmxWXREuPKVMMB6ve/bsUZGRkapWrVpq165d6sSJE2ry5MkqIiJCiYjq0aOHxz9fejJz5kwlIqpnz57qyJEj6tChQ6pLly4qY8aMSkTUwoULk3ytv9+LT506pTZt2qRWrVqlRo0apbJnz66aNWtmXTSDLT4+Xm3atEl9/vnnqkePHipDhgxq/Pjxyb7GX+N6+fJl1ahRI1WkSBE1ffp0tXbtWjV79mxVsmRJValSJXXmzJkU/azpQVo8J/5bTEyMCg8PV3/++adXrw9lv/76qypRooSqWbOmWrJkiVqzZo0aN26cyp49u+rcuXOyr+Wc+EZBN9XOlDNnTomJiZEdO3bIhQsXknzemjVrJFOmTNa/gwcPJrvts2fPypkzZyQhIUGUUpIzZ85bzq3OkyePiIg0bNjQerxixYpSoEAB2bp1q2c/WDpy/vx56dWrl/Tp00cKFiwoZ86ckTNnzsjly5dF5H+reyS35C5jG7yS+p01atRIRCTZ35m/xtUUGxsrjz76qDz00EMyb968m9Z+gm348OHy6quvyqhRo6R37963fH4gxvXKlSsyZ84cqVChglSpUsXj16VnO3bskM2bN0uHDh08qmnnr3Ht1auXlCtXTlq2bKk/K/5ervj8+fNBtxJqsAnW4/Wuu+6Sjz76SOLj46VcuXKSN29eee2112TChAkiIlKoUCGPf8b0pHPnzjJ27FiZO3euFC5cWIoWLSp79uyRAQMGiEjyvzd/vxfnypVLqlSpIvXq1ZNBgwbJtGnT5NNPPw2KFZ+CVdGiRaVKlSrSuHFjmTJlijz99NPy0ksvyfHjx5N8jb/GdebMmfLf//5Xli1bJl27dpX7779fnnjiCVmxYoVs3bpVJk6c6MVPHNrS2jmxqUOHDnL16lXZvHmzV68PZS+++KKcPXtWYmNjpWXLllK7dm15/vnnZeLEifLee+/JmjVrknwt58Q3Cvqqf0opEZFkvyRWrlxZNm3aZD1WsGDBG553+PBhWbx4sSxcuFA2bdokhQoVkjZt2sj06dM9Gpzy5csn288MGYL6Ol5AnDhxQv744w+ZMGGCPsk05cqVS5o3by4ff/zxTV/P2Aav8uXLy8aNG294/O9jNrnfmb/G9W+xsbHyyCOPSJ06dWTp0qVeFwNMT4YPHy7Dhg2TYcOGyaBBgzx6jb/HVURk+fLl8ueff8rLL7+cotelZzNnzhQR8bjopL/GddeuXRIfHy+5cuW6IVevXj3JkSOHnDlzxqM+pzfBfrw2atRI4uPj5cCBA3L16lUpVaqUfPjhhyIiUrt2bY+2kR4NHDhQ+vXrJz/99JNER0dLsWLFpHv37hIVFXVDsXZTIN6LTdWqVRMRkR9//NHrbaQ31apVk6lTp8ovv/yii7M7+Wtct2/fLhkzZpRKlSpZjxcvXlzy5Mkju3btSsFPlj6kpXNib/qYXm3fvl3Kli17Qy2nqlWrisj/zlvq1Klz09dyTnwT/r/JynOnTp1ShQoVUhUrVvR6G2fPnlVvvfWWqlmzpgoLC1O5c+dW3bp1U6tWrUrxLcCnT59WWbNmVQ899JD1+JYtW5SIqJEjR3rdz1B14cIFFRcXd8O/hg0bqsyZM6u4uDi1c+dOr7bN2AZWbGysEhE1atQo6/E33nhDiYj65ptvvNquL8f1735mzpxZPfjgg+rChQte9Sm9GTFihM/n/Pt6XP/WpEkTlTlzZq+XtE1vLl68qHLnzq2qVavmk+35clw3bNhww2fFwIEDlYioqVOnev2eEurS0vH6t0uXLqn77rsvVed36VF8fLzKkSOH6tevn9fbcHtslfpnmuCSJUt8sr30oGPHjipDhgxeT3fy5bgOHz5ciYjauHGj9fj+/fuViKTq7y9UpZVz4ptp3LixypQpkzp+/LhPthdK6tWrp/Lly6fOnTtnPT5t2jQlIurjjz/2arvp9Zw4aC48tW3bVg0cOFAtXrxYxcXFqWnTpqnSpUur8PDwZOfF3kpcXJzKmjWrevzxx9Unn3yiLl++nKp+vv7660pE1JNPPqlWrFih3n//fVWkSBFVtGhRCu6lgC+KizO2gde0aVMVGRmpRo4cqVauXKnGjBmjMmfOrGJiYrzepi/H9ZtvvlFZsmRRd9xxh1q1apXasGGD9S8hIcHrbYeqv4+Dhx9++Ibf14YNG7zerq+PV6WU+u2331TGjBlVu3btUr2t9GLhwoVKRNS0adN8sj03xtVEjafkpZXjtXfv3mrJkiUqLi5OzZw5U1WoUEHlyZNH7dq1K1XbDWU7d+5Uw4YNU8uXL1crV65Ur7/+usqbN6+qUqXKDV+CUsKXYzt16lTVvn17NXv2bLVq1Sr12WefqRdeeEFlyZJF1ahRgwLjN9GtWzfVv39/tWjRIrV69Wq1ZMkS1aZNGyUi6vnnn/d6u74c10OHDqmcOXOqQoUKqSlTpqhVq1apGTNmqOLFi6uoqCi1b98+r7cdyoL9nHjcuHGqU6dOau7cuSouLk4tWrRINWjQQImIGjZsmNfbDWWffPKJCgsLU9WrV1eLFi1SX3/9tRo1apTKli2bKlu2rLp06ZJX202v58RBc+FpzJgxqmLFiipHjhwqY8aMKl++fKpFixbq+++/T9V2ExIS1Pnz533Uy/+ZPn26KleunIqIiFB58uRR7du3V4cPH/bpPkKdLy48MbaB99dff6mBAweqIkWKqPDwcFW0aFH10ksveVSwOCm+HNehQ4daq1A4/8XFxflkP6GkTp06yf7OvOXG8Tpq1CglImrVqlU+3W4oe+ihh1RUVJQ6e/asT7bnxriauPCUvLRyvDZv3lwVKFBAZcqUSd1+++2qU6dO6uDBgz7bfijav3+/ql27tsqdO7eKiIhQJUqUUEOGDEn1uPhybNevX69iYmJUwYIFVUREhMqaNauqUKGCGjlypEpMTPTJPkLNe++9p+6//36VN29eFR4ernLmzKnq1Kmj5s6dm6rt+vqY/emnn1THjh3VHXfcoSIjI1XRokVVmzZtrIWCYAv2c+JPP/1U1apVS+XLl0+Fh4er6Ohodf/99/t0ddtQtGrVKtWgQQN1++23qyxZsqhSpUqp/v37qxMnTni9zfR6Thym1P+f2AkAAAAAAAD4EFXEAAAAAAAA4AouPAEAAAAAAMAVXHgCAAAAAACAK7jwBAAAAAAAAFdw4QkAAAAAAACu4MITAAAAAAAAXBHu6RPDwsLc7AdSQCnls20xrsGDcQ1NvhxXEcY2mHDMhibGNTQxrqGJz9jQxTEbmhjX0OTJuHLHEwAAAAAAAFzBhScAAAAAAAC4ggtPAAAAAAAAcAUXngAAAAAAAOAKLjwBAAAAAADAFVx4AgAAAAAAgCvCA90BAOlLhgz/XO/u0qWLlStfvryO+/Tp47c+AQAAAADcwR1PAAAAAAAAcAUXngAAAAAAAOAKLjwBAAAAAADAFdR4AuBXpUqV0vGUKVOs3Geffebv7gAAAAAAXMQdTwAAAAAAAHAFF54AAAAAAADgCqbaJSFXrlxWu2jRoh69Lj4+3mo/++yzOt61a5eV+/HHH3X8ww8/pLSLISdnzpxW++zZszq+fv26n3sDtyxdujTJnPMYAQAAAOAb4eH21/8qVaro+N5777VylStX1nHp0qWt3P79+3U8efJkK7d9+/bUdhMhiDueAAAAAAAA4AouPAEAAAAAAMAVXHgCAAAAAACAK8KUUsqjJ4aFud0Xv2vSpInVbtasmY7r1q1r5UqUKOHRNs26TSIixYoV03FkZGSSr8uYMaNH2xcR8XDIPBJM47py5UqrnZiYqOMZM2ZYueXLl/ulT57Inz+/1T516pSOr1696vF2QmlcM2XKpOM33njDynXv3l3H//d//2flBgwYoONr16651Dv/8uW4igR+bPGPUDpm8Y/0OK7Omh/m74D34hullXFND/iMDV0cs94zz8NFRKpWrapj81xbRKRFixap3t+2bdusdqVKlZJ8LuMamjwZV+54AgAAAAAAgCu48AQAAAAAAABXhN/6KWnLv/71L6vdq1cvHXfr1s3KZcmSxWr74na9UqVKpXob6dXWrVut9vPPP6/jNWvW+Ls7HuvXr5/VNm9vNX+G9MScxtqzZ08rZx6Hs2bN8lufAAD/iImJ0fGcOXOs3MmTJ3U8evRoKzd79myrff36dRd6h1y5cum4Xbt2Vu7FF1/UceHChT3e5scff6xj5ziaOfhP//79rXabNm10bC5zL2J/T9mxY4eVM89F4+LifNhDpBWlS5fW8aRJk6xcw4YNvdrmiRMndLxz584kn9e7d2+vth/KWrZsqePkrg889NBDVrtevXpW+9tvv9VxcqVm3n//fat99OhRT7rpV9zxBAAAAAAAAFdw4QkAAAAAAACu4MITAAAAAAAAXBFyNZ6cc9379u3r+j737dun4927d7u+v1B1+PDhQHfBY+Z83Oeee87KRURE6Di91nhq3bq1juPj463c0qVL/dqXvHnzWm1zuU+zjgk8Yy67fscdd1i5Dh066Dhbtmweb3PZsmVWe8+ePTo+c+ZMyjqYDkyZMkXH3333nZVzzvEHkrJr1y4dv/fee1bOfA+fMWOGlXvqqaesdteuXXX8448/+rKL6Yqz7uhHH32k49q1ayf5Omc9H7P2z/79+62cuWz63LlzrVzHjh2tNjWffMe5tP306dN17Ky9Yx5vjz76qJWrXr26jseOHWvlnnjiCR1T4yk0medfIiIjR4602mZd4+jo6CS3k5CQYLXNc4oFCxZYuT///FPHx44d87yzIaRMmTI6/uyzz6xcvnz5knxd5syZdewcu+Q46ybed999N42dzp8/b7Xffvttj/fpL9zxBAAAAAAAAFdw4QkAAAAAAACuCFPmvJPknmgs4ekPzukx5pS59evXW7kVK1bo2LwNVUTkiy++0HFiYqKVi4qKstpffvmljs1b0EXs6Qzbtm2zchcuXEhyH27wcMg84u9xTY5zmuJdd92lY+dys2+++aZf+pSUUaNG6fill16yclu3btWxcync5KTlcW3UqJHV/vDDD3U8ePBgK/fWW2/5fP9Zs2a12uYUxz59+iT5ujVr1lhtc+lTX/HluIr4Z2wrVKigY+c0AHMJ9po1a7qyf3O6jvP4CqbpH4E6Zs39mrfBi9jTgJ3LbadVd999t46d04Fee+01HZ8+fdon+0vL78VuaNCggdVeuHCh1TanEZlTEkREfvvtN/c6lkLBPq7O0hDmec6vv/5q5cypVD179rRyV65cSXIfGTL88//N8+fPt3LmNDwRkccff1zH5rS/YJMWPmOd5yjmlBjzXFfkxumRSXnxxRet9rPPPqvj2267LaVdDErBfsz62/jx4632gAEDPH5tbGxskq9zfud1W1obV/P7aenSpV3fn/Nn8vT3ZZapELHP348ePZr6jt2CJ/3kjicAAAAAAAC4ggtPAAAAAAAAcAUXngAAAAAAAOAKz9f28wOz5pJZb0nErjninIdu2rhxo9WuVKmSjg8ePGjlihYtarWPHDmiY+dShnBHuXLldFyoUKEA9iRlzDoqTiNGjPBjT4JDs2bNrLZZW8aNmk4iIrVq1dKxs+5Pzpw5PdpGkyZNktzmunXrvO5bWvP0009b7U6dOunYuXSruZyucwl2s/aZc1lXU/78+a22c8nooUOH6ti5tO/ixYt1bC4fnZ6YSyE76yG2adNGxwcOHLByf/31l7sdS4XcuXPruG3btlbO/HvIkyePlbv99tt1bP7dwnec52PdunWz2osWLdLxPffcY+WCqcZTsEuuHqGzjqJZBy8lzHPbp556ysqZtbpE7PppztqqztpySN61a9estllv5fjx415tc968eVZ79OjROq5bt66VW716tVf7gP+Fh9tfzc3zKme9WyezvtvkyZOtnFlv1axNjFuLjo4OdBc8UrZsWav97bff6njatGlWznz/OHTokLsdM3DHEwAAAAAAAFzBhScAAAAAAAC4IqBT7SIiIqy2ubSrObVOxL6F9KuvvvJ4H87pdSZ/3lqGm/v3v/+t4+zZsyf5vMTERH90J0mRkZFW27wl3XnL6tq1a/3Sp2DSvn17q/3JJ5/4fB/mVFwRe1lZ59S6JUuW6Pjdd9+1cubUv1KlSlm5LFmypLabaUadOnV0bL6/ith/771797ZyM2fO1PHly5e92veJEyestnMJ2JMnT+rYebu4OdW6cuXKVm7Lli1e9SetMY+3Tz/91MqZS2yXLFnSyo0dO1bH5pRJEZHff//dl10UkRuns1erVk3HzqlD5t/jnXfe6fE+atas6WXv4K2lS5dabXPa17333mvlVqxY4Zc+hTrnlGdvp9qZnOcuL7/8stU2z7Wd09lr1KiR6v2nJ5cuXbLa9evX17EbU6CLFSvm823CP8ypdSIiL7zwQpLPjY+Pt9rDhw/X8axZs3zbsXTs559/1nHBggWTfN7u3butdpcuXXScI0cOK2d+NzG3L3Lj98jY2Ngk95kvXz4dT5kyxcoVKVJExyNHjrRyZnmhuXPnJrl9X+OOJwAAAAAAALiCC08AAAAAAABwBReeAAAAAAAA4Aq/13jKli2bjl966SUrFxMTo2NnDZDXX39dx8G8JDSSZ46/SPJLg3700Uc6di4D6W/Nmze32mYNsunTp1u5M2fO+KNLAVeuXDkdm8u7i4j07NnT5/sza8CJiFStWlXHH374oZXr0KGDjs3lo0VEzp07p+OLFy9auZUrV6a6n2nFZ599pmNn/SyzToBzzrg/zJgxQ8dPPPGElTPrBJlz29MTc76/s4ZOw4YNddyyZUsr16RJEx2byy6L2PW6nPWezJpfixcvTrJfuXLlstrOsXO+//uCs/YMbIUKFdLxY489ZuXMJddPnz5t5cxxXr9+fZLbFLHH1fzcRsr069fPai9atEjHr732mpXbuXOnjrdv3+6T/Ttr7T3zzDM6njp1qpUz6yGyNHvK7du3L9XbcNYeRdoRHm5//R4zZoyOk/te5Kyr+fjjj1vtjRs3+qB3cGrXrp2Ov/32Wytn1lEKCwuzcmbtJudnrHmu5qzxlJy8efNabfNvp3DhwlbOrI+8evVqKxeo7zvc8QQAAAAAAABXcOEJAAAAAAAArvD7VLtHHnlEx+ayzyIihw4d0vH9999v5ZxTeZA2vfnmm1bbuZy9acSIEW53x2OdO3cOdBeCjrnEq3P66/nz51O9fXN5dRGRZs2aWe3vv/9ex3369LFyzul1ph9++EHH5nTB9CY6OlrHyU1HDARzGphzGWqIXL16Vcfm9DkRe8nc7t27W7k8efLoOHPmzElu33ye0+DBgz3up5M5Dcv5Ge+8fdx07do1HTun6DunOqdH5rHcqlUrKzdx4kQdO6cBmCUNnFM/nnzySR0fPXrUyh0+fNhqf/fddzr2xRSi9Gr58uVWe9iwYTo2pz+LiPz3v//VsfM4//TTTz3an/Pzz5yyISLy8ssv69j5t2MuEz558mSP9gffatOmTZK5gwcP+q8jSLGOHTta7QEDBnj0uvr161ttptb5h/kZ6Pwea06RLlu2rJWbNWuWjp1jfODAAY/3b5YxMKdgi9z4Xcm0e/duHTtLxgQKdzwBAAAAAADAFVx4AgAAAAAAgCu48AQAAAAAAABX+L3GU40aNZLMbdu2TcdHjhzxR3fgB2ZtntatWyf5POec9P3797vVJY/kyJFDx/nz5w9gT4JThQoVdPzVV1/5fPtDhgyx2s46RK+++qqOT5486fF2zX5/8sknXvYu7evRo4eOnceauVR3IPzrX//SceXKla3c77//ruN169b5rU9phVmX5fPPP7dy5tLLTzzxhJUza2mZtX9E7LoFZr0lJ7OegYjI119/bbWfeuopHWfLli3J7Zg1rERE6tWrp2PnUsawfz8PP/ywlTNrPM2cOdPKmXU1IyIirJy51LOzZlCBAgWs9tmzZ3VcrFgxKxcfH59c15GM8ePH63jv3r1WbsGCBTpetmxZkrmhQ4dauV9++UXHOXPmtHLOenHm58K0adOs3BtvvKHj+fPnW7lTp04J3Oesi7dhwwYdr1mzxt/dwS3UrFlTx846QSazxqWISM+ePXW8fv1633cMKfLWW29Z7a1bt+p48eLFVi4mJkbHDzzwgJUz6yia9S9vxnyPd9bHNJnvASIio0ePTna7gcAdTwAAAAAAAHAFF54AAAAAAADgCr9PtXMu9WsybxF33h5sTonZvn27z/sF38mePbvVNqd+OHOmRx991GpfvHjRtx1LoTvvvFPHFStWTPJ5zukL6VGpUqV8vk3z9y8i8ttvv1nt1atXe7Sd8uXLW+177rlHx86pQOnJu+++G+guJKlDhw46zpo1q5V75513dHz+/Hm/9Sktci61bLbNJYCdnFPiixYtquPkptE4p9w+++yzVrtBgwZJvtb0yiuvWG2m19nMKRsiInPnztVxu3btrJxzumVSLl++bLWTmwppTtcSEaldu7aOv/vuOytnLuHszMFzy5cvt9rVq1fXsfN4ad++vY4feeQRK2eWtPjmm2+S3We5cuV0/OKLL1q5wYMH6zhDBv4P21/Mcy3zc1IkOKfVpGdhYWFWu0+fPjo2S3k4Oc9rzGnQzvOhCxcuWG1nSQq4zyz54PyuaE6Rq1SpkpWbN2+ejmfMmGHlVq5cabXN93snszRB3759rZw5DTBY8GkBAAAAAAAAV3DhCQAAAAAAAK7gwhMAAAAAAABcEaaUUh490TFX1Vvm7lIyF9V87tSpU62cWbfCrEUhInLgwAEd7969O9l93H333Tp2Lkl45MgRj/vqNg+HzCO+GldTiRIlrPaPP/6Y5HPNJSQfe+wxK5fcst3+YM7VTW6ebMmSJa32zz//7NX+gn1cnX744QcdL1y40MqNGTPGq22WKVNGx85lY3///XerbdZqcjLrk6xdu9bKmTWfnO8Xzn34gi/HVcQ/Y+tvzvoho0aN0vGkSZOs3PPPP6/jQL9HpLVj1m3On8FZh61WrVpJvvbkyZM6dn6GnD17NvWdS4FgH1dn7S6zBkidOnWs3Llz5zzaZqNGjay2WXPijz/+SPa59913n44nTpxo5QoUKKDje++918rt27fPo775SrCPq7ecfbnrrrt0PHv2bCuXP39+HRcpUiTZ7Zq/L+dy32ZNzhYtWlg5syarP6Snz9gvv/xSxw8++KCVM+t3nTlzxsolJCRY7XHjxunY+X4STNLyMRsVFWW13ahJ+fbbb1tt89z76NGjPt+fr6TlcfVW27ZtrbZZm9HJ+TOZvy/n91FzzJ3v0/7mybhyxxMAAAAAAABcwYUnAAAAAAAAuIILTwAAAAAAAHBFuL93+Prrr+v4ueee8/h1GTL8c43smWeesXLOti8cP37capu1Kh5//HGf7y+ta9iwoY7N+ixOZs0tEZHevXvr2FmvxZzj6pwrnZwrV65Y7UyZMiX53MTERB2nZM6xOY/2l19+8fh1ococfxHvazyVKlVKxzly5LByI0aM8Hg7vXr10rFZ00lEZNmyZTo+depUSrsIH3jooYestvM9w6z9MmHCBCsX6LpOSJpZW0Yk+ZpOzhokZs0Yf9d0SmucNSfN8xNPazqJ2DXupk2bZuUuXryo48aNG1s5Z82nTz/9VMd79uyxcmZNmo8//tjKNWjQQMeHDh3ysNdwcp67mGNQtWpVK5cvXz4dFypUyMqNHj3aaj/88MM63rt3b5L7dx73/q7xlJ6Y76nx8fFW7vTp0zp21oi5/fbbrfa3336rY+f7SdmyZXXsRl2i9CIl56ze6tOnj9WuX7++jh944AEr53zfhn998cUXVtusyVapUiUrZ17zELHrXD/yyCNWzo3atG7ijicAAAAAAAC4ggtPAAAAAAAAcIXfp9qZy2YvWrTIys2fP1/H4eF218xlX523oLnBvB1ZRKRVq1Y6HjJkiJV79dVXXe9PsGvevLmOnbcMmiIjI632oEGDknyu+TfQvXv3JJ/nvKXYudSkcwlnU/v27XW8fPlyK2dOA3Ayp4n4einftMicIhcI5t+fiMjIkSOTfK45dcucTgJ3me/9//nPf6ycOR1HRKRbt246/u2339ztGHxm8ODByebNaRtDhw61cuvWrXOlT6Fo7NixVnvJkiU6dk6/+eyzz3TcpEkTK2e+FzqnYZglBY4dO+Zx35zT6c3PUedxbrYrV65s5cxp8PAds4yEs6TE119/bbXNqXYffPCBlWvatKmOa9eubeWcf5/wnZIlS+rYOQ0uISEhydc5S04ULFhQxy+88IKVM9+Lu3btauU2b97seWfTueS+QzinRHfp0sWjbTqnz/Xo0cNqm9Mkn3jiCSs3fvx4j/YBdziPzw0bNujY+T3VnFonElrfM7njCQAAAAAAAK7gwhMAAAAAAABcwYUnAAAAAAAAuMLvNZ7MpbCdc4WTqxNjLhHpnKs8bNgwHTuXjvUVs46QsxYBRFq2bOnR88xaXSL2svfecs59jY6OttqHDx/WsXOZ7nnz5ul4y5YtVs5Z58s0ZcqUFPcz1EydOlXHkyZNsnJmjaWXX37ZJ/urUqWK1S5TpoyO33jjDStnzp931n9y1gCD7+TPn1/H48aNs3Lt2rXTcWxsrJVzLg9rfk4guOXKlUvHrVu3Tva5Zu2XyZMnu9anUOc8d5ozZ46OnUvZL1u2TMcxMTFWzlyGuVmzZknmUsOs+eSseWK+Fy9cuNDKPfbYYzq+cOGCT/oC7/31119W2zyv2rVrl7+7k255W/PwypUrVtusBec8Dzdr9TnrfpUvX/6m20DKvP/++1Z78eLFHr3ul19+sdrOGk+mO++8M8X9gnsKFChgtZ988kmvtjNw4ECr3bdvX6/7FAjc8QQAAAAAAABXcOEJAAAAAAAArvD7VDtvOW/3NFWsWFHHzql2V69e1fGsWbOs3PTp0612v379dGxOC8GtjRgxQsdvv/12ks87dOiQ1TaXcHYuDWtatWqV1U5uSdfvv//eamfNmlXHJ06csHLmMsB9+vSxcuaUyh9++MHK/fTTT0nuP70wpxs6p1CYS/DedtttVq5///46di4pmydPniT35zwm27Ztm+Rzzel9LNPuP+ay7jVr1rRyO3bs0PGMGTOsnHN6bM6cOXV88OBB33Xw/8udO7fVNqcAO491JM9cijtjxozJPte5RDB8w5zW6lza3ixh4JyWYU7Dc05Dd4M57U7EnpppvneIiGzcuFHH1apVs3KXLl1yoXfwlnOZcKRto0aN0nGrVq2s3DPPPKNj55QfeC4xMdGr1w0aNMjHPYG/3HPPPVY7KipKx7t377ZyM2fOtNrm950OHTpYuTfffFPHbpwv+xp3PAEAAAAAAMAVXHgCAAAAAACAK7jwBAAAAAAAAFekmRpPyfnyyy91bM5NFhEJD//nR+zWrZuVK1GihNWuW7euR/s7cuRICnsY+t59910df/fdd0k+79ixY1b71KlTOnYu1+srp0+fTjK3cuVKHTuXkzZt2LDBalPTwLZ06VKrbdbH6ty5s5UrXbq0ji9fvmzl7r33Xp/0x7nkLHzHrMc0YcIEK1e9evUkX2cuw2zWlhG5sfZahgz//J+Is/ab+Z6eHOdy8CtWrNBxz549rVyWLFl07Kw3BVulSpWs9oABAzx+rT/qCKVH5jHy8MMPWzmzrpbz/TbQYmNjdeysz7l161YdL1++3Mo1bNhQx9QN8w9nrcb69evreP369f7uDvzkww8/tNpDhw69aSwicvHiRb/0KdRlypTJar/22ms6btGiRbKvNc97zNchMO644w4dz50718qZNajHjBlj5RYuXGi1r127puNJkyZZucjIyNR206+44wkAAAAAAACu4MITAAAAAAAAXBESU+327t2rY+dtoY899liSr6tXr16SOfO2NhGRzz//XMcvvvhiSrsY8sxbBjdv3hzAnnhvxIgRVnvixIk6Pnr0qJ97k7Z88MEHVnvHjh067tSpk5Uzp7yaU5xERH799Vcdz5kzx8rlyJHDaj/wwAM6dk6xXbx4sQe9hjfM6XRdunSxcuY4/PDDD17vw5yS5Zw6ZE7DM5ejFRFZs2aNjgcPHmzlsmfPruMrV65YuTx58njd1/Tm559/ttrmtFbn9HWn1PxNwDNpdbrLvn37rLb53uKcotC7d28dv/XWW+52DCIiUrx4caudOXNmHZvTmBFanOdS5md8WFiYv7uTpphTiUVEypUrp+N27dpZOfO8yjy2nLlbGTRokI7j4+M9fh3c8cwzz+jYeZ5pfsd0Tq1zcpYsScu44wkAAAAAAACu4MITAAAAAAAAXMGFJwAAAAAAALgiTCmlPHpiGpnL61zydcaMGTquUqWKlcufP7/VPnjwoI6dNQWGDRvmmw76gIdD5pG0Mq7pAeMamnw5riKBH9vw8H9KA5pLxYqInD59WscnT570V5duylkTLCEhQcfOz4no6GgdHzhwwON9pMdj1rnU8/fff6/j8uXLW7lLly5Z7dtvv13HZh2vYJMexzWY9e3b12pPmDBBx61bt7ZyH330UZLbYVyT179/f6s9fvx4HZt1G0XsY915Ln3ixAkXepe0UPuMDSbOujTHjx/XsbPG4oULF3y+/7R8zDo/Kzds2KDjypUre7XNY8eOWe2XXnrJas+ePVvHvj4ufCktj2tKLF26VMfNmze3cq+++qqOzXNnEZE6depY7caNG+t43bp1Vq5FixY6PnfunPed9QFPxpU7ngAAAAAAAOAKLjwBAAAAAADAFeG3fkra8scff1jtpk2b6rhjx45WzrlE5fDhw3X8559/utA7AEjbrl69quOUTEvzN3NqnZPzc8LZRtIqVKhgtZ3T60zOaU/BPL0OwWvy5MlWu1WrVjo2l6QWSX6qHbznPO4PHz6sY+eUWoSOZs2aBboLadaVK1es9rvvvqvjp59+2sqZpWC2bNli5bZt26bjkSNHWrlDhw6lup8IjCFDhiSZc04fNKew7dq1y8oFenpdSnHHEwAAAAAAAFzBhScAAAAAAAC4ggtPAAAAAAAAcEXI1XhKzty5c5NtAwAA31iwYEGgu4AQcO3aNattLjWdIQP/f+oPzpp5DzzwgI7TWo0RJC8iIkLHzz33nJV77bXXdExtr5SZPn36TWPgVlauXKnjwYMHB7AnqccnNgAAAAAAAFzBhScAAAAAAAC4Il1NtQMAAN779ddfrfZ3332n43vuucfKHTlyxC99Qvpy/fr1m8ZInZ07d1pt81j/8ssvrdyBAwf80ie4r0iRIlZ7xIgROi5RooSVW7hwoY459oDkme+bzZs3T/J5sbGxVvubb76x2m+88YaOL1++7KPeBQZ3PAEAAAAAAMAVXHgCAAAAAACAK7jwBAAAAAAAAFeEKaWUR08MC3O7L/CQh0PmEcY1eDCuocmX4yrC2AYTjlmR3Llz6zhfvnxWbv/+/f7ujk8wrqGJcQ1NfMaGLo7Z0MS4hiZPxpU7ngAAAAAAAOAKLjwBAAAAAADAFUy1S4O4RTE0Ma6hiWkAoYtjNjQxrqGJcQ1NfMaGLo7Z0MS4hiam2gEAAAAAACBguPAEAAAAAAAAV3DhCQAAAAAAAK7wuMYTAAAAAAAAkBLc8QQAAAAAAABXcOEJAAAAAAAAruDCEwAAAAAAAFzBhScAAAAAAAC4ggtPAAAAAAAAcAUXngAAAAAAAOAKLjwBAAAAAADAFVx4AgAAAAAAgCu48AQAAAAAAABX/D/SsWbAGX7kygAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Evaluation on test data \n", + "test_loss = mymodel.evaluate(X_test,y_test)\n", + "print(\"test loss\",test_loss)\n", + "\n", + "test_labels_p = mymodel.predict(X_test)\n", + "test_labels_p = np.argmax(test_labels_p, axis=1 )\n", + "\n", + "n = 0\n", + "\n", + "f,axs = plt.subplots(1,10,figsize = (15,15))\n", + "for i in range(len(test_labels)): \n", + " if n >= 10 :\n", + " break\n", + " if (test_labels_p[i] != test_labels[i]):\n", + " axs[n].imshow(test_images[i],cmap='gray')\n", + " axs[n].set_title(f'{test_labels[i]} -> {test_labels_p[i]}')\n", + " axs[n].axis('off')\n", + " n= n+1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "79b41f2d-d6f6-4ede-8af0-5a4e600157c3", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}