From e91dc7742f04667c3861502167a352cba12f17dd Mon Sep 17 00:00:00 2001 From: rezayaghobi-dev Date: Sat, 11 Jul 2026 22:01:14 +0330 Subject: [PATCH] Initial commit: MLP regularization, CNN BatchNorm comparison, autoencoder denoising --- .gitignore | 20 + README.md | 28 ++ autoencoder-denoising/README.md | 33 ++ .../autoencoder-denoising-result.png | Bin 0 -> 42580 bytes .../encoder-noisy-image.ipynb | 445 +++++++++++++++++ cnn-batchnorm-comparison/README.md | 33 ++ cnn-batchnorm-comparison/conv-pred-BN.ipynb | 448 ++++++++++++++++++ cnn-batchnorm-comparison/conv-pred.ipynb | 431 +++++++++++++++++ docs/Autoencoder-Denoising.md | 19 + docs/CNN-BatchNorm.md | 31 ++ docs/Home.md | 9 + docs/MLP-Regularization.md | 41 ++ docs/images/autoencoder-denoising-result.png | Bin 0 -> 42580 bytes docs/images/cnn-baseline-loss.png | Bin 0 -> 24223 bytes docs/images/cnn-bn-loss.png | Bin 0 -> 20001 bytes docs/images/mlp-baseline-loss.png | Bin 0 -> 24182 bytes docs/images/mlp-baseline-misclassified.png | Bin 0 -> 13228 bytes docs/images/mlp-dropout-loss.png | Bin 0 -> 20657 bytes docs/images/mlp-dropout-misclassified.png | Bin 0 -> 12768 bytes mnist-mlp-regularization/README.md | 40 ++ .../mnist-mlp-pred-dropout.ipynb | 443 +++++++++++++++++ mnist-mlp-regularization/mnist-mlp-pred.ipynb | 436 +++++++++++++++++ 22 files changed, 2457 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 autoencoder-denoising/README.md create mode 100644 autoencoder-denoising/autoencoder-denoising-result.png create mode 100644 autoencoder-denoising/encoder-noisy-image.ipynb create mode 100644 cnn-batchnorm-comparison/README.md create mode 100644 cnn-batchnorm-comparison/conv-pred-BN.ipynb create mode 100644 cnn-batchnorm-comparison/conv-pred.ipynb create mode 100644 docs/Autoencoder-Denoising.md create mode 100644 docs/CNN-BatchNorm.md create mode 100644 docs/Home.md create mode 100644 docs/MLP-Regularization.md create mode 100644 docs/images/autoencoder-denoising-result.png create mode 100644 docs/images/cnn-baseline-loss.png create mode 100644 docs/images/cnn-bn-loss.png create mode 100644 docs/images/mlp-baseline-loss.png create mode 100644 docs/images/mlp-baseline-misclassified.png create mode 100644 docs/images/mlp-dropout-loss.png create mode 100644 docs/images/mlp-dropout-misclassified.png create mode 100644 mnist-mlp-regularization/README.md create mode 100644 mnist-mlp-regularization/mnist-mlp-pred-dropout.ipynb create mode 100644 mnist-mlp-regularization/mnist-mlp-pred.ipynb 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 0000000000000000000000000000000000000000..877e941bc16b10bf134c3fa15f1f681bf889753f GIT binary patch literal 42580 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%0D~`%Ewq@KdtqPhr8kYJ{c!lMe+XwxS;+?3 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 literal 0 HcmV?d00001 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/s4773g9fPjwYJ1MBEddXZ1NnTq1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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+yyycQq0ReO3a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nf6vUyfjiArMW7kiaJKiciorK4N1NG5JPz/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 0000000000000000000000000000000000000000..877e941bc16b10bf134c3fa15f1f681bf889753f GIT binary patch literal 42580 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%0D~`%Ewq@KdtqPhr8kYJ{c!lMe+XwxS;+?3 ztSF2O&}rC+p%!R}ToKZ?Nc6N1cXS;&U-{WGU#BflnY^P>{hVc_I<9RY>ZEGI@#DF# zyn_HWaG3zcBLMgImWv|0|J0c?K(8*p2uB0Vm5nDzK+0#yf z%EI~=>RC`n{2)M;hydJnjdnFhs62mzJ8C>f&d*L2X~lVJqcOrj)|IO5MqZYr=&s#H z=Cl3jek&kiQWTf})?A5GcaO8{k=b6xR`O{d>fqcyPwJpwzf0M~gCVmEiW3y}+Ztx4+FbNd49upvECupz9>d8w1v^I%tAI`U`{ zygiy@5?YV%%Dqo4gPtNJigmOUT>J-DYqF=>^=o9A))q=@`K8{@457~$T#hjkYz)x0 zZb7IC@oP;5)lOrNkYrQdK$t*7`B~9A7%{z&VMbBjkOSkSwlIh}O$CK;s(Fq9u!6)f zI0R6SFzGol0fsy8A>@t`$H%U#+gYYyd7q|_g}CC8K^S4akMwG+FWRn?chcoR{R{3{ z>N8*I50qVH-?B~`+{?RL?Qi^;;{jXodrW2QzMv16V3b2_wpsByUNyJI*e?}+`Ox_0 zxHgxzU_73XQ*cuNgGVPx^28fOhd*|PYX_ZgZ$>v9q|T>+fwWl+UBm_gX*qer=R5)z zQ`y4)<_#%_*IIF#1|rInAv-^y1!OT3^7=@6))S|@>gMg4wOc!7$?i=Nhm3cnY+G;T z@CiCM@B!m_eDjsM7w$7qEHMQr3F4S$4#v4=D0(JlP_v8VWf^oLs^5I@oHnWCWIFk8 zysQZh^TA?at&B+Vgl!%%!;AcSVK@5tpo`eOp3Qx z>)_1CbmYj8B(HM!{05Y=mBK-2Pzt@T--#XGm>S$>&wCgDURT#v>J2HFUbic@9cjlo zIx1$7826B-q3j;N8z3t*iBZs8jPj%6r{SRO=rG{KG&$p`(U<*nxz0p3vMdLP`SqYD z%pJ5BwZkkq66A#(Xa|i{c{JU;Bh=X@uYkNTk#dPo6IaKmw54(gjdzmAq1s~bczN@d zl$td0M#FtRUYs1`ck@N8|L(1n!%bo}k^!9)S`mx@O0rDV?19nWh_5wbZ~T5r>x*WTrC~aWo3bVs2SF_jkN}g@qoWU}doOkF z$CWcsdVq!G0^n&5H3>E9BPi6|B29lwUb0R76DrMQQqbn@GcpCg&;#PZ4ZOw9c`|}c zULk+%z%SsZ?=9{-A}-*ABOYRRLZwL~H-mB3Ls(UwyU63+5ZjIyp!p&*pa_4>->~n} zZCFox2dz7AreiXLW)q$BxGGd1%-mf`M_|7z!nk}vO@aAfI0CzLB2_g!Az~Jj>zAVa zxG0F*Ve)Y7bqH|EdR(5$2Qkza2wc7!wqxe6lg@olQq!ool>~EnaUNM2EWXwlwAA4h z!T!bSa^C?U9-uxm)?fFjR79kF4D?oU}@XmNQ>OP!L z@e#6vaz#u1Bq6b%J2hK_XDD4g6Mq4MN+y6)gvg8yL_=x>S(-}4tF4wcXDxIT>r@4j z(!2;wr(Oms-N1IEC|Cu0Oe^>U9r5A*$K$ZSHGRF1x%cn@92FrMvXtF;ylq|E!Ez_% zmub9Lhz=r!^MyzX|GhCM&Bt)&AP=i`d}GD+7e9%$j~^U9H84f*UZ`S0Bss8_`YCz8 zY<~G7)8%*QsjC>2fJ7Ud>ykX;tXo;Dk$gCJWguFIF2TMNem0sMQHfGS6R>g^y4Qx_g<<~U?bh^x+3}H&X`u;gBK=@6=R){#k$H^J z6=n@E1+kuBxc_zFU1(fwhIy|q+culeURq-`yp9~*g_cGfcwcT1$H60(?SATn^51i2 zkB3?YYm8Wvzd3vP!D$vh@V@?&BMixk(gXA9Dhu!Bne@AQZ^Nos=;A<_5Bo3!@wY|%AXxo?j~wXrS@pSjm#SHfmi7!2tNuFchq2Cd-7{O< zpPUZa@1An)G0)e3=TU=*lk{Dd3Hxda-9e^$&%{m(vJQc#dA`s~p-*jCh3vl`n#uXe zT^UaFOD&>h!ZtP1Ef412Rc7?n=#+^AYW`037wUo%cdGW*oV^30C%lrL$I0no&AmNY zIQcRHs`{j(OJz@1p3>5X-5X&q?Uv6O*Dc?I!_K0?br9J}h_Ia|hMwD=`s67H?12?> zmNBmg;Xcl*3_Gxkr!`fxW1W1>83>QVASM!(RUZ1>PzxQu3zI_En+0X1|C;}_8%@n& z5W{mD{ma8CwB=;G4!S#g8Cgk7fvfHxYDht8Fu>Y|9sa#Z7Mq%s2hbECL5VXt6QsIv z#NHEcfxX=tliRJ)K}RL3!+ZtElFu=6G>hCT3d_tjzNel`^e&w-`wUtDnp<9pi0Bl~ z&J3+(jLMlO0-um%HVt46dN^ZHC~(HoW?Nuoprn7GPt-D}~?z?{o!PV1Z4I^wXWXy~RI8p7p^Xepsm_@=MK z(For;tgYe#(OkX8N+`TCA(0KQ`EvL>0O1F%o^d0@D4v~k~L(eV0 z0S$WQyWhZMY^q!!m7|AE0H+60LU2nCo>C<*((nKI2F#)$1w6Yp%*uQG_&p|d?)jR6 zX%l)2K@HZ6ndyE=x0eEGtXholQ3P_(KJ8f;7yv)^32gAajy(3wA0!kO0@}E0`nDF*ClSZ;#=emcrx> zxglw0+5mdZ&oS}}TgmP*#}fvX1#7rFXBoQVOQ84-%nhwCn)}ksCI_F_d#~Ro%#uEX zc3>a~E?P{ZtaB8`5K?cqz;s6gIC%>CCcr*a^|*@>uS!ogSx9b83g6`a7<9k zF-gY@*Qw3Jtu=@v0OR;A3pNjMma3d^cV^41X=7W}XY4uo>G~IRSTjd@+?q!LKGj16 zfeO~15F6?ySKqN?cKzF!L$Wu zNBt!vCRae}i*|$P|FK!BD;kGQVL88%Wf5vrf0M%LK2U!lt#q-KLu=i+S!k{H6JbSL zEofA2ED$5=LOJM#_99sH-#aojbtOemE<)f5=!iFg=#?Wt0(pJ|NZ6}OH!d}y#(=54 z_-%pV#G995prQok9(V=rw3GQ1)$Rd5LS-l`ym_{0M}3bW7z}Q3K*jAV#?P@QS3JM| z(1;UU9!}=$GK_`(q#981_SsR47E>wv&CAMF4qmf#GUIIR^kz?5^D6rhH4$T4Gy4wi zxH^I%-vTqbSAkOqSG`*dOHQ>|-Y)tCL4TYHesw-<0Wpp(~2M zIWPakVjP0?IS3ln^YM5%;IIU8N{|wf2UiaE7cH`^$tY?v3y$eO2`~+VgxhJ0{GaF* zY?IsyI|CtkllN~xwjU{`9D=08L&0V<3M4?ITpx3rJ;*u(K>f{6HpTUi&+88^Qn)#z zJnDWVQdL}IG}FJCfgon2D=Lf06L%=fl_v3cKGPM(&b_guiokVW3ml=+R(Kp)xGM!U zFz{F+C^rIVt-GS5wnC=i1SPZBoN}XU#C!!CCyw4-o-#@;Syh%$T z*p!nE9T!qA?-ZOwpfk*HMov*M4o`Bb7Lsk1MMU}CZ<|D%slxuCt9`KdzAZ}?6juSJ zUT4I5cx&j0leNp3k)8?XVhVdBBaOFp!>AGk3-R>{{DqLal%e;rw#0Do29Ls+ z#ZzQ&P~~zpBLn;G>U{(VGQTeeOV@LZxd1<2*7Ih2XX>FFU%~hrHPVy4Zd7nc zIO4=cT#e|;X0BcEw*uEhy$L(2gs7GyJgYHGe4gI@(tiKwfb0D=!RdlGbuYBAF0Zzq zNPJg}&N@DDAMu4HQ_9SkVd z*V^2l`(jjpQ~MAQeWm7!-=3mnIl7OAHR$BOpxaj6^I%>rPoU5+rUR$kw3!HHEQXr6 z4IyuLi~VZ)X>1eY?5(l(-vVz_TdY40rlCMI$`Ri9Q-tBWPA*P~Zy14X*;w^v^*2hv zX)ZYqPpdLCH)5LrogNixLv>@BC0$73=T$Bp6Y(D zWI=a`g#2mVnFFM>S$r6}9gmI*=Tqdv2%R_qJ2cE!zQA8N@;d?t^JT4I&;?W!^ddjm zpouwmIJ*s1c|r~HwWc-=125k2NBELLqji0173_zGD>+|#_(z%s4fveRJ9enkds_`P zA;OwLvdj{T?cEhAq3)B<{5F%;OVem~RbO%nbP?0eG3`2$_M{*gk4Ni|BenhB%qxu{ zB6$tAJntf2&VDikE-C{!bpS$I*0_T6$A4zpO|Kg|tYWD=bCyP%gcCte zG2YkR6EAoCcsAzfG2aCnznj^!HPqF&)9fEhExN<&^Q>Ow0?ve$K2$6hGF^chii4}h zg>j@`SSc~qa~3Cs8TrKK;cW(e6KNYK8J#t-shm;O5_$nTEM?iNcPzJ`OFU9X( zshPceJ+?z2+g}u*LvxUvs(%r@!>!>GI0q}xAe9?L08*}H#DNH$BjyMn<84vq49A(p z)x0S^-{f~4mR_zHnPPlYDg06fH?w!R}KYvyqbKz1w= z$W=NL)?IM|8Bak~`H54JHhW&Bbo?pe(!yam__r-mYlBoDS=#&R$+9U}11l;)HDiSV z$&kgLy_f(j-*a#uL*j-aXp9aX_EYf_&Q^DTH6JIg!1x;*8MAdhw{9G{Q6qep=#{Kf zgQF|5t@qC;kNNj6Nm+G45qk@6NCw(=$7f(WUCy6I7!3;j+7|PuT^FLT7hbzxXj_PB zIZ3~tkRXHK3ReY*Z`^VOuL8{@tgEfoT&6mo+^jiR=*O99dgM2E8aGFrpjQ%3-A0p2FY|l-m7j3qen%!%J4F*3g$S`lpNKpme&sR|G+N=OJ^}&%-6R#>9@cBk@$;>%{)+SXo z9jpa4w@Fp(p5mWMP^1t@*fH=q1*({}Z%tVsisG0%E?jCBe3;q^;cPQC#0zBckA2O2 zFX6jnqrreONZ-RkD5WCJiO@+0ATGwW?f#DMswU|*Hr|bJo>dj1s)##O6+cII+ z)$v}|1H!AK%E>a)g@PJIi5&b$0_)TmhH}ZK?PXby&poySDShlVeZ@{0OE+;Fg~}U< zbWbbucN#>XaCz_$!CUevlo;@nqzaZBy#HQM_K3YV9LV6mi2-f4InZ+Q^h}W0RfX!E zaxh@Rk=`S29+Hoi-coZM3MQ=uF6`*BawFT!fr>B9nzSB7(IwrG_{DK#x4*OqtrWXc zrT0e|uw(STEdaoDH9>`;!+(cNMzfPEwCvvWgvO{YaJOWP*b<%H6-{fGg6)nV16>>n zlF|N3o6YM=VN?TD%?H;xx@}^tgOnIU>PT_;P#Gs9yxd?E@>Jkc9c#L988n3mWc?w4 zSLRc~Cd@^5$BGw*TFzbuYQ+Qz3@6L@K|PV%S#wY$L*V)JVQRf`S)O|Ov{R3d38zZl z5vZ7W;D2SECfx^z8fd9zYiycVeYU$%SuLyvIq20BK4$5+sfCF;xsMQ$f<_w5dhR0c z$6;hPx)0ioQE-2-Mx2FnuT^=n zVu~F^lP~5|M&gK7dDgyV4YqzqdmrY%i^^>dYrK6I&M?mjWDmfhLJV0zO3vWi03KO5 zLv;Zf--8PnY*x2-g=A%Yxu;U6l3IWVSJ9@U`nneyeT1;QIOE90zN>s96*?;F{%*fIWl`!h~KQzW0(Y75G0p9wDR%4 z2TEXJB+1JP;jd+fRnp!(`xlhuQiXaz+QW!uwq>oT2*wj z!(7;_`IIh`L&1k<4I8}L{dp%U_#eB_8i5Gia0r=)HJ&e)t6TcK)GPd;U18zG=wq)6 znz?T@Slx${jZ+^^I_}km;o3)f^tQ+jx||ZG)7qi44e6@X-6ZcN^)m;7p@$?4UdS}k zya@GA;1_|%x`H3P_dW`oxjr5=ywpV!?`A0Inyk?7f4VaKOhRyae8P!j{YIGDr@t#i zPUAF!wcH34bngKpYd~P)6nq-8`i4BH^a{~JMP&@$gIzcgJwbB_q<;B}hQUoi$c#P# zHyMgy1EIqgCl1rjoE?+zUQVKy$7c;ynHwa1RYj9OHF2#uJBJrRQ2N_pzwN^dVf8!+ zbJE?%{KRucBlGFR*H_0=jmo|6a28bT|6w8tANpx#k$LN6+d&xg;hNt7Cj0>yRXi}Y zo~9u7q2ZDm!(0q@g_Pwz$UNtYR#eB)XAdV^Z`14;cRq@p=RY`(F26TXnI-uwSoI=W z6L`z~6R}Neo=kO1MJTN+MwxDLU=*1hWq<}QiN_y0RoT&xc&KnJ)(jR!U0fTk3SDif zBVB3GHP?2qzOLlWMFoc7thXV97!{ruxDaNRsWUM!|1byIpg6J4-r>fn$!O&RO@x#= zhV6FY?ZtIx%f5BH_sAE_m(aHIGB-9J?uI4Q(0)7RX8h{1Oy;(uANNkwtHD~mD9i{- z%!*1ByB+B$VXAz)SOV7=T!ZzT)QL0--JNuTAP;25W%v9I6wMx>XuzVg zDbZtjd$*k1g$Ba8=xH-SyWopq5d9`GW^8=`5Iq9r!}@Y7I_+m7wAcUJa`G3)`%*<} zn(gu)cN>iC6n(|EqrCVC+bTUo+93|sgQ@Zc5r>$TuyoJnv@7xk4myewAMx!o9oF0l zY!e_>wG(PH-9B6$HrU(7DB*id$nrek`T9#-SC8gu##U5SDY)36eLYj5U!qpSEF z{Y7t-@-M77e3ZSx>64t_g|o-kk!=;VQgD@X<`w!mCkK%S^!t#0fZ zwY!99mz@_c@VXkaeo%_^12QdCIX~Jp6`7=zd*dhIb_tfj%vMrp%W1oyTx)-P^wFAh zBaZD(3KgY`0C@1Re3b06ve=AQeXG}TS%g(^rbXPI=Pq)*4kpE!+M?6*_xO||mxw(A z)Tb2+wT7L+F?8(SQ#0MUdouC$P3nnuvs*`00BfE4I-JV2m9kt=bKQ}HHPq8l5Msa( zOaOy`b{Bn+JKq2C?u4UVBE+>NR>OxK#!KI1jQ{nt;Lj0M#Spa8-r+p3fh; zB;&d}VPn1C>(6S^@hP};8*>g^fn?TuN57xzU$A!9Ux0EUh~K7B zH_TIh4s|L?W%7az?rc-2S`TfYl)Y6w07hK!P;ntfBbZf0jbgv_dQHn$ap?@jC5fT{ zXr2b6>%6cQ<*9HG)oUhnQqjmZSY#Mv__JRURD{23o_oKQ>{8B%mIRzmW+pX)!1q>! z>aX0ghBj}^nZ$aM+RY{G(l2jKBzO6_!BpVIvEo)HT|ip)aMp2nt2SwY-z`c6M71U5 zVEBm?_s3_67Pm3RT%x*mUnw)9>2P|-M0uhG<_8+a%D%@RA>_`UFl^9P7_H3|ZH8-< zEf_OO5&rUG-+uO2!&`?V5!Oi@m~*_`HF}~Dw-98<1TDBEGAQHZf~dvr;!|*`Mq6ex zki`ZkHjJw4W4YeT%dT7g*(1&M+Z^*pwyS#7e}pRZx&RJ}m-tcu7Owr6taHw?##YUL z_f7gQstX-+ePUZ$#7{-gdy(ws!$w|LQ`QYkadX`e%wYYsd=AQzzGCd!JG8R{ zZ`NAbSw=Pdw)VFl+2)*V$m;D19D){neK}>~kU>pC<#(3!eu4^B+nm>{yXsrY&LFrf z6<*LQ;fulmS_1&_5_66bDd71-S_T^f`1pg*ebJ=la#Vs>K^zFT9OiM^Z}+^vZ3S=4 z8{OdL@Sxy0w$oCB!$MpPTT7c=_~oIzH@2O2eNp9>_jcX1e$;1nO+3AY-QUI)ltErFS3 zothEN;s4c}+Ni!7lX8-NJ{M-FJ;%sqq!JRel%Tx}x*gJJBdfHBQ|frtZ`U+6FZx@= z364U_VGM+q&L2qWqv@QE&AR!R5vUe_jrMi5zomK9z1m{zJ$+RXq+Z5AdZ?Okq^>oK zUcVCj537%)XiOEkBHiw70rJcdhK*Bv>*rQVu1~a}qpuXIVO5PusDp!Lkm?9DgfT^o zR=ahK1BQLn%{#|o90yW*boDqI(fL3kpLFEl*o|MR30Hi0D7@*gegmQc1my|>;_NR* z!Z9ta5|WR|(l#Ky-Vyg-z6r;YQPqlk^280=OlYRpiNTx>AhCg_th43;wyww5eLuY^ zwdujOM1{XC{;fk9AXN}5i2P&#bmCk+(zAx~G#t1N`)DO!)Et`~g=6K18OYUrn34M; zK;Lp^rRuob@J0U^+|^~g?WnhhzX(V!P}+u{J)nwz>!0j+6WT~cq~e4;Hu;c26BuzN?PvsWhX>z@Ko^a zTlqbksD$IU890~`1{S>y zkJ)ZDF@FLkhKc7P)_P-Jcbi0PsQJZTOu-k!tK{b3PanCVK@F~k8(^SMz4Y|G8F9nFi;AK=zq;4`GsZ2nqRc&pEck2|9JT)%-CP*zdt*O j|7?Bx^F{y5H_R`eQw|Kc^ra^a{c!W6*duv|&tLyPf5++G literal 0 HcmV?d00001 diff --git a/docs/images/cnn-baseline-loss.png b/docs/images/cnn-baseline-loss.png new file mode 100644 index 0000000000000000000000000000000000000000..87892d6b88c36af7b9f45147e1ea5cd4e82efcb0 GIT binary patch literal 24223 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 literal 0 HcmV?d00001 diff --git a/docs/images/cnn-bn-loss.png b/docs/images/cnn-bn-loss.png new file mode 100644 index 0000000000000000000000000000000000000000..1e3d3a56dd4efff6f9474d76609b58b4845f8982 GIT binary patch literal 20001 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

O3hfm{okJj9Eri+)l)EYiNfp&9`v2olQ~(> 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

}&hJ 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

    w_P9bZu<#^dxyg(8?r@DUpVKiLkH6=Z03VEsX$7 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 literal 0 HcmV?d00001 diff --git a/docs/images/mlp-dropout-misclassified.png b/docs/images/mlp-dropout-misclassified.png new file mode 100644 index 0000000000000000000000000000000000000000..72748347b5556549c310b77210e2e12455e7c3c0 GIT binary patch literal 12768 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 Z6Z=icxfI%dKHg_t(bUr*T)1)n{{Zdz1Nr~} literal 0 HcmV?d00001 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+0bH7vpmWlqbj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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": "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": "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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": 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+9I9uzZU729UJYWjtf169fLbbfdJpUrV7Yej4mJkcTERFmxYoXX2w5l69evl7p1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9evreP369f7uDvzkww8/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 +}