From 237b931f877a24cdf59733063c4f75f169cd97f9 Mon Sep 17 00:00:00 2001 From: RVP20 <77159539+RVP20@users.noreply.github.com> Date: Mon, 6 Jun 2022 08:57:39 +0530 Subject: [PATCH 1/5] Add files via upload --- Assignment 1/201043_Tanush_Assignment1.ipynb | 330 +++++++++++++++++++ 1 file changed, 330 insertions(+) create mode 100644 Assignment 1/201043_Tanush_Assignment1.ipynb diff --git a/Assignment 1/201043_Tanush_Assignment1.ipynb b/Assignment 1/201043_Tanush_Assignment1.ipynb new file mode 100644 index 0000000..2a491ff --- /dev/null +++ b/Assignment 1/201043_Tanush_Assignment1.ipynb @@ -0,0 +1,330 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Copy of CV with TF: Assignment 1.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "### **Aim** \n", + "The motive of this assignment is to make predictions using **Linear Regression**. To make sure you truly understand how the underlying algorithm works, you are to implement it from scratch." + ], + "metadata": { + "id": "RB2d1J1f1CF7" + } + }, + { + "cell_type": "markdown", + "source": [ + "### Generating the dataset \n", + "Run the cell below to create the dataset. It further splits the available data into training and testing. Please do not edit this cell.\n" + ], + "metadata": { + "id": "a_S80lf6H4Xv" + } + }, + { + "cell_type": "code", + "source": [ + "from sklearn import datasets\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "# Generate the data\n", + "X, y = datasets.make_regression(n_samples=100, n_features=5, noise=20, random_state=4)\n", + "\n", + "# Split the data\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234)" + ], + "metadata": { + "id": "yX0zqXcHIQHP" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Visualizing the data \n", + "Use `matplotlib` to visualize the given data." + ], + "metadata": { + "id": "Zj4rrRXGJBXy" + } + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "corr=np.corrcoef(X_train,rowvar=False)\n", + "plt.matshow(corr);\n", + "\n", + "\n", + "\n", + "# Your code here" + ], + "metadata": { + "id": "zxfi8dkBJOUi", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 275 + }, + "outputId": "ea3b9540-2920-4958-f59a-740b3939b57c" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "You should be able to see the linear relations between `y` and the features in vector `X`." + ], + "metadata": { + "id": "r7vndSBAJceF" + } + }, + { + "cell_type": "markdown", + "source": [ + "### Gradient Descent Review \n", + "1. #### Cost function\n", + "Define the `cost function` to measure the difference between predictions and target outputs. Here, we are working with first degree polynomial, so derivatives are easy to calculate. ( Linear function `y = wx +b` ) \n", + "\n", + "$$Error = \\frac{1}{N}\\sum_{i=1}^N (y_i - \\overline{y}_i)^2 = \\frac{1}{N}\\sum_{i=1}^N (y_i - (x_iw+b))^2 $$ \n", + "\n", + " where `N` is the number of samples \n", + " \n", + "\n", + "\n", + "2. #### Compute the derivative\n", + "$$\\frac{\\delta Error}{\\delta w} = \\frac{2}{N}\\sum_{i=1}^N -x_i(y_i -(m x_i +b )) $$\n", + "$$\\frac{\\delta Error}{\\delta b} = \\frac{2}{N}\\sum_{i=1}^N -(y_i -(m x_i +b )) $$\n", + "3.

Update current parameters

\n", + "$$ w:= w- learning\\_rate \\cdot \\frac{\\delta Error}{\\delta w} $$ \n", + "$$ b:= b- learning\\_rate \\cdot \\frac{\\delta Error}{\\delta b} $$ \n", + "4.

Repeat until it fits good enough

\n" + ], + "metadata": { + "id": "b4I9Z3epNvBM" + } + }, + { + "cell_type": "markdown", + "source": [ + "### Model definition\n", + "\n", + "Complete the functions in the class below. Hints provided at appropriate places." + ], + "metadata": { + "id": "kBtUcOVnJu-I" + } + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "\n", + "class LinearRegression:\n", + "\n", + " # The __init__ is called when we make any object of our class. Here, you are to specify the default values for \n", + " # Learning Rate, Number of Iterations, Weights and Biases. It doesn't return anything.\n", + " # Hint: Google what a `self pointer` is and figure out how it can be used here.\n", + " def __init__(self, learning_rate=0.001, n_iters=1000,w=np.random.rand(X.shape[1]),b=1):\n", + " self.learning_rate=learning_rate\n", + " self.n_iters=n_iters\n", + " self.w=w\n", + " self.b=b \n", + "\n", + "\n", + "\n", + "\n", + " #pass # Uncomment this when you're done with this function\n", + "\n", + "\n", + " # The following function would be the heart of the model. This is where the training would happen. \n", + " # You're supposed to iterate and keep on updating the weights and biases according to the steps of Gradient Descent.\n", + " def fit(self, X, y):\n", + " \n", + " n=X.shape[0]\n", + " feature_count = X.shape[1]\n", + " for i in range(self.n_iters):\n", + " pred=np.matmul(X,self.w)+self.b\n", + " #error=np.sum(np.dot(pred-y,pred-y))/n\n", + " derivative = np.zeros(feature_count)\n", + " for j in range(feature_count):\n", + " test=np.dot(X[:,j],(y-pred))\n", + " derivative[j] = -2*np.sum(np.dot(X[:,j],(y-pred)),axis=None)/n\n", + " derivative_b=-2*np.sum(y-pred)/n \n", + " self.w=self.w-self.learning_rate*derivative\n", + " self.b=self.b-self.learning_rate*derivative_b\n", + " \n", + " \n", + "\n", + " # Gradient Descent code goes here\n", + "\n", + " #pass # Uncomment this when you're done with this function\n", + " \n", + " \n", + " # This function will be called after our model has been trained and we are predicting on unseen data\n", + " # What is our prediction? Just return that\n", + " def predict(self, X):\n", + " # Code goes here\n", + " return np.matmul(X,self.w)+self.b\n", + " \n", + "\n", + " #pass # Uncomment this when you're done with this function" + ], + "metadata": { + "id": "dGnFNPJx3I28" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Initializing, Training & Predictions" + ], + "metadata": { + "id": "EvyInkTKPn7W" + } + }, + { + "cell_type": "code", + "source": [ + "# Now, we make an object of our custom class.\n", + "regressor = LinearRegression() # You may pass the custom parameters or let the default values take it ahead\n", + "\n", + "# Call the fit method on the object to train (pass appropriate part of dataset)\n", + "\n", + "\n", + "# Now, let's see our what our model predicts\n", + "regressor.fit(X_train,y_train)\n", + "predictions = regressor.predict(X_test) # pass appropriate part of dataset" + ], + "metadata": { + "id": "nvItUpAkHTiv" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Evaluate the model \n", + "\n", + "Return [Mean Squared Error](https://en.wikipedia.org/wiki/Mean_squared_error) & [R2 Score](https://www.ncl.ac.uk/webtemplate/ask-assets/external/maths-resources/statistics/regression-and-correlation/coefficient-of-determination-r-squared.html#:~:text=%C2%AFy) from the functions below." + ], + "metadata": { + "id": "tzK6cq8eRD4Q" + } + }, + { + "cell_type": "code", + "source": [ + "def mean_squared_error(y_true, y_pred):\n", + " return np.sum(np.dot(y_true-y_pred,y_true-y_pred))/y_true.shape[0]\n", + "\n", + " # return the mean squared error\n", + " #pass # Uncomment this when you're done with this function\n", + "\n", + "\n", + "def r2_score(y_true, y_pred):\n", + " rss=np.sum(np.dot(y_true-y_pred,y_true-y_pred))\n", + " tss=np.sum(np.dot(y_true-np.mean(y_true),y_true-np.mean(y_true)))\n", + " return 1-rss/tss\n", + "\n", + " \n", + " # return the r2 score\n", + " #pass # Uncomment this when you're done with this function\n", + " \n", + "\n", + "mse = mean_squared_error(y_test,predictions) # Pass appropriate parts of dataset\n", + "print(\"MSE:\", mse)\n", + "\n", + "accu = r2_score(y_test,predictions) # Pass appropriate parts of dataset\n", + "print(\"Accuracy:\", accu)" + ], + "metadata": { + "id": "WqkrvDzcRF5m", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "23cb6ae7-119b-4f78-ea4e-13d6821359c9" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "MSE: 655.5771899128939\n", + "Accuracy: 0.9380225238158303\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "np.mean(predictions)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "9iIzQNJm2iB9", + "outputId": "8f7d257c-0a5b-451c-ddb1-88e25caeb077" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "38.07692227576615" + ] + }, + "metadata": {}, + "execution_count": 45 + } + ] + }, + { + "cell_type": "code", + "source": [ + "" + ], + "metadata": { + "id": "dUQREbqRJU67" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file From 22b61a6d68fada9a28eb08df3a7a4df47b518938 Mon Sep 17 00:00:00 2001 From: RVP20 <77159539+RVP20@users.noreply.github.com> Date: Fri, 10 Jun 2022 23:35:56 +0530 Subject: [PATCH 2/5] Rename 201043_Tanush_Assignment1.ipynb to A1_201043.ipynb --- .../{201043_Tanush_Assignment1.ipynb => A1_201043.ipynb} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename Assignment 1/{201043_Tanush_Assignment1.ipynb => A1_201043.ipynb} (99%) diff --git a/Assignment 1/201043_Tanush_Assignment1.ipynb b/Assignment 1/A1_201043.ipynb similarity index 99% rename from Assignment 1/201043_Tanush_Assignment1.ipynb rename to Assignment 1/A1_201043.ipynb index 2a491ff..418a338 100644 --- a/Assignment 1/201043_Tanush_Assignment1.ipynb +++ b/Assignment 1/A1_201043.ipynb @@ -327,4 +327,4 @@ "outputs": [] } ] -} \ No newline at end of file +} From c63398156563d16ec88c857b4e95d285c1178894 Mon Sep 17 00:00:00 2001 From: RVP20 <77159539+RVP20@users.noreply.github.com> Date: Thu, 16 Jun 2022 18:42:39 +0530 Subject: [PATCH 3/5] Add files via upload --- Assignment 2/A2_201043.ipynb | 1267 ++++++++++++++++++++++++++++++++++ 1 file changed, 1267 insertions(+) create mode 100644 Assignment 2/A2_201043.ipynb diff --git a/Assignment 2/A2_201043.ipynb b/Assignment 2/A2_201043.ipynb new file mode 100644 index 0000000..cabc388 --- /dev/null +++ b/Assignment 2/A2_201043.ipynb @@ -0,0 +1,1267 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "UxcaEbrCy1g_" + }, + "source": [ + "# Assigment 2: Deep Learning" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "h2JON-_Oy79w" + }, + "source": [ + "## Generate Dataset\n", + "\n", + "This is the same code from Assignment 1" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "id": "hgpG3WDuypfa" + }, + "outputs": [], + "source": [ + "from sklearn import datasets\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "# Generate the data\n", + "X, y = datasets.make_regression(n_samples=10000, n_features=5, noise=5, random_state=4)\n", + "\n", + "# Split the data\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=69)\n", + "X_train,X_val,y_train,y_val=train_test_split(X_train,y_train,test_size=0.2, random_state=69)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "r6it-Rm7zD1Y" + }, + "source": [ + "## Visualize Dataset\n", + "This is the same code from Assignment 1" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 282 + }, + "id": "UautPVj1yzaQ", + "outputId": "3e0edf82-f02e-46bd-b94f-dd6e3a855f61" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 55 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "plt.scatter(X_train[:,1],y_train)\n", + "\n", + "# Your code here" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XMXb9lTyzGHE" + }, + "source": [ + "## Model Definition\n", + "\n", + "Using TensorFlow, build a model with the following definition:\n", + "> Input of shape 5 \\\\\n", + "> Dense of shape 5 \\\\\n", + "> Dense of shape 5 \\\\\n", + "> Dense of shape 1 \\\\\n", + "\n", + "Use Mean Square Error Loss and Stochaistic Gradient Descent (SGD) Optimizer\n", + "\n", + "Use Gradient Decay with appropriate parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "id": "r32N1xK2ziOs" + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "\n", + "from tensorflow import keras\n", + "\n", + "model=keras.Sequential([\n", + " tf.keras.layers.Dense(units=5, activation=\"relu\", input_shape=[5]),\n", + " tf.keras.layers.Dense(units=5, activation=\"relu\"),\n", + " tf.keras.layers.Dense(units=1)\n", + "\n", + "])\n", + "optimizer=tf.keras.optimizers.SGD(learning_rate=0.001,decay=0.00001)\n", + "model.compile(optimizer=optimizer, loss='mse', metrics='mse')" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ScD9PGiNRd09", + "outputId": "e7f882e0-9b04-4642-ae4b-70d24f295acd" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 1676.2841 - mse: 1676.2841 - val_loss: 31.3073 - val_mse: 31.3073\n", + "Epoch 2/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 300.1492 - mse: 300.1492 - val_loss: 41.0943 - val_mse: 41.0943\n", + "Epoch 3/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 168.5267 - mse: 168.5267 - val_loss: 43.0184 - val_mse: 43.0184\n", + "Epoch 4/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 210.8442 - mse: 210.8442 - val_loss: 51.8537 - val_mse: 51.8537\n", + "Epoch 5/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 182.4361 - mse: 182.4361 - val_loss: 209.0396 - val_mse: 209.0396\n", + "Epoch 6/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 172.0809 - mse: 172.0809 - val_loss: 185.9463 - val_mse: 185.9463\n", + "Epoch 7/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 223.5035 - mse: 223.5035 - val_loss: 183.4053 - val_mse: 183.4053\n", + "Epoch 8/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 115.7981 - mse: 115.7981 - val_loss: 959.5168 - val_mse: 959.5168\n", + "Epoch 9/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 147.0970 - mse: 147.0970 - val_loss: 31.4911 - val_mse: 31.4911\n", + "Epoch 10/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 129.0366 - mse: 129.0366 - val_loss: 1249.3760 - val_mse: 1249.3760\n", + "Epoch 11/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 213.1548 - mse: 213.1548 - val_loss: 64.4150 - val_mse: 64.4150\n", + "Epoch 12/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 143.0823 - mse: 143.0823 - val_loss: 130.4944 - val_mse: 130.4944\n", + "Epoch 13/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 93.2174 - mse: 93.2174 - val_loss: 29.9675 - val_mse: 29.9675\n", + "Epoch 14/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 134.7364 - mse: 134.7364 - val_loss: 368.7948 - val_mse: 368.7948\n", + "Epoch 15/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 190.2595 - mse: 190.2595 - val_loss: 29.0759 - val_mse: 29.0759\n", + "Epoch 16/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 118.1331 - mse: 118.1331 - val_loss: 358.3374 - val_mse: 358.3374\n", + "Epoch 17/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 102.5836 - mse: 102.5836 - val_loss: 267.1630 - val_mse: 267.1630\n", + "Epoch 18/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 145.7979 - mse: 145.7979 - val_loss: 203.2365 - val_mse: 203.2365\n", + "Epoch 19/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 144.3499 - mse: 144.3499 - val_loss: 33.3678 - val_mse: 33.3678\n", + "Epoch 20/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 176.2779 - mse: 176.2779 - val_loss: 71.9045 - val_mse: 71.9045\n", + "Epoch 21/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 145.4769 - mse: 145.4769 - val_loss: 39.8197 - val_mse: 39.8197\n", + "Epoch 22/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 183.6407 - mse: 183.6407 - val_loss: 39.9151 - val_mse: 39.9151\n", + "Epoch 23/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 360.7788 - mse: 360.7788 - val_loss: 28.3833 - val_mse: 28.3833\n", + "Epoch 24/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 118.7184 - mse: 118.7184 - val_loss: 30.7899 - val_mse: 30.7899\n", + "Epoch 25/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 91.9404 - mse: 91.9404 - val_loss: 84.7589 - val_mse: 84.7589\n", + "Epoch 26/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 66.3164 - mse: 66.3164 - val_loss: 74.6157 - val_mse: 74.6157\n", + "Epoch 27/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 107.2179 - mse: 107.2179 - val_loss: 34.0660 - val_mse: 34.0660\n", + "Epoch 28/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 105.7746 - mse: 105.7746 - val_loss: 32.6544 - val_mse: 32.6544\n", + "Epoch 29/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 127.6796 - mse: 127.6796 - val_loss: 32.6943 - val_mse: 32.6943\n", + "Epoch 30/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 122.2523 - mse: 122.2523 - val_loss: 41.7444 - val_mse: 41.7444\n", + "Epoch 31/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 129.8296 - mse: 129.8296 - val_loss: 38.9482 - val_mse: 38.9482\n", + "Epoch 32/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 103.4486 - mse: 103.4486 - val_loss: 64.6432 - val_mse: 64.6432\n", + "Epoch 33/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 93.4069 - mse: 93.4069 - val_loss: 29.5144 - val_mse: 29.5144\n", + "Epoch 34/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 57.1074 - mse: 57.1074 - val_loss: 45.3356 - val_mse: 45.3356\n", + "Epoch 35/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 77.3814 - mse: 77.3814 - val_loss: 144.6294 - val_mse: 144.6294\n", + "Epoch 36/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 98.4126 - mse: 98.4126 - val_loss: 39.7172 - val_mse: 39.7172\n", + "Epoch 37/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 65.1992 - mse: 65.1992 - val_loss: 28.2599 - val_mse: 28.2599\n", + "Epoch 38/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 73.0371 - mse: 73.0371 - val_loss: 35.3043 - val_mse: 35.3043\n", + "Epoch 39/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 60.9049 - mse: 60.9049 - val_loss: 56.1569 - val_mse: 56.1569\n", + "Epoch 40/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 117.1736 - mse: 117.1736 - val_loss: 61.8734 - val_mse: 61.8734\n", + "Epoch 41/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 88.8195 - mse: 88.8195 - val_loss: 31.0438 - val_mse: 31.0438\n", + "Epoch 42/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 47.2096 - mse: 47.2096 - val_loss: 33.1458 - val_mse: 33.1458\n", + "Epoch 43/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 94.4677 - mse: 94.4677 - val_loss: 30.0927 - val_mse: 30.0927\n", + "Epoch 44/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 78.4756 - mse: 78.4756 - val_loss: 37.8590 - val_mse: 37.8590\n", + "Epoch 45/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 108.7112 - mse: 108.7112 - val_loss: 41.5136 - val_mse: 41.5136\n", + "Epoch 46/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 73.3844 - mse: 73.3844 - val_loss: 28.1440 - val_mse: 28.1440\n", + "Epoch 47/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 59.8244 - mse: 59.8244 - val_loss: 425.8673 - val_mse: 425.8673\n", + "Epoch 48/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 60.7747 - mse: 60.7747 - val_loss: 53.1333 - val_mse: 53.1333\n", + "Epoch 49/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 87.2518 - mse: 87.2518 - val_loss: 26.3401 - val_mse: 26.3401\n", + "Epoch 50/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 56.4395 - mse: 56.4395 - val_loss: 48.9918 - val_mse: 48.9918\n", + "Epoch 51/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 45.8611 - mse: 45.8611 - val_loss: 713.6047 - val_mse: 713.6047\n", + "Epoch 52/300\n", + "200/200 [==============================] - 1s 2ms/step - loss: 79.7266 - mse: 79.7266 - val_loss: 35.8027 - val_mse: 35.8027\n", + "Epoch 53/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 59.1520 - mse: 59.1520 - val_loss: 85.2202 - val_mse: 85.2202\n", + "Epoch 54/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 64.8778 - mse: 64.8778 - val_loss: 53.4552 - val_mse: 53.4552\n", + "Epoch 55/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 64.5091 - mse: 64.5091 - val_loss: 63.5736 - val_mse: 63.5736\n", + "Epoch 56/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 79.7643 - mse: 79.7643 - val_loss: 36.6337 - val_mse: 36.6337\n", + "Epoch 57/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 52.8234 - mse: 52.8234 - val_loss: 34.6852 - val_mse: 34.6852\n", + "Epoch 58/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 66.0544 - mse: 66.0544 - val_loss: 31.7980 - val_mse: 31.7980\n", + "Epoch 59/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 55.0297 - mse: 55.0297 - val_loss: 29.2993 - val_mse: 29.2993\n", + "Epoch 60/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 76.8791 - mse: 76.8791 - val_loss: 41.5193 - val_mse: 41.5193\n", + "Epoch 61/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 42.2656 - mse: 42.2656 - val_loss: 28.7907 - val_mse: 28.7907\n", + "Epoch 62/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 59.3884 - mse: 59.3884 - val_loss: 29.1452 - val_mse: 29.1452\n", + "Epoch 63/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 46.1129 - mse: 46.1129 - val_loss: 48.2529 - val_mse: 48.2529\n", + "Epoch 64/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 64.2818 - mse: 64.2818 - val_loss: 27.5383 - val_mse: 27.5383\n", + "Epoch 65/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 53.8452 - mse: 53.8452 - val_loss: 100.3407 - val_mse: 100.3407\n", + "Epoch 66/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 49.6043 - mse: 49.6043 - val_loss: 49.7985 - val_mse: 49.7985\n", + "Epoch 67/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 46.2555 - mse: 46.2555 - val_loss: 35.3514 - val_mse: 35.3514\n", + "Epoch 68/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 40.1826 - mse: 40.1826 - val_loss: 39.3134 - val_mse: 39.3134\n", + "Epoch 69/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 47.1401 - mse: 47.1401 - val_loss: 30.9199 - val_mse: 30.9199\n", + "Epoch 70/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 47.6297 - mse: 47.6297 - val_loss: 29.3108 - val_mse: 29.3108\n", + "Epoch 71/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 62.4188 - mse: 62.4188 - val_loss: 33.0937 - val_mse: 33.0937\n", + "Epoch 72/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 43.1902 - mse: 43.1902 - val_loss: 33.8907 - val_mse: 33.8907\n", + "Epoch 73/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 63.6301 - mse: 63.6301 - val_loss: 251.6159 - val_mse: 251.6159\n", + "Epoch 74/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 62.1512 - mse: 62.1512 - val_loss: 30.3019 - val_mse: 30.3019\n", + "Epoch 75/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 39.3550 - mse: 39.3550 - val_loss: 93.4315 - val_mse: 93.4315\n", + "Epoch 76/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 44.6357 - mse: 44.6357 - val_loss: 31.0479 - val_mse: 31.0479\n", + "Epoch 77/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 48.6721 - mse: 48.6721 - val_loss: 25.8304 - val_mse: 25.8304\n", + "Epoch 78/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 75.8697 - mse: 75.8697 - val_loss: 77.1883 - val_mse: 77.1883\n", + "Epoch 79/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 47.5350 - mse: 47.5350 - val_loss: 40.4849 - val_mse: 40.4849\n", + "Epoch 80/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 47.7842 - mse: 47.7842 - val_loss: 59.9177 - val_mse: 59.9177\n", + "Epoch 81/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 44.2239 - mse: 44.2239 - val_loss: 26.8212 - val_mse: 26.8212\n", + "Epoch 82/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 43.6404 - mse: 43.6404 - val_loss: 33.7417 - val_mse: 33.7417\n", + "Epoch 83/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 47.7856 - mse: 47.7856 - val_loss: 28.2353 - val_mse: 28.2353\n", + "Epoch 84/300\n", + "200/200 [==============================] - 1s 2ms/step - loss: 41.9507 - mse: 41.9507 - val_loss: 29.1681 - val_mse: 29.1681\n", + "Epoch 85/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 46.3378 - mse: 46.3378 - val_loss: 36.6775 - val_mse: 36.6775\n", + "Epoch 86/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 51.3417 - mse: 51.3417 - val_loss: 36.9674 - val_mse: 36.9674\n", + "Epoch 87/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 44.0610 - mse: 44.0610 - val_loss: 41.4292 - val_mse: 41.4292\n", + "Epoch 88/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 37.3936 - mse: 37.3936 - val_loss: 33.5405 - val_mse: 33.5405\n", + "Epoch 89/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 50.1037 - mse: 50.1037 - val_loss: 26.4793 - val_mse: 26.4793\n", + "Epoch 90/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 42.4569 - mse: 42.4569 - val_loss: 28.5877 - val_mse: 28.5877\n", + "Epoch 91/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 43.5462 - mse: 43.5462 - val_loss: 79.8204 - val_mse: 79.8204\n", + "Epoch 92/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 42.4122 - mse: 42.4122 - val_loss: 41.8755 - val_mse: 41.8755\n", + "Epoch 93/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 39.9030 - mse: 39.9030 - val_loss: 38.3034 - val_mse: 38.3034\n", + "Epoch 94/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 45.7963 - mse: 45.7963 - val_loss: 29.4499 - val_mse: 29.4499\n", + "Epoch 95/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 41.8105 - mse: 41.8105 - val_loss: 37.1334 - val_mse: 37.1334\n", + "Epoch 96/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 32.6528 - mse: 32.6528 - val_loss: 27.6424 - val_mse: 27.6424\n", + "Epoch 97/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 35.2121 - mse: 35.2121 - val_loss: 27.3527 - val_mse: 27.3527\n", + "Epoch 98/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 48.2306 - mse: 48.2306 - val_loss: 36.3283 - val_mse: 36.3283\n", + "Epoch 99/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 40.1053 - mse: 40.1053 - val_loss: 25.8448 - val_mse: 25.8448\n", + "Epoch 100/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 39.1002 - mse: 39.1002 - val_loss: 31.9158 - val_mse: 31.9158\n", + "Epoch 101/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 37.9702 - mse: 37.9702 - val_loss: 73.6238 - val_mse: 73.6238\n", + "Epoch 102/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 51.3819 - mse: 51.3819 - val_loss: 35.0315 - val_mse: 35.0315\n", + "Epoch 103/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 46.1027 - mse: 46.1027 - val_loss: 75.2108 - val_mse: 75.2108\n", + "Epoch 104/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 36.3730 - mse: 36.3730 - val_loss: 27.1349 - val_mse: 27.1349\n", + "Epoch 105/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 34.7280 - mse: 34.7280 - val_loss: 25.6038 - val_mse: 25.6038\n", + "Epoch 106/300\n", + "200/200 [==============================] - 1s 4ms/step - loss: 37.7199 - mse: 37.7199 - val_loss: 32.4903 - val_mse: 32.4903\n", + "Epoch 107/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 47.0293 - mse: 47.0293 - val_loss: 36.1528 - val_mse: 36.1528\n", + "Epoch 108/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 45.9416 - mse: 45.9416 - val_loss: 39.0067 - val_mse: 39.0067\n", + "Epoch 109/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 42.2076 - mse: 42.2076 - val_loss: 39.0539 - val_mse: 39.0539\n", + "Epoch 110/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 56.2468 - mse: 56.2468 - val_loss: 53.1352 - val_mse: 53.1352\n", + "Epoch 111/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 39.9460 - mse: 39.9460 - val_loss: 31.9740 - val_mse: 31.9740\n", + "Epoch 112/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 49.3836 - mse: 49.3836 - val_loss: 27.6586 - val_mse: 27.6586\n", + "Epoch 113/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 35.5670 - mse: 35.5670 - val_loss: 27.1224 - val_mse: 27.1224\n", + "Epoch 114/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 34.7413 - mse: 34.7413 - val_loss: 28.5589 - val_mse: 28.5589\n", + "Epoch 115/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 38.2733 - mse: 38.2733 - val_loss: 26.6793 - val_mse: 26.6793\n", + "Epoch 116/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 36.3586 - mse: 36.3586 - val_loss: 33.0462 - val_mse: 33.0462\n", + "Epoch 117/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 39.5864 - mse: 39.5864 - val_loss: 40.6949 - val_mse: 40.6949\n", + "Epoch 118/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 36.0768 - mse: 36.0768 - val_loss: 34.4485 - val_mse: 34.4485\n", + "Epoch 119/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 38.6801 - mse: 38.6801 - val_loss: 57.5982 - val_mse: 57.5982\n", + "Epoch 120/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 38.2996 - mse: 38.2996 - val_loss: 62.8972 - val_mse: 62.8972\n", + "Epoch 121/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 41.1644 - mse: 41.1644 - val_loss: 35.8361 - val_mse: 35.8361\n", + "Epoch 122/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 36.4659 - mse: 36.4659 - val_loss: 33.9815 - val_mse: 33.9815\n", + "Epoch 123/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 40.3142 - mse: 40.3142 - val_loss: 43.7291 - val_mse: 43.7291\n", + "Epoch 124/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 32.9371 - mse: 32.9371 - val_loss: 30.2020 - val_mse: 30.2020\n", + "Epoch 125/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 36.3444 - mse: 36.3444 - val_loss: 92.4248 - val_mse: 92.4248\n", + "Epoch 126/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 33.6273 - mse: 33.6273 - val_loss: 29.9633 - val_mse: 29.9633\n", + "Epoch 127/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 40.4020 - mse: 40.4020 - val_loss: 31.1033 - val_mse: 31.1033\n", + "Epoch 128/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 33.3756 - mse: 33.3756 - val_loss: 29.3775 - val_mse: 29.3775\n", + "Epoch 129/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 34.1011 - mse: 34.1011 - val_loss: 35.2224 - val_mse: 35.2224\n", + "Epoch 130/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 32.5399 - mse: 32.5399 - val_loss: 34.6022 - val_mse: 34.6022\n", + "Epoch 131/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 44.3354 - mse: 44.3354 - val_loss: 27.7909 - val_mse: 27.7909\n", + "Epoch 132/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 33.6844 - mse: 33.6844 - val_loss: 34.1520 - val_mse: 34.1520\n", + "Epoch 133/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 38.4500 - mse: 38.4500 - val_loss: 37.8914 - val_mse: 37.8914\n", + "Epoch 134/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 32.2424 - mse: 32.2424 - val_loss: 34.9876 - val_mse: 34.9876\n", + "Epoch 135/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 59.5306 - mse: 59.5306 - val_loss: 28.1995 - val_mse: 28.1995\n", + "Epoch 136/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 32.7803 - mse: 32.7803 - val_loss: 35.0641 - val_mse: 35.0641\n", + "Epoch 137/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 34.6107 - mse: 34.6107 - val_loss: 26.3519 - val_mse: 26.3519\n", + "Epoch 138/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 35.7849 - mse: 35.7849 - val_loss: 28.2799 - val_mse: 28.2799\n", + "Epoch 139/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 35.4974 - mse: 35.4974 - val_loss: 32.7376 - val_mse: 32.7376\n", + "Epoch 140/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 33.6968 - mse: 33.6968 - val_loss: 34.3539 - val_mse: 34.3539\n", + "Epoch 141/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 37.0013 - mse: 37.0013 - val_loss: 38.0685 - val_mse: 38.0685\n", + "Epoch 142/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 32.6005 - mse: 32.6005 - val_loss: 26.5830 - val_mse: 26.5830\n", + "Epoch 143/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 32.2273 - mse: 32.2273 - val_loss: 27.5442 - val_mse: 27.5442\n", + "Epoch 144/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 37.1435 - mse: 37.1435 - val_loss: 52.0727 - val_mse: 52.0727\n", + "Epoch 145/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.9909 - mse: 31.9909 - val_loss: 32.8401 - val_mse: 32.8401\n", + "Epoch 146/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 37.4149 - mse: 37.4149 - val_loss: 28.3879 - val_mse: 28.3879\n", + "Epoch 147/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 39.6882 - mse: 39.6882 - val_loss: 37.8535 - val_mse: 37.8535\n", + "Epoch 148/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 33.4870 - mse: 33.4870 - val_loss: 43.2165 - val_mse: 43.2165\n", + "Epoch 149/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 32.8089 - mse: 32.8089 - val_loss: 26.1275 - val_mse: 26.1275\n", + "Epoch 150/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 37.9584 - mse: 37.9584 - val_loss: 26.1740 - val_mse: 26.1740\n", + "Epoch 151/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 40.6630 - mse: 40.6630 - val_loss: 55.9735 - val_mse: 55.9735\n", + "Epoch 152/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 36.0996 - mse: 36.0996 - val_loss: 31.9917 - val_mse: 31.9917\n", + "Epoch 153/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 35.7978 - mse: 35.7978 - val_loss: 29.3909 - val_mse: 29.3909\n", + "Epoch 154/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 35.2352 - mse: 35.2352 - val_loss: 31.0089 - val_mse: 31.0089\n", + "Epoch 155/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 32.1357 - mse: 32.1357 - val_loss: 34.9725 - val_mse: 34.9725\n", + "Epoch 156/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 32.4424 - mse: 32.4424 - val_loss: 26.5206 - val_mse: 26.5206\n", + "Epoch 157/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 34.8693 - mse: 34.8693 - val_loss: 28.3393 - val_mse: 28.3393\n", + "Epoch 158/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 36.5575 - mse: 36.5575 - val_loss: 42.3513 - val_mse: 42.3513\n", + "Epoch 159/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 35.9251 - mse: 35.9251 - val_loss: 55.6915 - val_mse: 55.6915\n", + "Epoch 160/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.9360 - mse: 31.9360 - val_loss: 47.8519 - val_mse: 47.8519\n", + "Epoch 161/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 41.2528 - mse: 41.2528 - val_loss: 31.6793 - val_mse: 31.6793\n", + "Epoch 162/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 32.2460 - mse: 32.2460 - val_loss: 32.3997 - val_mse: 32.3997\n", + "Epoch 163/300\n", + "200/200 [==============================] - 1s 2ms/step - loss: 31.8955 - mse: 31.8955 - val_loss: 39.0949 - val_mse: 39.0949\n", + "Epoch 164/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 33.7594 - mse: 33.7594 - val_loss: 43.3557 - val_mse: 43.3557\n", + "Epoch 165/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.7147 - mse: 31.7147 - val_loss: 70.2171 - val_mse: 70.2171\n", + "Epoch 166/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 35.8984 - mse: 35.8984 - val_loss: 41.9144 - val_mse: 41.9144\n", + "Epoch 167/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.3732 - mse: 31.3732 - val_loss: 32.4982 - val_mse: 32.4982\n", + "Epoch 168/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 32.6095 - mse: 32.6095 - val_loss: 31.6589 - val_mse: 31.6589\n", + "Epoch 169/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.3455 - mse: 30.3455 - val_loss: 27.2976 - val_mse: 27.2976\n", + "Epoch 170/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 32.6441 - mse: 32.6441 - val_loss: 33.4170 - val_mse: 33.4170\n", + "Epoch 171/300\n", + "200/200 [==============================] - 1s 2ms/step - loss: 30.6769 - mse: 30.6769 - val_loss: 32.7430 - val_mse: 32.7430\n", + "Epoch 172/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.3714 - mse: 31.3714 - val_loss: 28.2895 - val_mse: 28.2895\n", + "Epoch 173/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 30.6976 - mse: 30.6976 - val_loss: 34.4153 - val_mse: 34.4153\n", + "Epoch 174/300\n", + "200/200 [==============================] - 1s 2ms/step - loss: 31.5881 - mse: 31.5881 - val_loss: 43.4215 - val_mse: 43.4215\n", + "Epoch 175/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 35.4870 - mse: 35.4870 - val_loss: 26.2377 - val_mse: 26.2377\n", + "Epoch 176/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 33.8885 - mse: 33.8885 - val_loss: 39.0473 - val_mse: 39.0473\n", + "Epoch 177/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 33.8103 - mse: 33.8103 - val_loss: 29.5918 - val_mse: 29.5918\n", + "Epoch 178/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 33.8027 - mse: 33.8027 - val_loss: 32.4275 - val_mse: 32.4275\n", + "Epoch 179/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 33.3614 - mse: 33.3614 - val_loss: 30.2263 - val_mse: 30.2263\n", + "Epoch 180/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 35.0304 - mse: 35.0304 - val_loss: 25.9372 - val_mse: 25.9372\n", + "Epoch 181/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 34.5213 - mse: 34.5213 - val_loss: 56.1477 - val_mse: 56.1477\n", + "Epoch 182/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 31.2262 - mse: 31.2262 - val_loss: 26.1342 - val_mse: 26.1342\n", + "Epoch 183/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.3775 - mse: 30.3775 - val_loss: 29.2732 - val_mse: 29.2732\n", + "Epoch 184/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.6874 - mse: 31.6874 - val_loss: 53.8613 - val_mse: 53.8613\n", + "Epoch 185/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 37.2973 - mse: 37.2973 - val_loss: 32.1033 - val_mse: 32.1033\n", + "Epoch 186/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.1928 - mse: 31.1928 - val_loss: 31.4690 - val_mse: 31.4690\n", + "Epoch 187/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 33.1142 - mse: 33.1142 - val_loss: 27.3909 - val_mse: 27.3909\n", + "Epoch 188/300\n", + "200/200 [==============================] - 1s 2ms/step - loss: 32.2711 - mse: 32.2711 - val_loss: 30.7610 - val_mse: 30.7610\n", + "Epoch 189/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 31.9604 - mse: 31.9604 - val_loss: 31.8905 - val_mse: 31.8905\n", + "Epoch 190/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 33.7608 - mse: 33.7608 - val_loss: 27.8063 - val_mse: 27.8063\n", + "Epoch 191/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.2102 - mse: 31.2102 - val_loss: 27.9006 - val_mse: 27.9006\n", + "Epoch 192/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 29.6960 - mse: 29.6960 - val_loss: 30.5423 - val_mse: 30.5423\n", + "Epoch 193/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 30.3612 - mse: 30.3612 - val_loss: 26.0497 - val_mse: 26.0497\n", + "Epoch 194/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 30.4899 - mse: 30.4899 - val_loss: 27.3925 - val_mse: 27.3925\n", + "Epoch 195/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 31.9965 - mse: 31.9965 - val_loss: 30.4494 - val_mse: 30.4494\n", + "Epoch 196/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 33.0013 - mse: 33.0013 - val_loss: 29.0265 - val_mse: 29.0265\n", + "Epoch 197/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.3561 - mse: 30.3561 - val_loss: 26.5802 - val_mse: 26.5802\n", + "Epoch 198/300\n", + "200/200 [==============================] - 1s 2ms/step - loss: 33.9897 - mse: 33.9897 - val_loss: 30.8974 - val_mse: 30.8974\n", + "Epoch 199/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 29.6138 - mse: 29.6138 - val_loss: 34.5329 - val_mse: 34.5329\n", + "Epoch 200/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 32.4052 - mse: 32.4052 - val_loss: 41.7224 - val_mse: 41.7224\n", + "Epoch 201/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 31.3102 - mse: 31.3102 - val_loss: 27.9744 - val_mse: 27.9744\n", + "Epoch 202/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 33.2324 - mse: 33.2324 - val_loss: 32.6747 - val_mse: 32.6747\n", + "Epoch 203/300\n", + "200/200 [==============================] - 1s 2ms/step - loss: 28.8256 - mse: 28.8256 - val_loss: 29.0262 - val_mse: 29.0262\n", + "Epoch 204/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.1582 - mse: 31.1582 - val_loss: 26.7332 - val_mse: 26.7332\n", + "Epoch 205/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 29.4481 - mse: 29.4481 - val_loss: 26.9708 - val_mse: 26.9708\n", + "Epoch 206/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.1131 - mse: 30.1131 - val_loss: 36.9369 - val_mse: 36.9369\n", + "Epoch 207/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.1368 - mse: 31.1368 - val_loss: 31.4017 - val_mse: 31.4017\n", + "Epoch 208/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 30.4648 - mse: 30.4648 - val_loss: 35.4462 - val_mse: 35.4462\n", + "Epoch 209/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 32.4770 - mse: 32.4770 - val_loss: 34.4770 - val_mse: 34.4770\n", + "Epoch 210/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 32.4858 - mse: 32.4858 - val_loss: 28.5586 - val_mse: 28.5586\n", + "Epoch 211/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.3816 - mse: 29.3816 - val_loss: 26.4834 - val_mse: 26.4834\n", + "Epoch 212/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 31.0980 - mse: 31.0980 - val_loss: 26.1177 - val_mse: 26.1177\n", + "Epoch 213/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.4374 - mse: 29.4374 - val_loss: 27.7916 - val_mse: 27.7916\n", + "Epoch 214/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.7697 - mse: 29.7697 - val_loss: 31.9558 - val_mse: 31.9558\n", + "Epoch 215/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 32.3467 - mse: 32.3467 - val_loss: 30.7923 - val_mse: 30.7923\n", + "Epoch 216/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 31.2814 - mse: 31.2814 - val_loss: 26.9940 - val_mse: 26.9940\n", + "Epoch 217/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.6091 - mse: 29.6091 - val_loss: 28.3422 - val_mse: 28.3422\n", + "Epoch 218/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 32.1960 - mse: 32.1960 - val_loss: 49.6654 - val_mse: 49.6654\n", + "Epoch 219/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 29.9808 - mse: 29.9808 - val_loss: 32.1545 - val_mse: 32.1545\n", + "Epoch 220/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.3252 - mse: 30.3252 - val_loss: 27.7372 - val_mse: 27.7372\n", + "Epoch 221/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.3887 - mse: 31.3887 - val_loss: 26.6582 - val_mse: 26.6582\n", + "Epoch 222/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 28.4452 - mse: 28.4452 - val_loss: 28.3681 - val_mse: 28.3681\n", + "Epoch 223/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.0621 - mse: 31.0621 - val_loss: 31.0310 - val_mse: 31.0310\n", + "Epoch 224/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.9062 - mse: 28.9062 - val_loss: 29.1024 - val_mse: 29.1024\n", + "Epoch 225/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 30.0532 - mse: 30.0532 - val_loss: 38.0381 - val_mse: 38.0381\n", + "Epoch 226/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.5778 - mse: 31.5778 - val_loss: 28.6914 - val_mse: 28.6914\n", + "Epoch 227/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 31.8724 - mse: 31.8724 - val_loss: 25.3193 - val_mse: 25.3193\n", + "Epoch 228/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.0561 - mse: 29.0561 - val_loss: 25.3939 - val_mse: 25.3939\n", + "Epoch 229/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 30.4360 - mse: 30.4360 - val_loss: 29.5448 - val_mse: 29.5448\n", + "Epoch 230/300\n", + "200/200 [==============================] - 1s 2ms/step - loss: 30.1217 - mse: 30.1217 - val_loss: 27.0483 - val_mse: 27.0483\n", + "Epoch 231/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.2947 - mse: 30.2947 - val_loss: 25.9777 - val_mse: 25.9777\n", + "Epoch 232/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.6967 - mse: 28.6967 - val_loss: 25.9547 - val_mse: 25.9547\n", + "Epoch 233/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 28.1880 - mse: 28.1880 - val_loss: 25.6482 - val_mse: 25.6482\n", + "Epoch 234/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.6966 - mse: 28.6966 - val_loss: 31.5578 - val_mse: 31.5578\n", + "Epoch 235/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.6718 - mse: 31.6718 - val_loss: 28.8550 - val_mse: 28.8550\n", + "Epoch 236/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 30.1390 - mse: 30.1390 - val_loss: 30.3282 - val_mse: 30.3282\n", + "Epoch 237/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.2625 - mse: 28.2625 - val_loss: 27.1085 - val_mse: 27.1085\n", + "Epoch 238/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.9216 - mse: 29.9216 - val_loss: 26.9495 - val_mse: 26.9495\n", + "Epoch 239/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.6715 - mse: 29.6715 - val_loss: 31.8445 - val_mse: 31.8445\n", + "Epoch 240/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.2987 - mse: 30.2987 - val_loss: 27.2565 - val_mse: 27.2565\n", + "Epoch 241/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 29.1143 - mse: 29.1143 - val_loss: 29.5156 - val_mse: 29.5156\n", + "Epoch 242/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.9534 - mse: 28.9534 - val_loss: 26.1298 - val_mse: 26.1298\n", + "Epoch 243/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 32.5237 - mse: 32.5237 - val_loss: 31.0305 - val_mse: 31.0305\n", + "Epoch 244/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.8028 - mse: 29.8028 - val_loss: 25.6174 - val_mse: 25.6174\n", + "Epoch 245/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.6185 - mse: 28.6185 - val_loss: 30.0638 - val_mse: 30.0638\n", + "Epoch 246/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 28.8923 - mse: 28.8923 - val_loss: 30.3807 - val_mse: 30.3807\n", + "Epoch 247/300\n", + "200/200 [==============================] - 1s 2ms/step - loss: 30.2761 - mse: 30.2761 - val_loss: 26.9678 - val_mse: 26.9678\n", + "Epoch 248/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.1727 - mse: 29.1727 - val_loss: 32.0441 - val_mse: 32.0441\n", + "Epoch 249/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.0544 - mse: 30.0544 - val_loss: 31.1653 - val_mse: 31.1653\n", + "Epoch 250/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.8647 - mse: 29.8647 - val_loss: 26.4570 - val_mse: 26.4570\n", + "Epoch 251/300\n", + "200/200 [==============================] - 1s 4ms/step - loss: 29.7531 - mse: 29.7531 - val_loss: 32.6554 - val_mse: 32.6554\n", + "Epoch 252/300\n", + "200/200 [==============================] - 1s 4ms/step - loss: 29.7799 - mse: 29.7799 - val_loss: 31.3202 - val_mse: 31.3202\n", + "Epoch 253/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.4074 - mse: 28.4074 - val_loss: 26.6367 - val_mse: 26.6367\n", + "Epoch 254/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.1583 - mse: 30.1583 - val_loss: 29.6750 - val_mse: 29.6750\n", + "Epoch 255/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.9754 - mse: 28.9754 - val_loss: 28.6666 - val_mse: 28.6666\n", + "Epoch 256/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.7022 - mse: 31.7022 - val_loss: 54.7606 - val_mse: 54.7606\n", + "Epoch 257/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.1367 - mse: 28.1367 - val_loss: 26.7502 - val_mse: 26.7502\n", + "Epoch 258/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.6719 - mse: 28.6719 - val_loss: 26.9031 - val_mse: 26.9031\n", + "Epoch 259/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.7571 - mse: 31.7571 - val_loss: 26.8375 - val_mse: 26.8375\n", + "Epoch 260/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.6131 - mse: 29.6131 - val_loss: 29.7888 - val_mse: 29.7888\n", + "Epoch 261/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.1163 - mse: 29.1163 - val_loss: 27.6429 - val_mse: 27.6429\n", + "Epoch 262/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.1609 - mse: 28.1609 - val_loss: 25.4264 - val_mse: 25.4264\n", + "Epoch 263/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 29.9919 - mse: 29.9919 - val_loss: 27.0684 - val_mse: 27.0684\n", + "Epoch 264/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.6014 - mse: 29.6014 - val_loss: 25.4065 - val_mse: 25.4065\n", + "Epoch 265/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.4445 - mse: 29.4445 - val_loss: 29.0791 - val_mse: 29.0791\n", + "Epoch 266/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 33.6222 - mse: 33.6222 - val_loss: 28.7123 - val_mse: 28.7123\n", + "Epoch 267/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.1485 - mse: 30.1485 - val_loss: 34.9153 - val_mse: 34.9153\n", + "Epoch 268/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.4949 - mse: 29.4949 - val_loss: 28.8799 - val_mse: 28.8799\n", + "Epoch 269/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.3532 - mse: 29.3532 - val_loss: 26.3477 - val_mse: 26.3477\n", + "Epoch 270/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.8506 - mse: 29.8506 - val_loss: 25.5078 - val_mse: 25.5078\n", + "Epoch 271/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.6366 - mse: 28.6366 - val_loss: 26.9170 - val_mse: 26.9170\n", + "Epoch 272/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 27.9541 - mse: 27.9541 - val_loss: 40.5188 - val_mse: 40.5188\n", + "Epoch 273/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 28.6598 - mse: 28.6598 - val_loss: 27.5300 - val_mse: 27.5300\n", + "Epoch 274/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.3088 - mse: 29.3088 - val_loss: 29.5244 - val_mse: 29.5244\n", + "Epoch 275/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.2745 - mse: 28.2745 - val_loss: 44.5559 - val_mse: 44.5559\n", + "Epoch 276/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.3554 - mse: 29.3554 - val_loss: 28.4091 - val_mse: 28.4091\n", + "Epoch 277/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.3967 - mse: 28.3967 - val_loss: 26.6665 - val_mse: 26.6665\n", + "Epoch 278/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.2282 - mse: 29.2282 - val_loss: 27.0081 - val_mse: 27.0081\n", + "Epoch 279/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.0236 - mse: 30.0236 - val_loss: 28.9766 - val_mse: 28.9766\n", + "Epoch 280/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.9482 - mse: 28.9482 - val_loss: 26.7408 - val_mse: 26.7408\n", + "Epoch 281/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.1106 - mse: 29.1106 - val_loss: 27.1696 - val_mse: 27.1696\n", + "Epoch 282/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.3061 - mse: 29.3061 - val_loss: 25.7094 - val_mse: 25.7094\n", + "Epoch 283/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.4371 - mse: 28.4371 - val_loss: 35.3043 - val_mse: 35.3043\n", + "Epoch 284/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.5553 - mse: 31.5553 - val_loss: 31.1958 - val_mse: 31.1958\n", + "Epoch 285/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.4400 - mse: 29.4400 - val_loss: 26.9441 - val_mse: 26.9441\n", + "Epoch 286/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.3003 - mse: 30.3003 - val_loss: 29.0530 - val_mse: 29.0530\n", + "Epoch 287/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.4655 - mse: 28.4655 - val_loss: 28.7713 - val_mse: 28.7713\n", + "Epoch 288/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.2094 - mse: 30.2094 - val_loss: 27.8122 - val_mse: 27.8122\n", + "Epoch 289/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.6607 - mse: 29.6607 - val_loss: 27.4368 - val_mse: 27.4368\n", + "Epoch 290/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 27.7003 - mse: 27.7003 - val_loss: 26.0301 - val_mse: 26.0301\n", + "Epoch 291/300\n", + "200/200 [==============================] - 0s 2ms/step - loss: 28.8840 - mse: 28.8840 - val_loss: 28.0009 - val_mse: 28.0009\n", + "Epoch 292/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.0504 - mse: 29.0504 - val_loss: 25.6655 - val_mse: 25.6655\n", + "Epoch 293/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.6057 - mse: 29.6057 - val_loss: 27.0983 - val_mse: 27.0983\n", + "Epoch 294/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.8996 - mse: 28.8996 - val_loss: 33.9243 - val_mse: 33.9243\n", + "Epoch 295/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.6824 - mse: 28.6824 - val_loss: 28.1618 - val_mse: 28.1618\n", + "Epoch 296/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.2078 - mse: 28.2078 - val_loss: 29.5828 - val_mse: 29.5828\n", + "Epoch 297/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.1038 - mse: 29.1038 - val_loss: 26.1291 - val_mse: 26.1291\n", + "Epoch 298/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.2415 - mse: 28.2415 - val_loss: 28.0589 - val_mse: 28.0589\n", + "Epoch 299/300\n", + "200/200 [==============================] - 1s 4ms/step - loss: 28.8503 - mse: 28.8503 - val_loss: 46.1954 - val_mse: 46.1954\n", + "Epoch 300/300\n", + "200/200 [==============================] - 1s 3ms/step - loss: 28.8226 - mse: 28.8226 - val_loss: 26.1128 - val_mse: 26.1128\n" + ] + } + ], + "source": [ + "tf.random.set_seed(69)\n", + "\n", + "history = model.fit(\n", + " X_train, y_train,\n", + " validation_data=(X_val,y_val),\n", + " epochs=300\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "bPyM1flVR7VT", + "outputId": "429b4d8d-442d-4fce-9bed-507d3f831f64" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "63/63 [==============================] - 0s 2ms/step - loss: 26.4007 - mse: 26.4007\n", + "26.400720596313477\n" + ] + } + ], + "source": [ + "loss = model.evaluate(X_test,y_test)\n", + "print(loss[1])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jmeP6vt3z0oA" + }, + "source": [ + "## Plot Loss\n", + "\n", + "Using matplotlib visualise how the loss (both validation and training) is changing, use this information to retrain the model with appropriate parameters.
We ideally want the loss to be constant over the last few iterations." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 265 + }, + "id": "RQTNqPHm0mOi", + "outputId": "d12a021f-c045-4c0a-db89-df68e934c252" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "history_df = pd.DataFrame(history.history)\n", + "history_df.loc[20:, ['loss', 'val_loss']].plot();" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IVrR_vXA7kOt" + }, + "source": [ + "## Evaluation Metrics\n", + "Use the R2 Score function implemented in the first assignment to evaluate the performance of the model." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "id": "-lOHpD8-7ggm" + }, + "outputs": [], + "source": [ + "def r2_score(y_true, y_pred):\n", + " rss=np.sum(np.dot(y_true-y_pred,y_true-y_pred))\n", + " tss=np.sum(np.dot(y_true-np.mean(y_true),y_true-np.mean(y_true)))\n", + " return 1-rss/tss" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dlD8xiYTSdGL", + "outputId": "f759fae4-83ca-4865-a246-148ee5c11afe" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.9981021934986285" + ] + }, + "metadata": {}, + "execution_count": 43 + } + ], + "source": [ + "preds=model.predict(X_test)\n", + "r2_score(y_test,preds.squeeze())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CHqzF1OU0pBg" + }, + "source": [ + "## Your own custom model\n", + "Build a custom model of your own choice.
\n", + "Describe it in detail in Markdown/Latex in the cell below.
\n", + "Visualise the loss, as before." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jF8oTUqq0y0g" + }, + "source": [ + "The model has the following layers:\n", + "> Input layer of size 5 \\\\\n", + "> Hidden layer of size 10 with relu activation \\\\\n", + "> Hidden layer of size 5 with relu activation \\\\\n", + "> Output layer of 1 unit \\\\\n", + "\n", + "The compiler used is adam.\n", + "The loss used is MSE.\n", + "100 epochs have been used." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "id": "1XOk5hJu0oSQ" + }, + "outputs": [], + "source": [ + "from sklearn import datasets\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "# Generate the data\n", + "X, y = datasets.make_regression(n_samples=10000, n_features=5, noise=5, random_state=4)\n", + "\n", + "# Split the data\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=69)\n", + "X_train,X_val,y_train,y_val=train_test_split(X_train,y_train,test_size=0.2, random_state=69)" + ] + }, + { + "cell_type": "code", + "source": [ + "# Your code here\n", + "model=keras.Sequential([\n", + " tf.keras.layers.Dense(units=10, activation=\"relu\", input_shape=[5]),\n", + " tf.keras.layers.Dense(units=5, activation=\"relu\"),\n", + " tf.keras.layers.Dense(units=1)\n", + "\n", + "])" + ], + "metadata": { + "id": "BeTSfV_djDIH" + }, + "execution_count": 46, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "id": "aS0ROZa402Lo" + }, + "outputs": [], + "source": [ + "model.compile(optimizer='adam',loss='mse',metrics='mse')" + ] + }, + { + "cell_type": "code", + "source": [ + "history=model.fit(X_train,y_train,validation_data=(X_val,y_val),epochs=100)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "2vn_SFItjLNC", + "outputId": "fe1609c9-1bbb-430f-e73d-b44cbeba2f76" + }, + "execution_count": 48, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 13608.7529 - mse: 13608.7529 - val_loss: 12586.1650 - val_mse: 12586.1650\n", + "Epoch 2/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 12275.2715 - mse: 12275.2715 - val_loss: 10298.6240 - val_mse: 10298.6240\n", + "Epoch 3/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 8899.3740 - mse: 8899.3740 - val_loss: 6198.0942 - val_mse: 6198.0942\n", + "Epoch 4/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 4636.0630 - mse: 4636.0630 - val_loss: 2512.5562 - val_mse: 2512.5562\n", + "Epoch 5/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 1721.8335 - mse: 1721.8335 - val_loss: 810.3369 - val_mse: 810.3369\n", + "Epoch 6/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 624.6358 - mse: 624.6358 - val_loss: 359.2792 - val_mse: 359.2792\n", + "Epoch 7/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 350.8651 - mse: 350.8651 - val_loss: 276.2025 - val_mse: 276.2025\n", + "Epoch 8/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 295.9746 - mse: 295.9746 - val_loss: 258.4288 - val_mse: 258.4288\n", + "Epoch 9/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 277.3628 - mse: 277.3628 - val_loss: 251.8044 - val_mse: 251.8044\n", + "Epoch 10/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 265.8996 - mse: 265.8996 - val_loss: 240.2702 - val_mse: 240.2702\n", + "Epoch 11/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 255.3853 - mse: 255.3853 - val_loss: 232.6491 - val_mse: 232.6491\n", + "Epoch 12/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 245.1447 - mse: 245.1447 - val_loss: 225.8970 - val_mse: 225.8970\n", + "Epoch 13/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 234.6394 - mse: 234.6394 - val_loss: 215.5998 - val_mse: 215.5998\n", + "Epoch 14/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 223.9099 - mse: 223.9099 - val_loss: 203.4106 - val_mse: 203.4106\n", + "Epoch 15/100\n", + "200/200 [==============================] - 1s 2ms/step - loss: 213.1458 - mse: 213.1458 - val_loss: 193.5069 - val_mse: 193.5069\n", + "Epoch 16/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 201.3265 - mse: 201.3265 - val_loss: 183.1958 - val_mse: 183.1958\n", + "Epoch 17/100\n", + "200/200 [==============================] - 1s 2ms/step - loss: 189.8398 - mse: 189.8398 - val_loss: 172.7327 - val_mse: 172.7327\n", + "Epoch 18/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 177.3586 - mse: 177.3586 - val_loss: 163.4608 - val_mse: 163.4608\n", + "Epoch 19/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 165.0649 - mse: 165.0649 - val_loss: 149.7040 - val_mse: 149.7040\n", + "Epoch 20/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 152.1427 - mse: 152.1427 - val_loss: 137.3576 - val_mse: 137.3576\n", + "Epoch 21/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 139.5791 - mse: 139.5791 - val_loss: 125.7625 - val_mse: 125.7625\n", + "Epoch 22/100\n", + "200/200 [==============================] - 1s 2ms/step - loss: 127.2014 - mse: 127.2014 - val_loss: 116.9279 - val_mse: 116.9279\n", + "Epoch 23/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 115.1704 - mse: 115.1704 - val_loss: 104.5045 - val_mse: 104.5045\n", + "Epoch 24/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 103.9685 - mse: 103.9685 - val_loss: 92.5960 - val_mse: 92.5960\n", + "Epoch 25/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 93.5050 - mse: 93.5050 - val_loss: 84.9866 - val_mse: 84.9866\n", + "Epoch 26/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 84.1484 - mse: 84.1484 - val_loss: 75.9547 - val_mse: 75.9547\n", + "Epoch 27/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 75.8451 - mse: 75.8451 - val_loss: 68.7094 - val_mse: 68.7094\n", + "Epoch 28/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 68.6338 - mse: 68.6338 - val_loss: 63.2305 - val_mse: 63.2305\n", + "Epoch 29/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 62.5801 - mse: 62.5801 - val_loss: 56.8251 - val_mse: 56.8251\n", + "Epoch 30/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 57.4634 - mse: 57.4634 - val_loss: 52.9321 - val_mse: 52.9321\n", + "Epoch 31/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 53.3630 - mse: 53.3630 - val_loss: 48.9235 - val_mse: 48.9235\n", + "Epoch 32/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 49.9535 - mse: 49.9535 - val_loss: 46.0755 - val_mse: 46.0755\n", + "Epoch 33/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 47.0669 - mse: 47.0669 - val_loss: 43.8014 - val_mse: 43.8014\n", + "Epoch 34/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 44.3689 - mse: 44.3689 - val_loss: 42.2291 - val_mse: 42.2291\n", + "Epoch 35/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 42.2920 - mse: 42.2920 - val_loss: 39.6523 - val_mse: 39.6523\n", + "Epoch 36/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 40.2004 - mse: 40.2004 - val_loss: 38.5464 - val_mse: 38.5464\n", + "Epoch 37/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 38.4463 - mse: 38.4463 - val_loss: 37.2931 - val_mse: 37.2931\n", + "Epoch 38/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 36.9455 - mse: 36.9455 - val_loss: 35.7705 - val_mse: 35.7705\n", + "Epoch 39/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 35.6417 - mse: 35.6417 - val_loss: 34.8316 - val_mse: 34.8316\n", + "Epoch 40/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 34.4860 - mse: 34.4860 - val_loss: 33.9528 - val_mse: 33.9528\n", + "Epoch 41/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 33.4356 - mse: 33.4356 - val_loss: 32.9950 - val_mse: 32.9950\n", + "Epoch 42/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 32.5982 - mse: 32.5982 - val_loss: 32.2191 - val_mse: 32.2191\n", + "Epoch 43/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 31.8866 - mse: 31.8866 - val_loss: 31.7858 - val_mse: 31.7858\n", + "Epoch 44/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 31.1069 - mse: 31.1069 - val_loss: 31.4925 - val_mse: 31.4925\n", + "Epoch 45/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 30.4652 - mse: 30.4652 - val_loss: 30.3444 - val_mse: 30.3444\n", + "Epoch 46/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.7824 - mse: 29.7824 - val_loss: 30.0548 - val_mse: 30.0548\n", + "Epoch 47/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 29.2876 - mse: 29.2876 - val_loss: 29.8105 - val_mse: 29.8105\n", + "Epoch 48/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 28.7501 - mse: 28.7501 - val_loss: 29.5409 - val_mse: 29.5409\n", + "Epoch 49/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 28.3570 - mse: 28.3570 - val_loss: 28.7541 - val_mse: 28.7541\n", + "Epoch 50/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 28.0634 - mse: 28.0634 - val_loss: 28.5283 - val_mse: 28.5283\n", + "Epoch 51/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 27.6026 - mse: 27.6026 - val_loss: 28.0110 - val_mse: 28.0110\n", + "Epoch 52/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 27.1863 - mse: 27.1863 - val_loss: 27.5993 - val_mse: 27.5993\n", + "Epoch 53/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 26.7750 - mse: 26.7750 - val_loss: 27.9839 - val_mse: 27.9839\n", + "Epoch 54/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 26.6986 - mse: 26.6986 - val_loss: 27.2500 - val_mse: 27.2500\n", + "Epoch 55/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 26.3814 - mse: 26.3814 - val_loss: 26.9674 - val_mse: 26.9674\n", + "Epoch 56/100\n", + "200/200 [==============================] - 1s 2ms/step - loss: 26.1764 - mse: 26.1764 - val_loss: 26.7911 - val_mse: 26.7911\n", + "Epoch 57/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 25.9598 - mse: 25.9598 - val_loss: 26.6214 - val_mse: 26.6214\n", + "Epoch 58/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 25.7795 - mse: 25.7795 - val_loss: 26.5284 - val_mse: 26.5284\n", + "Epoch 59/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 25.6769 - mse: 25.6769 - val_loss: 26.5878 - val_mse: 26.5878\n", + "Epoch 60/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 25.4562 - mse: 25.4562 - val_loss: 26.2363 - val_mse: 26.2363\n", + "Epoch 61/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 25.4134 - mse: 25.4134 - val_loss: 26.3440 - val_mse: 26.3440\n", + "Epoch 62/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 25.2458 - mse: 25.2458 - val_loss: 25.9467 - val_mse: 25.9467\n", + "Epoch 63/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 25.0868 - mse: 25.0868 - val_loss: 25.8385 - val_mse: 25.8385\n", + "Epoch 64/100\n", + "200/200 [==============================] - 1s 2ms/step - loss: 25.1196 - mse: 25.1196 - val_loss: 25.7628 - val_mse: 25.7628\n", + "Epoch 65/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 25.0052 - mse: 25.0052 - val_loss: 26.1844 - val_mse: 26.1844\n", + "Epoch 66/100\n", + "200/200 [==============================] - 1s 2ms/step - loss: 25.0065 - mse: 25.0065 - val_loss: 26.1573 - val_mse: 26.1573\n", + "Epoch 67/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.9212 - mse: 24.9212 - val_loss: 25.4381 - val_mse: 25.4381\n", + "Epoch 68/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.9110 - mse: 24.9110 - val_loss: 26.2909 - val_mse: 26.2909\n", + "Epoch 69/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.9264 - mse: 24.9264 - val_loss: 25.8472 - val_mse: 25.8472\n", + "Epoch 70/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 24.8658 - mse: 24.8658 - val_loss: 25.5165 - val_mse: 25.5165\n", + "Epoch 71/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.7693 - mse: 24.7693 - val_loss: 25.5439 - val_mse: 25.5439\n", + "Epoch 72/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 24.8256 - mse: 24.8256 - val_loss: 25.6658 - val_mse: 25.6658\n", + "Epoch 73/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 24.8129 - mse: 24.8129 - val_loss: 25.3437 - val_mse: 25.3437\n", + "Epoch 74/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.7795 - mse: 24.7795 - val_loss: 26.1083 - val_mse: 26.1083\n", + "Epoch 75/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.7246 - mse: 24.7246 - val_loss: 25.5743 - val_mse: 25.5743\n", + "Epoch 76/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 24.7131 - mse: 24.7131 - val_loss: 25.3376 - val_mse: 25.3376\n", + "Epoch 77/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.7548 - mse: 24.7548 - val_loss: 25.3547 - val_mse: 25.3547\n", + "Epoch 78/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 24.6683 - mse: 24.6683 - val_loss: 25.3924 - val_mse: 25.3924\n", + "Epoch 79/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.7497 - mse: 24.7497 - val_loss: 25.5278 - val_mse: 25.5278\n", + "Epoch 80/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.6559 - mse: 24.6559 - val_loss: 25.8185 - val_mse: 25.8185\n", + "Epoch 81/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 24.7465 - mse: 24.7465 - val_loss: 25.5447 - val_mse: 25.5447\n", + "Epoch 82/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.6187 - mse: 24.6187 - val_loss: 25.2425 - val_mse: 25.2425\n", + "Epoch 83/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.6510 - mse: 24.6510 - val_loss: 25.5632 - val_mse: 25.5632\n", + "Epoch 84/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 24.6039 - mse: 24.6039 - val_loss: 25.5532 - val_mse: 25.5532\n", + "Epoch 85/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.6390 - mse: 24.6390 - val_loss: 25.5506 - val_mse: 25.5506\n", + "Epoch 86/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 24.6142 - mse: 24.6142 - val_loss: 25.3146 - val_mse: 25.3146\n", + "Epoch 87/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.7010 - mse: 24.7010 - val_loss: 25.6901 - val_mse: 25.6901\n", + "Epoch 88/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.6403 - mse: 24.6403 - val_loss: 25.5691 - val_mse: 25.5691\n", + "Epoch 89/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.7331 - mse: 24.7331 - val_loss: 25.5972 - val_mse: 25.5972\n", + "Epoch 90/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.6429 - mse: 24.6429 - val_loss: 25.5331 - val_mse: 25.5331\n", + "Epoch 91/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.5740 - mse: 24.5740 - val_loss: 25.5387 - val_mse: 25.5387\n", + "Epoch 92/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 24.6910 - mse: 24.6910 - val_loss: 25.2344 - val_mse: 25.2344\n", + "Epoch 93/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 24.6374 - mse: 24.6374 - val_loss: 25.4383 - val_mse: 25.4383\n", + "Epoch 94/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.5917 - mse: 24.5917 - val_loss: 25.5590 - val_mse: 25.5590\n", + "Epoch 95/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 24.7260 - mse: 24.7260 - val_loss: 25.5597 - val_mse: 25.5597\n", + "Epoch 96/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 24.5821 - mse: 24.5821 - val_loss: 25.6252 - val_mse: 25.6252\n", + "Epoch 97/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.5958 - mse: 24.5958 - val_loss: 25.2008 - val_mse: 25.2008\n", + "Epoch 98/100\n", + "200/200 [==============================] - 1s 3ms/step - loss: 24.5501 - mse: 24.5501 - val_loss: 25.3190 - val_mse: 25.3190\n", + "Epoch 99/100\n", + "200/200 [==============================] - 0s 2ms/step - loss: 24.5916 - mse: 24.5916 - val_loss: 25.1274 - val_mse: 25.1274\n", + "Epoch 100/100\n", + "200/200 [==============================] - 1s 2ms/step - loss: 24.5280 - mse: 24.5280 - val_loss: 25.2692 - val_mse: 25.2692\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "\n", + "pd.DataFrame(history.history).loc[:,['mse', 'val_mse']].plot()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 282 + }, + "id": "iRX9x2WfjYdO", + "outputId": "79a817c8-d16c-46cd-a483-a338c3e02f92" + }, + "execution_count": 49, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 49 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "preds=model.predict(X_test)\n", + "r2_score(y_test,preds.squeeze())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Srito8RCjkVo", + "outputId": "d10fe70d-0d25-4d18-9818-f304a11b73c5" + }, + "execution_count": 51, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.9981411159417038" + ] + }, + "metadata": {}, + "execution_count": 51 + } + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "collapsed_sections": [], + "name": "Copy of Copy of CVusingTF_Assgn2.ipynb", + "provenance": [] + }, + "gpuClass": "standard", + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From 497b25e9d312c0575682c2bdae0d17f692c31eab Mon Sep 17 00:00:00 2001 From: RVP20 <77159539+RVP20@users.noreply.github.com> Date: Wed, 29 Jun 2022 15:28:31 +0530 Subject: [PATCH 4/5] Assignment 3 --- Assignment 3/A3_201043.ipynb | 507 +++++++++++++++++++++++++++++++++++ 1 file changed, 507 insertions(+) create mode 100644 Assignment 3/A3_201043.ipynb diff --git a/Assignment 3/A3_201043.ipynb b/Assignment 3/A3_201043.ipynb new file mode 100644 index 0000000..d455085 --- /dev/null +++ b/Assignment 3/A3_201043.ipynb @@ -0,0 +1,507 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "TF-Assignment-3.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU", + "gpuClass": "standard" + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Assignment 3\n", + "\n", + " In this Assignment, we will use CNN to classify digits. \n", + "The `MNIST` database is a large database of handwritten digits that is commonly used for training various image processing systems.\n", + "\n" + ], + "metadata": { + "id": "VGHh_5UYzKpV" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Importing TensorFlow" + ], + "metadata": { + "id": "JnsMbCPNzPAr" + } + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "HRLTw3cMwvi7" + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "import numpy as np\n", + "from tensorflow import keras\n", + "from keras import layers" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Get the dataset" + ], + "metadata": { + "id": "6Ji7HGpgzSPi" + } + }, + { + "cell_type": "code", + "source": [ + "# Import the dataset\n", + "\n", + "(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()" + ], + "metadata": { + "id": "oEW3KDEvzIHL" + }, + "execution_count": 12, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Split the dataset\n", + "\n", + "from sklearn.model_selection import train_test_split\n", + "X_train,X_test,Y_train,Y_test=train_test_split(x_test,y_test,test_size=0.2)" + ], + "metadata": { + "id": "F_sRU9dx_mYQ" + }, + "execution_count": 13, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Pre processing \n", + "X_train=X_train/255.0\n", + "X_test=X_test/255.0\n", + "digits=np.unique(Y_train)\n", + "\n" + ], + "metadata": { + "id": "rbt0WbW6sDVs" + }, + "execution_count": 14, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Visualize the dataset\n", + "Print some images with labels." + ], + "metadata": { + "id": "EVpQheoVqoEG" + } + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.figure(figsize=(15,10))\n", + "for i in range(15):\n", + " plt.subplot(3,5,i+1)\n", + " r=np.random.randint(0,len(X_train))\n", + " plt.imshow(X_train[r],cmap='copper')\n", + " plt.xlabel(Y_train[r])\n", + "# Your code\n", + "plt.show()" + ], + "metadata": { + "id": "yF1Nj63Bz9m7", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 591 + }, + "outputId": "74901a45-0ccc-433b-b104-6d57db94d0dc" + }, + "execution_count": 15, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Plot statistics of the training and testing dataset \n", + "(`x axis`: digits, `y axis`: number of samples corresponding to the digits)" + ], + "metadata": { + "id": "Rx8muKSIrKhe" + } + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "plt.figure(figsize=(5,5))\n", + "plt.bar(digits,np.unique(Y_train, return_counts=True)[1],color='black')\n", + "# Your code\n", + "plt.show()" + ], + "metadata": { + "id": "37kehTG_6Pi4", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 320 + }, + "outputId": "427a0961-dadc-4dde-d301-e5cdfc7b0c57" + }, + "execution_count": 21, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAT8AAAEvCAYAAAAzcMYwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAANKElEQVR4nO3dX6jndZ3H8edrPZlprGN6kJoZdgaSQoJQBrEVunC6SIvGiwqXrUSEuXHLMijrptsNIjNYhMHZMFbaYhKUkHZD7WIvGnZGJdMpGmx1ZlbzFGptESa99+J83D2KMr85v9/P35nzfj7gcL5/Pr/z/XyZmed8v79zvjOpKiSpm79a9AQkaRGMn6SWjJ+kloyfpJaMn6SWjJ+klpYWPQGACy64oHbs2LHoaUjaZA4fPvybqlp+rX0bIn47duzg0KFDi56GpE0myZOvt8/bXkktGT9JLRk/SS0ZP0ktGT9JLRk/SS0ZP0ktGT9JLRk/SS0ZP0ktGT9JLW2IZ3s3siQz/Xr+nynSxuCVn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJb8T8s3CP9zdOmNZfwamXVgwcjOkr8+byxveyW1NFH8knwuyWNJfpbkO0nOSrIzycEkR5N8N8mZY+ybx/rRsX/HPE9AktbjpPFLshX4DLCrqt4DnAFcC3wVuLWq3gk8B9wwXnID8NzYfusYJ0kbyqS3vUvAW5IsAWcDTwNXAgfG/juBa8bynrHO2L8783gzQ5KmcNL4VdUJ4GvAU6xG7wXgMPB8Vb00hh0Hto7lrcCx8dqXxvjzZzttSRtdkpl+zNokt73nsXo1txN4B3AO8MFpD5xkb5JDSQ6trKxM++Uk6ZRMctv7AeBXVbVSVX8G7gauALaM22CAbcCJsXwC2A4w9p8L/PbVX7Sq9lXVrqratby8POVpaCOZ9d/4vmuieZgkfk8Blyc5e7x3txt4HHgQ+OgYcx1wz1i+d6wz9j9Q/rCRpA1mkvf8DrL6jYuHgEfHa/YBXwRuTnKU1ff09o+X7AfOH9tvBm6Zw7wlaSoTPeFRVV8BvvKqzU8Al73G2D8BH5t+apI0P6ft420+CytpGj7eJqml0/bKT9L6+A8orPLKT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkv+qIt0Ev5oyObklZ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWfMJDpy2fvNA0vPKT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1NJE8UuyJcmBJD9PciTJ+5K8LcmPkvxyfD5vjE2SbyY5muSnSS6d7ylI0qmb9MrvNuCHVfVu4L3AEeAW4P6qugi4f6wDXAVcND72ArfPdMaSNAMnjV+Sc4H3A/sBqurFqnoe2APcOYbdCVwzlvcA365VPwG2JHn7zGcuSVOY5MpvJ7ACfCvJw0nuSHIOcGFVPT3GPANcOJa3AsfWvP742CZJG8Yk8VsCLgVur6pLgD/w/7e4AFRVAXUqB06yN8mhJIdWVlZO5aWSNLVJ4nccOF5VB8f6AVZj+OuXb2fH52fH/hPA9jWv3za2vUJV7auqXVW1a3l5eb3zl6R1OWn8quoZ4FiSd41Nu4HHgXuB68a264B7xvK9wKfGd30vB15Yc3ssSRvC0oTjPg3cleRM4AngelbD+b0kNwBPAh8fY+8DrgaOAn8cYyVpQ5koflX1CLDrNXbtfo2xBdw45bwkaa58wkNSS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLE8cvyRlJHk7yg7G+M8nBJEeTfDfJmWP7m8f60bF/x3ymLknrdypXfjcBR9asfxW4tareCTwH3DC23wA8N7bfOsZJ0oYyUfySbAM+BNwx1gNcCRwYQ+4ErhnLe8Y6Y//uMV6SNoxJr/y+AXwB+MtYPx94vqpeGuvHga1jeStwDGDsf2GMf4Uke5McSnJoZWVlndOXpPU5afySfBh4tqoOz/LAVbWvqnZV1a7l5eVZfmlJOqmlCcZcAXwkydXAWcBfA7cBW5Isjau7bcCJMf4EsB04nmQJOBf47cxnLklTOOmVX1V9qaq2VdUO4Frggar6e+BB4KNj2HXAPWP53rHO2P9AVdVMZy1JU5rm5/y+CNyc5Cir7+ntH9v3A+eP7TcDt0w3RUmavUlue/9PVf0Y+PFYfgK47DXG/An42AzmJklz4xMekloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaMn6SWjJ+kloyfpJaOmn8kmxP8mCSx5M8luSmsf1tSX6U5Jfj83lje5J8M8nRJD9Ncum8T0KSTtUkV34vAZ+vqouBy4Ebk1wM3ALcX1UXAfePdYCrgIvGx17g9pnPWpKmdNL4VdXTVfXQWP49cATYCuwB7hzD7gSuGct7gG/Xqp8AW5K8feYzl6QpnNJ7fkl2AJcAB4ELq+rpsesZ4MKxvBU4tuZlx8c2SdowJo5fkrcC3wc+W1W/W7uvqgqoUzlwkr1JDiU5tLKyciovlaSpTRS/JG9iNXx3VdXdY/OvX76dHZ+fHdtPANvXvHzb2PYKVbWvqnZV1a7l5eX1zl+S1mWS7/YG2A8cqaqvr9l1L3DdWL4OuGfN9k+N7/peDryw5vZYkjaEpQnGXAF8Eng0ySNj25eBfwS+l+QG4Eng42PffcDVwFHgj8D1M52xJM3ASeNXVf8B5HV2736N8QXcOOW8JGmufMJDUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS8ZPUkvGT1JLxk9SS3OJX5IPJvlFkqNJbpnHMSRpGjOPX5IzgH8CrgIuBv4uycWzPo4kTWMeV36XAUer6omqehH4V2DPHI4jSes2j/htBY6tWT8+tknShrG0qAMn2QvsHav/k+QXczrUBcBvJpjPnA4/8+N4PnM05XEmOpcZHGdim+l81nmMv3m9HfOI3wlg+5r1bWPbK1TVPmDfHI7/CkkOVdWueR/njeL5bFyb6Vxg853Pq83jtvc/gYuS7ExyJnAtcO8cjiNJ6zbzK7+qeinJPwD/BpwB/HNVPTbr40jSNObynl9V3QfcN4+vvQ5zv7V+g3k+G9dmOhfYfOfzCqmqRc9Bkt5wPt4mqaVNHb/N8phdku1JHkzyeJLHkty06DnNQpIzkjyc5AeLnsu0kmxJciDJz5McSfK+Rc9pGkk+N36v/SzJd5Kcteg5zdqmjd8me8zuJeDzVXUxcDlw42l8LmvdBBxZ9CRm5Dbgh1X1buC9nMbnlWQr8BlgV1W9h9VvXF672FnN3qaNH5voMbuqerqqHhrLv2f1D9Zp/dRMkm3Ah4A7Fj2XaSU5F3g/sB+gql6squcXO6upLQFvSbIEnA3894LnM3ObOX6b8jG7JDuAS4CDi53J1L4BfAH4y6InMgM7gRXgW+M2/o4k5yx6UutVVSeArwFPAU8DL1TVvy92VrO3meO36SR5K/B94LNV9btFz2e9knwYeLaqDi96LjOyBFwK3F5VlwB/AE7n95jPY/UuaSfwDuCcJJ9Y7KxmbzPHb6LH7E4XSd7Eavjuqqq7Fz2fKV0BfCTJf7H6dsSVSf5lsVOaynHgeFW9fDV+gNUYnq4+APyqqlaq6s/A3cDfLnhOM7eZ47dpHrPL6hPd+4EjVfX1Rc9nWlX1paraVlU7WP11eaCqTtsri6p6BjiW5F1j027g8QVOaVpPAZcnOXv83tvNafwNnNezsH/VZd422WN2VwCfBB5N8sjY9uXxJI02hk8Dd42/aJ8Arl/wfNatqg4mOQA8xOpPGjzMJnzawyc8JLW0mW97Jel1GT9JLRk/SS0ZP0ktGT9JLRk/SS0ZP0ktGT9JLf0viYXrP8FvdUUAAAAASUVORK5CYII=\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "plt.figure(figsize=(5,5))\n", + "plt.bar(digits,np.unique(Y_test, return_counts=True)[1],color='black')\n", + "plt.show()\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 320 + }, + "id": "TJGKTxKT1DhR", + "outputId": "b2949066-b06a-4688-f8ff-39ffd57bb6bb" + }, + "execution_count": 22, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Model" + ], + "metadata": { + "id": "kWlpCWdAr8d3" + } + }, + { + "cell_type": "code", + "source": [ + "# model building\n", + "model= keras.Sequential([\n", + " layers.Conv2D(32,(3,3),padding=\"same\", activation=\"relu\", input_shape=(28,28,1)),\n", + " layers.Conv2D(128,(3,3),padding=\"same\", activation=\"relu\"),\n", + " layers.Conv2D(32,(3,3),padding=\"same\", activation=\"relu\"),\n", + " layers.MaxPooling2D(pool_size=(2,2)),\n", + " layers.Dropout(0.2),\n", + "\n", + " layers.Flatten(),\n", + " layers.Dense(256,activation=\"relu\"),\n", + " layers.Dropout(0.2),\n", + " layers.Dense(10, activation=\"softmax\")\n", + "\n", + "\n", + "])\n", + "# You are supposed to look at some CNN architectures and add convolutional layers along with MaxPooling, specifying the kernel size, pooling size, activation \n" + ], + "metadata": { + "id": "1L07EyQ0Yion" + }, + "execution_count": 44, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model.summary()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "n5PUEKqufxat", + "outputId": "1d330980-2342-4008-96c0-0b356721ee9f" + }, + "execution_count": 45, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Model: \"sequential_8\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " conv2d_16 (Conv2D) (None, 28, 28, 32) 320 \n", + " \n", + " conv2d_17 (Conv2D) (None, 28, 28, 128) 36992 \n", + " \n", + " conv2d_18 (Conv2D) (None, 28, 28, 32) 36896 \n", + " \n", + " max_pooling2d_8 (MaxPooling (None, 14, 14, 32) 0 \n", + " 2D) \n", + " \n", + " dropout_15 (Dropout) (None, 14, 14, 32) 0 \n", + " \n", + " flatten_8 (Flatten) (None, 6272) 0 \n", + " \n", + " dense_16 (Dense) (None, 256) 1605888 \n", + " \n", + " dropout_16 (Dropout) (None, 256) 0 \n", + " \n", + " dense_17 (Dense) (None, 10) 2570 \n", + " \n", + "=================================================================\n", + "Total params: 1,682,666\n", + "Trainable params: 1,682,666\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Compile the model (add optimizers and metrics)\n", + "model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])\n", + "# Fit the model on the training data (specify validation_split, read about validation if new to you)\n", + "history=model.fit(X_train,Y_train, epochs=20, validation_split=0.2)\n" + ], + "metadata": { + "id": "nKEZ8cbO9JVV", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "d079402b-ccab-4f3c-8708-00bf8a5e2a69" + }, + "execution_count": 46, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/20\n", + "200/200 [==============================] - 2s 8ms/step - loss: 0.3703 - accuracy: 0.8850 - val_loss: 0.1262 - val_accuracy: 0.9606\n", + "Epoch 2/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0919 - accuracy: 0.9692 - val_loss: 0.1048 - val_accuracy: 0.9694\n", + "Epoch 3/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0611 - accuracy: 0.9814 - val_loss: 0.0519 - val_accuracy: 0.9819\n", + "Epoch 4/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0361 - accuracy: 0.9875 - val_loss: 0.0600 - val_accuracy: 0.9825\n", + "Epoch 5/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0306 - accuracy: 0.9884 - val_loss: 0.0515 - val_accuracy: 0.9850\n", + "Epoch 6/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0222 - accuracy: 0.9923 - val_loss: 0.0650 - val_accuracy: 0.9844\n", + "Epoch 7/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0234 - accuracy: 0.9920 - val_loss: 0.0473 - val_accuracy: 0.9850\n", + "Epoch 8/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0143 - accuracy: 0.9952 - val_loss: 0.0855 - val_accuracy: 0.9800\n", + "Epoch 9/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0126 - accuracy: 0.9955 - val_loss: 0.0598 - val_accuracy: 0.9844\n", + "Epoch 10/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0078 - accuracy: 0.9978 - val_loss: 0.0618 - val_accuracy: 0.9844\n", + "Epoch 11/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0110 - accuracy: 0.9956 - val_loss: 0.0638 - val_accuracy: 0.9869\n", + "Epoch 12/20\n", + "200/200 [==============================] - 2s 8ms/step - loss: 0.0130 - accuracy: 0.9956 - val_loss: 0.0535 - val_accuracy: 0.9812\n", + "Epoch 13/20\n", + "200/200 [==============================] - 2s 8ms/step - loss: 0.0064 - accuracy: 0.9986 - val_loss: 0.0859 - val_accuracy: 0.9837\n", + "Epoch 14/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0131 - accuracy: 0.9967 - val_loss: 0.0779 - val_accuracy: 0.9869\n", + "Epoch 15/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0094 - accuracy: 0.9980 - val_loss: 0.0758 - val_accuracy: 0.9831\n", + "Epoch 16/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0148 - accuracy: 0.9952 - val_loss: 0.0806 - val_accuracy: 0.9812\n", + "Epoch 17/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0070 - accuracy: 0.9977 - val_loss: 0.1606 - val_accuracy: 0.9719\n", + "Epoch 18/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0141 - accuracy: 0.9955 - val_loss: 0.1134 - val_accuracy: 0.9731\n", + "Epoch 19/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0105 - accuracy: 0.9962 - val_loss: 0.1011 - val_accuracy: 0.9794\n", + "Epoch 20/20\n", + "200/200 [==============================] - 1s 7ms/step - loss: 0.0088 - accuracy: 0.9966 - val_loss: 0.0982 - val_accuracy: 0.9844\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "plt.plot(history.history['accuracy'], label='accuracy')\n", + "plt.plot(history.history['val_accuracy'], label = 'val_accuracy')\n", + "plt.xlabel('Epoch')\n", + "plt.ylabel('Accuracy')\n", + "plt.show()\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 279 + }, + "id": "xjoAQdUc3Wx4", + "outputId": "3c3f2e69-7637-49f2-addb-39a2e5ee827b" + }, + "execution_count": 48, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "model.evaluate(X_test,Y_test)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Z0I24nQx3g6z", + "outputId": "c1c54f59-1994-4362-fef0-84471185145b" + }, + "execution_count": 51, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "63/63 [==============================] - 0s 4ms/step - loss: 0.1331 - accuracy: 0.9770\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[0.13312648236751556, 0.9769999980926514]" + ] + }, + "metadata": {}, + "execution_count": 51 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Predict some images\n", + "Print the image along with its label (true value) and predicted value." + ], + "metadata": { + "id": "ml1Kna_DuJrL" + } + }, + { + "cell_type": "code", + "source": [ + "out=model.predict(X_test[:15])\n", + "preds=[]\n", + "for i in out:\n", + " preds.append(np.argmax(i))\n", + " " + ], + "metadata": { + "id": "qioZul7_uiYq" + }, + "execution_count": 58, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "plt.figure(figsize=(15,10))\n", + "for i in range(15):\n", + " plt.subplot(3,5,i+1)\n", + " plt.imshow(X_test[i],cmap='copper')\n", + " plt.xlabel(\"Pred: \"+str(preds[i])+\" Actual: \" + str(Y_test[i]))\n", + "# Your code\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 591 + }, + "id": "r3kTyvZu4Ixj", + "outputId": "1c7f17d1-2c98-487b-9c87-7af0c1ad98de" + }, + "execution_count": 62, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2cAAAI+CAYAAAA4vXLuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd5xV1bn/8e8jgg1FEEFEBAuiYgHFbiyxV2wxEmO7RkwxPzXVaKop18REY8zVBKMBr0aviRqJvfdKU1HsoqIoIiqgWIDn98fZJCNrnZk9p83aZz7v12tezDyz915rz3zncNY5Zz/H3F0AAAAAgI61TEdPAAAAAADA4gwAAAAAksDiDAAAAAASwOIMAAAAABLA4gwAAAAAEsDiDAAAAAASUNXizMz2NrNnzewFMzutVpMC6oXMoojILYqGzKJoyCxSYZW+z5mZdZH0nKQ9JM2Q9JikUe7+dCv78KZqqIq7W6X7kll0hGoyK7U/t2QWNTDb3VevdGcyiw7Q0Mxm+5BbVKXc/YNqnjnbWtIL7v6Su38i6UpJI6s4HlBvZBZFRG7RaK9UuT+ZRaORWTSNahZn/SW91uLrGVntM8xstJlNMLMJVYwF1AKZRRG1mVsyi8SQWRQN9w+QjGXrPYC7j5E0RuIpYBQDmUXRkFkUDZlFEZFbNEI1z5y9LmlAi6/XympAqsgsiojcomjILIqGzCIZ1SzOHpM02MzWMbNuko6QNL420wLqgsyiiMgtiobMomjILJJR8csa3X2hmZ0k6RZJXSRd4u5P1WxmQI2RWRQRuUXRkFkUDZlFSipupV/RYLw+F1Wqti15e5FZVIvMooAmuvuIRg1GZlEDDc2sRG5RvXq00gcAAAAA1AiLMwAAAABIAIszAAAAAEgAizMAAAAASACLMwAAAABIAIszAAAAAEgAizMAAAAASACLMwAAAABIAIszAAAAAEgAizMAAAAASACLMwAAAABIAIszAAAAAEjAsh09AQBoy6De3aP17+47LNf+Cz5dGNS+c8XDVc0JWGKNHisEtTMP2Sr3/kfvODioLbdR/3BDi+zskc22PzP32ACAtPDMGQAAAAAkgMUZAAAAACSAxRkAAAAAJIDFGQAAAAAkoKqGIGY2XdI8SYskLXT3EbWYVGfVd5XwonJJ2na9PkHt67sPDWp7DF0rqNkGa4QHjF1ULmnGwy+GY595bVB7/d0P4wcoCHLbMYYPXC2oHTpi3aA2tH/PoHbQyC3iB12ua87RI10TIlJtEkJmO8ZXP79xULvw2M+FGw7qHda6VPnYp0cymy/GSWi2zJ6616bR+gm7bBTUNv7BVfWeDuqg2TKL4qpFt8Zd3X12DY4DNBK5RdGQWRQNmUXRkFl0OF7WCAAAAAAJqHZx5pJuNbOJZjY6toGZjTazCWY2ocqxgFppNbdkFgkisygaMoui4T4tklDtyxp3dPfXzayPpNvM7Bl3v7flBu4+RtIYSTKzAr1iHk2s1dySWSSIzKJoyCyKhvu0SIJ57KLjSg5k9lNJ8939t61sQ5AzW0QuIJ949hHxjdcMGyQ0ynkX3BHUTrn8wQ6YSYm7l2lnUpm2cktmW7dNpFmNJP3s4PA66r0iTWzUfflaTym/Dz4OSrbXb2o+DJlNy3p9VonWX/jtqLC4zuphbZma/jrL+3RRUPrnNfkerD/4D7dWO/rEWjZDKFpmh6zRI6g9c+6R8Y0HhI2ONHteUFr7vy4Kaq/N+aDdc0NZDc1stk1SuUXxlLt/UPHLGs1sJTNbecnnkvaUNLXS4wGNQG5RNGQWRUNmUTRkFimp5mWNfSVda2ZLjvM3d7+5JrMC6ofcomjILIqGzKJoyCySUfHizN1fkrR5DecC1B25RdGQWRQNmUXRkFmkhFb6AAAAAJCAWrwJNdrQZ5Ww6cGFx3wu3LDaxh+LFoe19z4Ma6t1z33Ik48L5/mza8OL0t/98JPcx0TzOHqHDaL1vQ7asrYDvTwrXl8n3pAkl1nvV74vkrNhv1WD2q++sHVQO/iA4fEDrNit1lPKb+6CoNT3i38MarPmftSI2XR6z74Z3jZs9t0ro9te8pVdgtqIPcLmRy9GGs48/uqcoPbtKx4Kavc+OzM6NoDmxDNnAAAAAJAAFmcAAAAAkAAWZwAAAACQABZnAAAAAJAAGoI0wJjjdg5qW++5SXUHfWtuUPrV3x4Mai9EtrvkrMPzj7NCeJH8cTttGNTOufmJ/MdEIW2yVtiwZuP+VTaxyWulsKlOtc6/hfcXLaoTd90oqP3phF3CDQf2rv9kasHDEs0/0vLkjLB5hySdfNkDQe2BzQcEta7r9w1qIzboF9Tu+VzYZOnU39wQHftfk18JatNnzwtqixZHAgbUWc8yTZa6LdslqL09L2yK1HOl5YLassvkf05p783Cv8OYh154K6jNjDTTm/fRp7nHrhbPnAEAAABAAlicAQAAAEACWJwBAAAAQAJYnAEAAABAAlicAQAAAEAC6NZYhVUjnWhu/s6+QW2bParrzDjlzqeD2nEX3R1u9+o7QW3Y2quFB1zwSXygSGdGdE7dlwtvGp78/ZfDDfutGj9ArZuD9Vmluv0XLw5Kr74TdjVDei45Pux2e9wxO4YbdqnDY43vhx3EHnn4haB257Q3gtoPTtkr/zirhN1Iv7/fsKD26xum5D8mGuLBSKc3O/i8oHb9t/YOavsdslV4wOW6BqVzf3RQdOxzLazdft2koPZ+5P/8c24KOyzHzgXIY9v1+gS1h/5wVHzjnisFpTceeymorbnJWuG+y4d/H2VZ5A/Ec945idyf3ue//xXUbn7itfzzaQeeOQMAAACABLA4AwAAAIAEsDgDAAAAgASwOAMAAACABLTZEMTMLpG0v6RZ7r5JVusl6f8kDZI0XdLh7v5u/aaZphfPHhXUeg1bO9/OH3wclK7+1+Topof/8bagtjjnNY2xJiH6sPkbgpDb6nyyMGygccvDLwa1vbYYGN3/7idnBLVL738u19jbrd83qJ0QaQrRHjf+M7xI/reRC+I7EpmVTtx1o6DWqOYfnz47M6htcvrfg9pzb74f1IYPDBsv/aA9g0cuXI81nEoNmc1v/3NuDmpD/vZQUPvlF7YOagcOj9/Odt1ozaC2+8gtcs3n0CO2zbWdJP0uch/kzH9ODGpzF3ya+5gdhcy2z2rdlwtq53xp+6B29LGfy3/QSJ+ONbdatz3TqnicMsXQwN5B6cqv7x7UVv3qX9s3p5zy/A83VtLSbYZOk3SHuw+WdEf2NZCSsSK3KJaxIrMolrEisyiWsSKzSFybizN3v1fSnKXKIyWNyz4fJyne5xXoIOQWRUNmUTRkFkVDZlEElb7PWV93X/IakDclha9DypjZaEmjKxwHqKVcuSWzSAiZRdGQWRQN92mRlKrfhNrd3czKXgHl7mMkjZGk1rYDGqm13JJZpIjMomjILIqG+7RIQaWLs7fMrJ+7zzSzfpJm1XJSKfriNusFtV6bDaj4eDfcHDYjOOz88KJb1FSny22lPlkUNgTZ+7c3NmTsUduuX90B5i0ISmf849HqjtlxOlVmL6h18493PwhK1946Nbrpj65+LKjFmn/ETHvjvaD20oMvRLddd/sq852+TpXZajwbyVfsfkCvlcKmDJLUI9I0ZsxxOwW1jfv3DGprbrlOnilKkr590h5BbfL02UHt8ofimS8AMlvG3puG93OPjt1Oe3vWqZGmHHn3f/ntoPRBmSZ334o03Hnvw7AZ3+Zrhw2dYq6MNEWrl0r/1xsv6Zjs82MkXVeb6QB1RW5RNGQWRUNmUTRkFklpc3FmZldIekjSEDObYWbHSzpL0h5m9ryk3bOvgWSQWxQNmUXRkFkUDZlFEbT5skZ3D9/Mq2S3Gs8FqBlyi6IhsygaMouiIbMogtq/kycAAAAAoN2q7tbYbPqssny0fuXpB4TFZfK90/jLkYtk9z/n5nbNC2iv7suFf95dI80Vvrbb0KA2fGDvoDb6knuC2kcLF0XHXvBJvL607dcPOxbvsdOQXPuWNe+joDTl1XeqOyZq6s0/HBWtL7NOn4qPecf4yUHt1MsfDGpPzlj6LY6q99GnYd5nzw9zKEnr1nx0NLs5H4RNDMrV9/jNDUFt1UjjkO/tNyyo/eDkvXLPaf/hA4NagRuCQNKma/UKapedcWCufd+aOD2o9d1yUHTbB258PKjdPe2NoHblI2GeXpw1N6jlvb9RzlWPvlTV/vXAM2cAAAAAkAAWZwAAAACQABZnAAAAAJAAFmcAAAAAkAAagizlB/sPj3+j98r5DvBWeLHioeffWsWMqpOzZ0l5nywMSmPve7bKg6KWzjxkRLT+oy9tFxbXWLXicQ47YtugNv+p16PbnvS/9we1cfc/F9Q27t8z3LnnSvkn9d4HQWmb0/4v//6oqQ3W6BHUTt17s6DWd9ja8QNEGtbkdcY/Hg1q9Wj+ARTN2qt1D2o/GBX5/6GcDz8JSt+78uFqpoQEbdAvvP3Wqivm2rdc84+Y+56dGdR++a9JQa3aRh9FxjNnAAAAAJAAFmcAAAAAkAAWZwAAAACQABZnAAAAAJCATt0QZJcN+wW1U0bvWtUxv3nB7UFt8ivvVHXMavzggEiDk8jFwWXNCRsuzPng4ypmhLy2Wa9PUDvvyO3D7fbatBHTieq+2VrR+thffzGo7XHpA0HtyJGRfLajic0tdz8T1B596e38B0BNfWP3oUHtqyfsUt1B3/swLL0a3qbO/+jT6sapwuC+qwS1rUesk/8AixYHpVfemV/NlIB/Oy3W6KxPmNlyrh4fNmt4LXLfAMV29WMvB7VPn3szqHUdEt53bo/TTt07qG02YLWgtt85N1U1TpHxzBkAAAAAJIDFGQAAAAAkgMUZAAAAACSAxRkAAAAAJIDFGQAAAAAkoM1ujWZ2iaT9Jc1y902y2k8lnSBpSVu00939xnpNsl5+N2q7sNi1S+79P5r2RlC76tEXq5lSVXbdaM2g9ovDt6nqmP+4a1pV+3eEZsnszw4eEdS22TPSmdHzH/OFh54Pas+88V5QW27Z8O9gj5FbhAdcXGbwSPnIo3Zoc37l9h3/j0ejmx56/q35jlkARcvtoN5h19f/t+/m1R30/bAz4wFn/D2oXT/l1erGqbHuy3cNi71Wyn+A+WEH3D/d+XQVM2qMomW22Twb6Yq7wY4bVHy8tye/Eq0fdv5tFR8zNWS2fdY+9fKgdm6ka/QRI7cMd155+fhBIx2Z9z1sq6C2yVUPB7WpM96NH7PJ5HnmbKyksO+ldK67D8s+CDFSMlZkFsUzVuQWxTJWZBbFMlZkFolrc3Hm7vdKmtOAuQA1QWZRROQWRUNmUTRkFkVQzTVnJ5nZE2Z2iZn1LLeRmY02swlmNqGKsYBaILMoojZzS2aRGDKLouH+AZJR6eLsQknrSRomaaak35Xb0N3HuPsIdw8voAEah8yiiHLllswiIWQWRcP9AySlzYYgMe7+1pLPzewiSdfXbEZ18r3Ihepb7Da0qmMO++E/gtqsuR9VdcxqXHvyXmFxndXzH+CjT4PSD8s0Yiia1DP7r1PDl8DvdeDwqo551/WTg9p+59wU1BZ8siioLRO5YPe7T78e1M46/YDKJtead+YFpTP/OTG66cJF7eiGUkAp5/bl848Oi2uvVtUx777vuaCWWvOPlZYL/9s885DwYvbOKuXMFtVF/7VTtB5t/pHzJvH9qTOC2qmXP9ieaTUNMlvem+8vCGqjLrgjqH197H1B7Qtbrxc95p9/9YWw6M39f3l7VfTMmZn1a/HlwZKm1mY6QH2QWRQRuUXRkFkUDZlFavK00r9C0i6SepvZDEk/kbSLmQ1T6TGa6ZJOrOMcgXYhsygicouiIbMoGjKLImhzcebuoyLli+swF6AmyCyKiNyiaMgsiobMogiq6dYIAAAAAKiRihqCFNHW6/UJi5GmB+V88FTYDOHVOfOrmFF1Yg0kegztn2/nT8MGEJL0Xz+9Nqg9++b77ZoX2jYs0jRh/wMizT+WyffYyR3/Cht/SNLB590S1GLNP2IWR67NvTPSEKRqs8PmH3tFGu1MnD679mOjOgN7h7W8F3XPjzdOOu+WJ6uYUGP8+diwOcP+h1XXEOSG27nEpTNadcVuQW3fzdcOal8ZuUVV4zz3QNhoZ6dfjg9qb80Nmz+g4/WM5OTdDz/pgJmU9F1lhaB24BYDg9qfv/b5/AeN/B8/qxPnkWfOAAAAACABLM4AAAAAIAEszgAAAAAgASzOAAAAACABnaYhyO5D18q3YawTgqQT/3pvUMvbXKFav4xcbL7/ISPCDZeJdDj5eGFQ+p/IuUjSX+97tt1zQ/tN/sNRYbFbvj/FWPOPWOMPSZr30ae5jrlCty5B7ZAt1wlql522f67jtcty4Xn3W3XF2o+DpNxy21PR+j8nTW/sRFqI/R3suuGaQe3IfTarbqA33g1KP7jq0eqOieQN6t09qI09YdegtvN+w/IfNNIU4ow/3BrULr7nmaBG84/imPOX44PajROmB7Uxdz0d1B5+cVb0mAdtOSioDeq9clDbaUi/oLb9iPD+gVYP9y1rQZjbTb9/ZVCbNTfeOKoz4JkzAAAAAEgAizMAAAAASACLMwAAAABIAIszAAAAAEhAUzYEWa/PKkGtx4bhRY1Rc+ZHy5c/9EI1Uwqs1n25oPaTgyJNPiR986uRd1mP9P6Iue66SUHtpP99IN/OqI/YhbORPjSvPfpSUIs1/yjX+GOVFboGtQOHDwpqf/jyDkGt52YDoscMvBP/e/ngzfeD2kobrBFuuPIKQemCYz4X1MaXaRTxbuSCeDRI7DYo3k8psNcWA6P12G33i7Pm5jrmSpHmMn1WCfO1Ub9Vo/uff9SOQW3d7dfPNbYWLQ5rr74T3XSz064Kak/OmJNvHBTWyxeFTR20epj3mKfLNOs67apHgtq/Jr/SrnkhfePumhbUjtlz06C276Hx+5C5WeRG3XPeqMe88V60vM7X/hrUps+O35forHjmDAAAAAASwOIMAAAAABLA4gwAAAAAEsDiDAAAAAAS0ObizMwGmNldZva0mT1lZidn9V5mdpuZPZ/927P+0wXaRmZRNGQWRURuUTRkFkVg3kYnFjPrJ6mfu08ys5UlTZR0kKRjJc1x97PM7DRJPd39+20cq4q2L/l9Z5/NgtrZPxyZb+fZ86JlG/n7iudzwPCwM9k3d98kqO1x0Bb5D/rpoqD02N1hR5+dfzU+qC34JNy3KNy9zT6VqWfWH/hRpBjZcFbY8fCnl4adNg/fZr3oOKuvvHxYGxbvkpfLex8EpREnXRrddOL02UHN/3lKuGHvSOfKiAm3PxWt7/Gb64Pae4l1cGyGzMb4nT8Ii5GOie3ySpibW3N2nxsS6cI4sMzfRq0tfO7NoNb1uIsaMnadTHT3Nlu/1Sq3jcpsPcT+fx9/wTHhhovzneIjtzwZ1LY985/tnlcn1NDMZsfqsNzuutGaQe38o8LOy2uv1j26/zvzPw5qgyKdpMfeG3YKveeZN4La+wvC/3evnTg9Ojb+o9z9gzafOXP3me4+Kft8nqRpkvpLGilpXLbZOJXCDXQ4MouiIbMoInKLoiGzKIJ2PcxpZoMkDZf0iKS+7j4z+9abkvqW2We0pNGVTxGoHJlF0ZBZFFF7c0tm0dG4rUWqcjcEMbPukq6WdIq7f+ZdQb302sjo07vuPsbdR+R5uhmoJTKLoiGzKKJKcktm0ZG4rUXKci3OzKyrSiG+3N2vycpvZa/dXfIa3ln1mSLQfmQWRUNmUUTkFkVDZpG6Nl/WaGYm6WJJ09z9nBbfGi/pGElnZf9eV5cZJmzfzQYEtS/vsEFQG3VI5AGWFbvlH+jVd4LSf11wR1D7633hhZudUeqZnXLn00Ft2K4bhxv26RGUfvqdfWs/ocWLw9qbYTOSbU77v6AWa/xRzom/vyWoXXjsjkFtmdVXCWojdh8aPeYzvVYKasf+5e6gdvMTr+WYYcdJPbMxu500Lqjdcf7R4YbLd81/0IG9g9KekVrDRJo43HLdpKD23SsfbsRsklPE3Faqe5lmN+d8abuwGGv+ESnddf3koHbAuTe3d2poh2bJ7F3TwqYc2/zs2qD28cJ4A7iFi8JALt+1S1D7KNJ8DvWX55qzHSQdJelJM5uS1U5XKcBXmdnxkl6RdHh9pgi0G5lF0ZBZFBG5RdGQWSSvzcWZu98vqVwr6N1qOx2gemQWRUNmUUTkFkVDZlEEuRuCAAAAAADqh8UZAAAAACSgXe9z1in0ir+bul91UlhcI2zYoC6Vr3cXP/9mtN73m/8b1GbP+6jicdCxTr7swaB2zxaDwg1jjRSWi9Q++iQ+UOSC3xtveTKo3f1MeGHx2Tc+Hj9mFcbcPS1Xbd3VVw5qx35uSPSYX9xmvaD25nsfVjA7tNedT4e52e2blwa1qpuE1NrCSAMcSZr5XlD69tj7gto5Nz9R6xmhAHYa0i9aX3+7wbn2jzX/OOi8sEnSBx8vbN/EgEy12aH5Rzp45gwAAAAAEsDiDAAAAAASwOIMAAAAABLA4gwAAAAAEmDukbetr9dgZg0ZbGj/nkFt6t++Hm64bIPWpu/MD0qX3TAlqH3nioeju781d0HNp1RU7l7u/UnqolGZjdlmvT5B7cjIxee/vSnevOPVSO7QeJ0pszGf33jNoPaFrcNGLpL01SO3D4srdss30Cuzg9Kfbp0a1M6O3PZK0ktvz8s3Tucw0d1HNGqw1DIbM+UXh0Xrm++yUViM/MWve9Dvg9rLZK6WGppZqRi5RdrK3T/gmTMAAAAASACLMwAAAABIAIszAAAAAEgAizMAAAAASEBTNgSJ+dHILYLamcftFG64+sq5j/nILU8GtYvvfSao3f7U60GNC4Er09mbK6B4yCwKiIYgSzllr02j9XN/dFBYpCFIR6AhCAqHhiAAAAAAkDAWZwAAAACQABZnAAAAAJAAFmcAAAAAkAJ3b/VD0gBJd0l6WtJTkk7O6j+V9LqkKdnHvjmO5XzwUc1HWxkjs3yk9kFm+SjgxwQyy0fBPtrMLLnlI7WPctlqs1ujmfWT1M/dJ5nZypImSjpI0uGS5rv7b1s9wGeP1fpgQBvydL4js0gJmUUBtdn5jswiMbm6NZJbpKTc/YNlc+w4U9LM7PN5ZjZNUv/aTg+oHTKLoiGzKBoyiyIityiCdl1zZmaDJA2X9EhWOsnMnjCzS8ysZ5l9RpvZBDObUNVMgQqQWRQNmUXRkFkUEblFsvK8Rjd76WN3lZ7+PST7uq+kLiot8H4p6RJen8tHvT/y5pXM8pHKB5nlo4Afua7fIbN8JPSRO7Pklo9UPsplK9czZ2bWVdLVki5392tUOuJb7r7I3RdLukjS1nmOBTQCmUXRkFkUDZlFEZFbpK7NxZmZmaSLJU1z93Na1Pu12OxgSVNrPz2g/cgsiobMomjILIqI3KII8nRr3FHSfZKelLQ4K58uaZSkYSo9NTdd0oleutCytWO1PhjQBs/X+Y7MIhlkFgWUp1sjmUVK8nZrJLdIRrn7B20uzmqJIKNaee7o1hKZRbXILAoo1x3dWiGzqIGGZlYit6heufsH7erWCAAAAACoDxZnAAAAAJAAFmcAAAAAkAAWZwAAAACQABZnAAAAAJAAFmcAAAAAkAAWZwAAAACQgGUbPN5sSa9kn/fOvm4GzXQuUrrnM7ADxiSzxZDq+ZDZ2mmmc5HSPp9G57ZZMys11/mkfC4deVub8s+lEs10PimfS9nMNvRNqD8zsNmERr9hYL0007lIzXc+tdJMP5dmOhep+c6nVprp59JM5yI13/nUSrP9XJrpfJrpXGqp2X4uzXQ+RT0XXtYIAAAAAAlgcQYAAAAACejIxdmYDhy71prpXKTmO59aaaafSzOdi9R851MrzfRzaaZzkZrvfGql2X4uzXQ+zXQutdRsP5dmOp9CnkuHXXMGAAAAAPgPXtYIAAAAAAlgcQYAAAAACWj44szM9jazZ83sBTM7rdHjV8vMLjGzWWY2tUWtl5ndZmbPZ//27Mg55mVmA8zsLjN72syeMrOTs3ohz6deyGw6yGw+ZDYdZDa/Iue2mTIrkdu8ipxZqbly20yZbejizMy6SPofSftI2ljSKDPbuJFzqIGxkvZeqnaapDvcfbCkO7Kvi2ChpG+7+8aStpX0jez3UdTzqTkymxwy2wYymxwym0MT5HasmiezErltUxNkVmqu3DZNZhv9zNnWkl5w95fc/RNJV0oa2eA5VMXd75U0Z6nySEnjss/HSTqooZOqkLvPdPdJ2efzJE2T1F8FPZ86IbMJIbO5kNmEkNncCp3bZsqsRG5zKnRmpebKbTNlttGLs/6SXmvx9YysVnR93X1m9vmbkvp25GQqYWaDJA2X9Iia4HxqiMwmisyWRWYTRWZb1Yy5bYrfMbktqxkzKzXB77jomaUhSI156b0JCvX+BGbWXdLVkk5x97ktv1fE80H7FPF3TGY7tyL+jsls51bU3zG57dyK+Dtuhsw2enH2uqQBLb5eK6sV3Vtm1k+Ssn9ndfB8cjOzriqF+HJ3vyYrF/Z86oDMJobMtonMJobM5tKMuS3075jctqkZMysV+HfcLJlt9OLsMUmDzWwdM+sm6QhJ4xs8h3oYL+mY7PNjJF3XgXPJzcxM0sWSprn7OS2+VcjzqRMymxAymwuZTQiZza0Zc1vY3zG5zaUZMysV9HfcVJl194Z+SNpX0nOSXpR0RqPHr8H8r5A0U9KnKr2++HhJq6nUAeZ5SbdL6tXR88x5Ljuq9PTuE5KmZB/7FvV86vhzIrOJfJDZ3D8nMpvIB5lt18+qsLltpsxm50Nu8/2cCpvZbP5Nk9tmyqxlJwQAAAAA6EA0BAEAAACABLA4AwAAAIAEsDgDAAAAgASwOAMAAACABLA4AwAAAIAEdKrFmZktMrMpZjbVzP5uZitWcayxZnZYG9uYmf3BzF4wsyfMbItWtj3IzNzMNswx9ilVzv1YM/tjju2OMbPns49j2toetdcBmT0yy+qTZvagmW3eyrbDsszunWPsY81szUrmne2/i5ld38Y2A8zsLjN72syeMrOTKx0PleN29t/7cztbEFsPBikAACAASURBVB2Q2e9m4y0Zc5GZ9SqzbWq3s0NazH2Kmc01s1MqHROV64Dc7mJm77f43f+4lW2Tym223fTsvs0UM5tQ6XiN0KkWZ5IWuPswd99E0ieSvtrym2a2bI3H20fS4OxjtKQLW9l2lKT7s3/bcoqkiv8I88j+o/iJpG0kbS3pJ2bWs55jIqrRmX1Z0s7uvqmkn0sa08q27cnssZIqvvHNaaGkb7v7xpK2lfQNM9u4zmMixO1sTtzOJqOhmXX3s7Pxhkn6gaR73H1Omc2Tup1192dbzH1LSR9KuraeY6KsRt/WStJ9S37/7n5mK9slldsWds3mPqJB41Wksy3OWrpP0vrZivs+Mxsv6Wkz62JmZ5vZY9mjsCdK/3509o9m9qyZ3S6pT44xRkq61EselrSqmfVbeiMz667Sm+cdr9I7zC+pdzGz32aPijxhZt80s/+nUojvMrO7su3mt9jnMDMbm31+gJk9YmaTzex2M+vbjp/PXpJuc/c57v6upNsktfkICOqq7pl19wez37ckPSxprdh2ZmaSvqDSjeoeZrZ8i+99P3t06nEzOyt7NG6EpMuzR6xWyB7B6p1tP8LM7s4+39rMHsoy+6CZDcn7w3H3me4+Kft8nqRpkvrn3R91we1s67idTU8jMtvSKJXeCDiQ4u3sUnaT9KK7v1Lh/qidRue2rALkNnmdcnFmpUcT9pH0ZFbaQtLJ7r6BSv9xv+/uW0naStIJZraOpIMlDZG0saSjJW3f4nhnmtmBkaH6S3qtxdczFL+zOFLSze7+nKR3zGzLrD5a0iBJw9x9M0mXu/sfJL2h0up/1zZO9X5J27r7cElXSvpe5GdxoJnFHv3IO3c0QAMz29Lxkm4q873tJb3s7i9KulvSftlx91Epz9u4++aSfuPu/5A0QdKR2SNWC1oZ8xlJn8sy+2NJv4r8LEaY2V9am7iZDZI0XNIjrW2H+uF29jM/C25nC6DRt7NWehna3pKuLrNJ0rezKj3IEV1YonEanNvtsoXVTWY2tMw2qebWJd1qZhPNbHQr43S4ejzlmbIVzGxK9vl9ki5WKUSPuvvLWX1PSZvZf15720Oll8vsJOkKd18k6Q0zu3PJQd297Otucxol6bzs8yuzrydK2l3Sn9x9YTZOuZc9lLOWpP+z0qPI3VR6ydpnuPt4SeMrnDfqr0Mya2a7qnSjvmOZTUaplFVl/x6t0h2M3SX91d0/zMZpb2Z7SBpnZoNVuiHtuvQG7j5B0ldamXv3bC6nuPvcdo6P6nE7uxRuZ5PXUZk9QNIDbbykMdXb2W6SDlTpZZnoGI3O7SRJA919vpntK+mf2bGWlmpud3T3182sj6TbzOwZd7+3nXNoiM62OFuQvU7630rPvuqDliVJ33T3W5babt8Kxntd0oAWX6+V1Voet5ekz0va1MxcUhdJbmbfbcc43uLz5Vt8fr6kc9x9vJntIumn7Tjm65J2afH1Wio9AoLGanRmZWabSfqLpH3c/Z3I97tIOlTSSDM7Ixt/NTNbuR3DLNR/nrlvmdmfS7rL3Q/Onv26u51z76rSfwKXu/s17dkXNcPtbH7czqah4bezmbLPPKV8O5vZR9Ikd3+rgn1RGw3NbcsHO939RjO7wMx6u/vsFsdNNrfu/nr27ywzu1al63yTXJx1ypc1tuEWSV/L7uTJzDYws5VU+gV+0Uqv3+0nqa2XukilR0qPtpJtVXpqeeZS2xwm6X/dfaC7D3L3ASo98vo5la4/ODF7ynrJHQxJmiepZdDfMrONzGwZlZ6qXqKH/nMnpb1dwG6RtKeZ9bTSBep7ZjWkp2aZNbO1JV0j6ajs5V8xu0l6wt0HZJkdqNKC6GCVMntc9nKd1jI7XaWLyaXSDfkSLTN7bFvzXWruptIjh9Pc/Zz27IuG43a2hNvZ4qhlZmVmPSTtLOm6MpskeTvbQtlr5ZCUWt4/WCP7f1ZmtrVKa4ilH8BNMrdmttKSBWJ2/ntKmtqeYzQSi7PQXyQ9LWmSmU2V9GeVnmG8VtLz2fculfTQkh2s/Otzb5T0kqQXJF0k6euRbUYp7HR0dVb/i6RXJT1hZo9L+lL2/TGSbrbsQnVJp0m6XtKDklreKfmppL+b2URJsxVhZa6FyJ5u/rmkx7KPMyt4ChqNUcvM/ljSapIusPLtZstm1t1vVunO8oTs5Rbfyb4/VtKfsmOuIOlnks7Ljr+oxXF+I+m/zWyyyjyzb+VfU76DpKMkfd7+0+q3mke1UT/czorb2YKpZWal0p3VW939gzLfT/V2dsmd2z1UeiAPaatlbg+TNDW7nfyDpCPc3ZfaJtXc9pV0fzb3RyXdkM0nSRb+XAEAAAAAjcYzZwAAAACQABZnAAAAAJAAFmcAAAAAkAAWZwAAAACQABZnAAAAAJAAFmcAAAAAkAAWZwAAAACQABZnAAAAAJAAFmcAAAAAkAAWZwAAAACQABZnAAAAAJAAFmcAAAAAkAAWZwAAAACQABZnAAAAAJAAFmcAAAAAkAAWZwAAAACQgKoWZ2a2t5k9a2YvmNlptZoUUC9kFkVEblE0ZBZFQ2aRCnP3ynY06yLpOUl7SJoh6TFJo9z96Vb2qWwwIOPuVum+ZBYdoZrMSu3PLZlFDcx299Ur3ZnMogM0NLPZPuQWVSl3/6CaZ862lvSCu7/k7p9IulLSyCqOB9QbmUURkVs02itV7k9m0WhkFk2jmsVZf0mvtfh6Rlb7DDMbbWYTzGxCFWMBtUBmUURt5pbMIjFkFkXD/QMkY9l6D+DuYySNkXgKGMVAZlE0ZBZFQ2ZRROQWjVDN4ux1SQNafL1WVus0+q26YlB748Jjg9ptk8Jn2/c8+4Z6TAmt6/SZRSGRWxQNmUXRkFkko5qXNT4mabCZrWNm3SQdIWl8baYF1AWZRRGRWxQNmUXRkFkko+Jnztx9oZmdJOkWSV0kXeLuT9VsZkCNkVkUEblF0ZBZFA2ZRUqquubM3W+UdGON5gLUHZlFEZFbFA2ZRdGQWaSiqjehBgAAAADURt27NTazr+y8YVhce7WwFmkIAgAAAAAt8cwZAAAAACSAxRkAAAAAJIDFGQAAAAAkgMUZAAAAACSAxRkAAAAAJIBujVX40cgtwuLHC4PS9696uAGzAQAAAGpjy0G9g9qfjt0pqI3Ya5OgduGf7owe8+vj7q9+Yk2OZ84AAAAAIAEszgAAAAAgASzOAAAAACABLM4AAAAAIAE0BMlpi8hFkV0HhrVPp78d1Ca/8k5d5gQAAABUa6t1Vg9qj55/VLhhr+5hzcPSoSPWjY5DQ5C28cwZAAAAACSAxRkAAAAAJIDFGQAAAAAkgMUZAAAAACSgqoYgZjZd0jxJiyQtdPcRtZhUikZtu35YXL5r4yeCqnWm3KI5kFkUDZmtHStT3279vrn233fztYPaVuuGzR/K2XP7wWFxjR5hLdIUImbCrVOD2smXPRDd9sEX3sp30Bro7Jl99KzDw2Ks+QfqrhbdGnd199k1OA7QSOQWRUNmUTRkFkVDZtHheFkjAAAAACSg2sWZS7rVzCaa2ejYBmY22swmmNmEKscCaqXV3JJZJIjMomjILIqG+7RIQrUva9zR3V83sz6SbjOzZ9z93pYbuPsYSWMkycxyviIZqKtWc0tmkSAyi6Ihsyga7tMiCVUtztz99ezfWWZ2raStJd3b+l7FNGzt1cIif5aFVOTcdusSPtl96/f2i26784HDw2Iksxf++c6g9sBzbwa1256aEdQ+/HhhdOxdN+4f1PquskJ026XtNjTc94+3hReQS9IDzzfuYvGOVOTM1sNKy4X/dW0faY5w3pd3CGob7bJh/oFenBWUjvyf24Pa3x56If8xO4nOktkNIo0xDhw+MNe+OwxeI6jtPnStoGZlOoKsFLmtbJjFld8BGrHH0KD2wJDwZyFJNuqCisdpr86SWUk6Za9Nw2L/XjUd42vj7qvp8TqTil/WaGYrmdnKSz6XtKek+D0oIBHkFkVDZlE0ZBZFQ2aRkmqeOesr6VorPaSzrKS/ufvNNZkVUD/kFkVDZlE0ZBZFQ2aRjIoXZ+7+kqTNazgXoO7ILYqGzKJoyCyKhswiJbTSBwAAAIAE1OJNqDuvyEW6P79uUuPngU7jkK3WCWo77z8svnHOC7a/NnrXsJZ3Qi+UacgRac5QjQG9ukfrO/7iupqOg/Qs2yW8ob3vjJFBbfjuYZOBqPb0MVi3T1C6/P/tGdRunRo2y5k976N2DISUxBqATf7L8fGNu0XuRnXtUuMZFUSsQdTbc4PSbROmB7WvXHJPHSaEcs79r53C4jJlOs/k8I+/PRTUbpjySsXH6+x45gwAAAAAEsDiDAAAAAASwOIMAAAAABLA4gwAAAAAEkBDkGq058JyoAbmzP84LMYuwpak5ar4835nflhbLdKUo8aNP8rZ4XND4vXB4fgPPF+mSQmSt9Gaqwa1v31tt6A2bLd8zT9mTw4vSL/o7mnRbbt2CR+r/M6JYbMcDewdlM7+4rZB7bi/3N32BJGknx+6VVhcsVt8Y6u8iUJyXpoVLf/94ReD2pWPhLVZcxcEtfufe7P6eaFip+61afwb/XtWftBZYZOXH139WFD7eOHiysfo5HjmDAAAAAASwOIMAAAAABLA4gwAAAAAEsDiDAAAAAASwOIMAAAAABJAt8ac1uy5UlhsoiZNKIZbp84Iap//xrjotj1WKNNdLIfn33o/qA3u2yOo7T60f+5jrttnlaC2zyEj8u3cfblouX/s7xLJ61mm890N39onqK2z/eBcx7zooruD2ol/vTeolWuyu14knyfsslFQ67HZgKDWffmuQW25ZeOPfdLBLC3dIl0699p0rXDD9nRl/PCTSC3SaTevxfHUjrluUq7db3ritaD28IthV9v5H30a3X9+uY7ASN45x+0U/8YylT83c9lNjwe1Z2a+V/HxEOKZMwAAAABIAIszAAAAAEgAizMAAAAASACLMwAAAABIQJsNQczsEkn7S5rl7ptktV6S/k/SIEnTJR3u7u/Wb5odb+OdhoTFyDW6F909rf6TQZs6U27vmvZGQ8Z56vXwR/XPSdNz73/2EdsGtbD9QxnzP4qWX31nfu7xU9eZMvvQjw+O1vM2/9Dbc4PSj65+LKiVa/4R88MDtwhqseYfMYd9abug1jXSaEKSDjrvlnbMKm3NkNkR66we1LoO6VfVMUf/8rqgdtHdz1R1TNRGM2S2XVZdsbr9Z88LSj/P2YgGlcvzzNlYSXsvVTtN0h3uPljSHdnXQErGityiWMaKzKJYxorMoljGiswicW0uztz9XklzliqPlLSkf/c4SQfVeF5AVcgtiobMomjILIqGzKIIKn2fs77uPjP7/E1JfcttaGajJY2ucByglnLllswiIWQWRUNmUTTcp0VSqn4Tand3Myv70n53HyNpjCS1th3QSK3llswiRWQWRUNmUTTcp0UKKl2cvWVm/dx9ppn1kzSrlpNKklmkGP5dvvn+gvrPBZXqfLlNyHcO3rLifX3m+9H6wy82/a+QzL4UnvIh594c1N6aW91t7wZr9Khq/6UdOHxgtL5Cty5BbcEni2o6dgcrVGZ33GCNmh9zxW7hXatukQYxnyxaXPOxUZFCZbacIbHbsGWra8r++BOvBbXn3oz/f4zaqfS3Nl7SMdnnx0gKWxMB6SG3KBoyi6IhsygaMouktLk4M7MrJD0kaYiZzTCz4yWdJWkPM3te0u7Z10AyyC2KhsyiaMgsiobMogjafFmju48q863dajwXoGbILYqGzKJoyCyKhsyiCKp7MSoAAAAAoCaq7tbYbLYY1Dv+DY805YmUYvtPmj67qjn1i7zD+wVH7xjU9hu2dlXj/OWeZ4La18fdX9Ux0TmdstemYbF/r8ZPBIX3eOT289qJ02s+zhUPvxDUtt9384qP95NrJ0TrTdb8o/BWXWm5mh/z9z85OKj95KARQW3aG+8GtbNumBLUXn57bnScqTPC/dF5PXPOl8LiitXl++nXOy5jq6zQNajttnH/oDbh5bej+78254Oaz6lReOYMAAAAABLA4gwAAAAAEsDiDAAAAAASwOIMAAAAABJAQ5Cl7Ld5maYaZpFi2BFkzUjzjkk5x441/pCkNy48NiyuvVpYi80x1sgkei7S14b0C2o3Pv5qULt+SlgDWjp86/XCYjx2ofkfBaVvXfFQdRNCh+m7ygpBbcgOg3Pv/9sbH6/ldMr6011PB7XzZ+wabrhWpLHNnPlB6dfXh40dkJ4TdtmoIeP03HxAUNs+Uhu/z2bhzu8viB7zm+fcFNRiOV64KHI/AM2nb4+aH/Ks6ydXvO9q3ePNSLZat09Q+16k+dIOg9cIat02WjM84PR4Q5DnIw1zdjvrX0EtxcYhPHMGAAAAAAlgcQYAAAAACWBxBgAAAAAJYHEGAAAAAAmgIchSJk2fHf9GrLFGpHT8ThsGtbwNNB758cHxb8Saf8Su730lclFkbLtBvePjRLYdPjDcloYgWGLHDcILdiVpux03qPiYC994L6j9/pYnKz4eOtYyy0Q6wXQp87hgpLHGzU++VuMZxUWbJixanG/nxeG+n+TdFx1q5Lk3B7UHxo2u/UAz5oS1WAOHrl3CWo+wqY4knf+zQ8La8TsHtUN/FzYOuWbCy9FjApXYMnK/ctzoSEMlSUNr3YRn0OrR8uBI/YWzRwW19b5zRVCb8W7HNgnhmTMAAAAASACLMwAAAABIAIszAAAAAEgAizMAAAAASECbizMzu8TMZpnZ1Ba1n5rZ62Y2JfvYt77TBPIjsygicouiIbMoGjKLIsjTrXGspD9KunSp+rnu/tuaz6iD3fB4mU6EFuk4FmlvuN+wtXONc/YR2wa1AdusG93202dnBrWDz7s1qJWd+1L8wR+X+06u/QtgrDpRZjvSrw/fJv6N7stVfMz//tfkivctuLHq7Lnt1T0o7bxhv6B29WO17zT3hy/vEBYj3WpjLr1+So1nUxhjVfDMPvHaO0HtskvvD2prRbJZztk3hHl45KVZQW39SLfGo7YfHNSO2XFIdJzum/QPi5HuzqftPyyobdhv1aD2u5sej47z8cKm6jw6VgXPbEfrtVL4//uEX34h3HCdeBfFjtRtozWD2q+/GN6POfJPdzZiOmW1+cyZu98rKdIDFkgTmUURkVsUDZlF0ZBZFEE115ydZGZPZE8R96zZjID6IbMoInKLoiGzKBoyi2RUuji7UNJ6koZJminpd+U2NLPRZjbBzCZUOBZQC2QWRZQrt2QWCSGzKBruHyApFS3O3P0td1/k7oslXSRp61a2HePuI9x9RKWTBKpFZlFEeXNLZpEKMoui4f4BUpOnIUjAzPq5+5IuFQdLmtra9s3gqbunBbWhO20Y1LpGLiD/ys7hdsMiF+2W68fx8+smBbW8zT9O2CUcW15moEj5osh5F1FnzGytbbten6C2fSTb7XH6f/8rqF3+0AtVHbOZNENu3563IKjNnvxKdNvewwcGtfOODBt13PLEa0Ft/scLg1qsjdM3dh8aHfubX94+Ws/jsUizh86qaJmN5eaoP9/VkLHfmR/m5pEXw9r/u+yB6P5XnbRHUDs00mxsqz02yVV79Z350XEue/D5aL1ZFC2zZb33YVhboVtVh1yz50pBbewJu4YbJtj8I6++PVbs6CkE2lycmdkVknaR1NvMZkj6iaRdzGyYSnfnp0s6sY5zBNqFzKKIyC2KhsyiaMgsiqDNxZm7j4qUL67DXICaILMoInKLoiGzKBoyiyKoplsjAAAAAKBGWJwBAAAAQAIqagjSGU1+ZXZQGxq72nzF8OLLi34VvnP60/c+G+4bO56kDdboEdRO3WvToPaVXTYKahvvNCQ84DLxgS79631B7c33w4v50TntvdmAsBjJe3sM6r1yUCt3UTqKaeGisNPQrU+GDT0k6UubrhXU+m+9blCbd/23g9qD9zwT1NaIXOi97g6Do2NX4y1uJ1FHi8v08PrKxfcEtcdffSeonfnd/cKdI3cD/vdbe0fHmRlpNHHH06/HJ4UOs8W3Lg9qky45Ib5xzkYhN/30kLC40nLtmVbyUmzoxDNnAAAAAJAAFmcAAAAAkAAWZwAAAACQABZnAAAAAJAAGoLk9LWxYbOM4QN7B7WhO28Y7hy5mDfaqKPMRb9fPnrHsBbbNtbnI7bdux9Ex/nFdRPjE0Cns9mAXkHtJyfvVfNx7pz2Rs2PifQd+ac7o/UHn38rqP1x9C7hhgNWC0rb77t5rrE/nhZvZLDc8pEL5NdZPdcxJ0UaRgH19t6HnwS1n183Kaj9107h/ZJB264XHrDfqtFxBkeaktEQJD2TXwmbwdx9+1PRbXc5YHi+g0Z+94UW6a4z76NPO2AireOZMwAAAABIAIszAAAAAEgAizMAAAAASACLMwAAAABIAA1Bcpr/8cKgdvSYu4LaxGEDw517rBDWlol074hcqNiubWPbvfx2ULIvXRgfB8h07RJ53KZrl6qO+f6TM4LaPx57qapjorn8zx3hxes3P/laUNt9aP+Kx7h6wsvR+nWRhjfb52wIguI6eMtBQe3cI7cPagf9/pbo/lNeDZswpOaH/3g0qF0WawhSxoXf2juoXTMhvO2eNfej9k0Mdfe9Kx+O1h/dbv2w2HvlOs+mweaHefx+5O/4Nzc+3ojZtAvPnAEAAABAAlicAQAAAEACWJwBAAAAQAJYnAEAAABAAtpcnJnZADO7y8yeNrOnzOzkrN7LzG4zs+ezf3vWf7pA28gsiobMoojILYqGzKII8nRrXCjp2+4+ycxWljTRzG6TdKykO9z9LDM7TdJpkr5fv6mmZ9L02UFt51MvD2o/PHCLoLZmzxWD2tCdNoyOM2fSK0FtYmTsn4+fGNQmR7brBMhslXqttFzNj3nn068HtUXlOpR2PmS2jBdnzc1Vq5ZZpNttTrFGuZ1E4XO7cf/wPvjAbcJOhpPP+3J0/1P/dGdQu/ieZ4LavI8+rWB2resW6aq756ZrBbU/H7dTdQP1XCko7bPZ2kFt3P3PVTdOYxQ+s+3xWKRjtyRtffJlQe3Rc74Ubrj6KmGtI2/wYvcZyvx/cMZf7w1qKXZmjGnzmTN3n+nuk7LP50maJqm/pJGSxmWbjZN0UL0mCbQHmUXRkFkUEblF0ZBZFEG73ufMzAZJGi7pEUl93X1m9q03JfUts89oSaMrnyJQOTKLoiGzKKL25pbMoqNxW4tU5W4IYmbdJV0t6RR3/8xziO7ukqKvT3L3Me4+wt1HVDVToJ3ILIqGzKKIKsktmUVH4rYWKcu1ODOzriqF+HJ3vyYrv2Vm/bLv95M0qz5TBNqPzKJoyCyKiNyiaMgsUtfmyxqtdJX0xZKmufs5Lb41XtIxks7K/r2uLjMsmHufnRnU9jz7hg6YSedFZttnswG9gtqtPzuk5uOMu+/Zmh+zWZDZjld6sLwynbWvTTPk9p8Tpwe1X8z/ONywT6QxgqRzfxxemnRupAnDD696JKg9M/O9oLZO75WD2jE7DomOvfrKywe1vlsOim5ba2/NXdCQcWqtGTJbC7FGIXbweUHt9AOGB7W9Nh0Q1HbaZ7NwkEjDmnaZPS8onXHR3UHtV/+aXN04CcpzzdkOko6S9KSZTclqp6sU4KvM7HhJr0g6vD5TBNqNzKJoyCyKiNyiaMgsktfm4szd75dUrm/mbrWdDlA9MouiIbMoInKLoiGzKIIqn3MEAAAAANQCizMAAAAASEC73ucMQPP52cGRjsD9Vq3qmK8/9nJQu2XqjKqOCdRTqU9ADh9/GpQWLV5c49mgUZ56/d2gtt6XLwxqL17x9fgBVugW1tZZPSj94vv7t3tuDVeusU0k80/NmFPfuSAJsWYbsdrQcfcFtal/PDp+0L49gtKDNz4e1G564rVcYzcjnjkDAAAAgASwOAMAAACABLA4AwAAAIAEsDgDAAAAgATQEARAzb389tyg9tGnizpgJkA+7uW6IXzWjCmvBrXps+fXejroQC+9PS+oHXraVdFtx56wS1BbeaM1ww27dOBj4R8vDErznn8zqJ3+90eju//x9qdqPiU0l1hjHTv4vA6YSXPgmTMAAAAASACLMwAAAABIAIszAAAAAEgAizMAAAAASAANQYBOZLllw8djDtpvWAfMBEiLmeXabq0+qwS1VVboGtTmLvi06jkhHddMeDl3fddIQ5Dv57yd3Wqd1YPaMsvEs/nJwsVBbfIrs4NabI5j7p6Waz4AGo9nzgAAAAAgASzOAAAAACABLM4AAAAAIAEszgAAAAAgAW02BDGzAZIuldRXkksa4+7nmdlPJZ0g6e1s09Pd/cZ6TRTIi8y2U/flOnoGnR6Z7XixRgrbRbabMWtuUOuMzT/IbHl3TXsjVw2NR25RBHm6NS6U9G13n2RmK0uaaGa3Zd87191/W7/pARUhsygaMouiIbMoInKL5LW5OHP3mZJmZp/PM7NpkvrXe2JApcgsiobMomjILIqI3KII2nXNmZkNkjRc0iNZ6SQze8LMLjGznmX2GW1mE8xsQlUzBSpAZlE0ZBZFQ2ZRROQWqcq9ODOz7pKulnSKu8+VdKGk9SQNU+lRiN/F9nP3Me4+wt1H1GC+QG5kFkVDZlE0ZBZFRG6RslyLMzPrqlKIL3f3ayTJ3d9y90XuvljSRZK2rt80gfYhsygaMouiIbMoInKL1OXp1miSLpY0zd3PaVHvl712V5IOljS1PlME2ofMlvfxwsVBzXb4eQfMBC2R2Y73jUvvz1VDCZlFEZFbFIG5e+sbmO0o6T5JT0pacs/udEmjVHr61yVNl3Rii2CXO1brgwFtcHdraxsyi5SQWRTQxLZetkVmkZg2MyuRW6Sl3P2DNhdntUSQUa08d3RricyiWmQWBZTrjm6tkFnUQEMzK5FbVK/c/YN2dWsEAAAAANQHizMAAAAASACLMwAAAABIzjiFbwAAIABJREFUAIszAAAAAEgAizMAAAAASACLMwAAAABIAIszAAAAAEjAsg0eb7akV7LPe2dfN4NmOhcp3fMZ2AFjktliSPV8yGztNNO5SGmfT6Nz26yZlZrrfFI+l468rU3551KJZjqflM+lbGYb+ibUnxnYbEKj3zCwXprpXKTmO59aaaafSzOdi9R851MrzfRzaaZzkZrvfGql2X4uzXQ+zXQutdRsP5dmOp+ingsvawQAAACABLA4AwAAAIAEdOTibEwHjl1rzXQuUvOdT60008+lmc5Far7zqZVm+rk007lIzXc+tdJsP5dmOp9mOpdaarafSzOdTyHPpcOuOQMAAAAA/AcvawQAAACABLA4AwAAAIAENHxxZmZ7m9mzZvaCmZ3W6PGrZWaXmNksM5vaotbLzG4zs+ezf3t25BzzMrMBZnaXmT1tZk+Z2clZvZDnUy9kNh1kNh8ymw4ym1+Rc9tMmZXIbV5FzqzUXLltpsw2dHFmZl0k/Y+kfSRtLGmUmW3cyDnUwFhJey9VO03SHe4+WNId2ddFsFDSt919Y0nbSvpG9vso6vnUHJlNDpltA5lNDpnNoQlyO1bNk1mJ3LapCTIrNVdumyazjX7mbGtJL7j7S+7+iaQrJY1s8Byq4u73SpqzVHmkpHHZ5+MkHdTQSVXI3We6+6Ts83mSpknqr4KeT52Q2YSQ2VzIbELIbG6Fzm0zZVYitzkVOrNSc+W2mTLb6MVZf0mvtfh6RlYrur7uPjP7/E1JfTtyMpUws0GShkt6RE1wPjVEZhNFZssis4kis61qxtw2xe+Y3JbVjJmVmuB3XPTM0hCkxrz03gSFen8CM+su6WpJp7j73JbfK+L5oH2K+Dsms51bEX/HZLZzK+rvmNx2bkX8HTdDZhu9OHtd0oAWX6+V1YruLTPrJ0nZv7M6eD65mVlXlUJ8ubtfk5ULez51QGYTQ2bbRGYTQ2ZzacbcFvp3TG7b1IyZlQr8O26WzDZ6cfaYpMFmto6ZdZN0hKTxDZ5DPYyXdEz2+TGSruvAueRmZibpYknT3P2cFt8q5PnUCZlNCJnNhcwmhMzm1oy5LezvmNzm0oyZlQr6O26qzLp7Qz8k7SvpOUkvSjqj0ePXYP5XSJop6VOVXl98vKTVVOoA87yk2yX16uh55jyXHVV6evcJSVOyj32Lej51/DmR2UQ+yGzunxOZTeSDzLbrZ1XY3DZTZrPzIbf5fk6FzWw2/6bJbTNl1rITAgAAAAB0IBqCAAAAAEACWJwBAAAAQAJYnAEAAABAAlicAQAAAEACWJwBAAAAQAI61eLMzBaZ2RQzm2pmfzezFas41lgzOyzHdrtkYz5lZve0st0wM3Mz2zvHMY81szXbO+el5nR9ju1WNbN/mNkzZjbNzLardExUptGZNbPvZuMtGXORmfUqs21SmTWzIS3mPsXM5prZKZWOicp0QGZ7mtm1ZvaEmT1qZpu0sm1Smc22Ozn7WT1FXjtGB2R2FzN7v8Vt1Y9b2TbFzE43syezuU+odDxUh/u0n5lTU92n7VSLM0kL3H2Yu28i6RNJX235TTNbtpaDmdmqki6QdKC7D5X0hVY2HyXp/uzfthwrqeIgt8N5km529w0lbS5pWgPGxGc1NLPufnY23jBJP5B0j7vPKbN5Upl192dbzH1LSR9KuraeYyKqoZmVdLqkKe6+maSjVbrdKiepzGYLyRMkba3Sbez+ZrZ+PcdEVKMzK0n3Lbm9cvczW9kuqcy2sGs29xENGg8h7tO2T2Hu03a2xVlL90laP1tx32dm4yU9bWZdzOxsM3sseyT2RKn0zuNm9kcze9bMbpfUJ8cYX5J0jbu/KknuPiu2kZmZSiE/VtIeZrZ8i+99P3uE6nEzOyt7ZGOEpMuzRy9WyB7F6p1tP8LM7s4+39rMHjKzyWb2oJkNyfvDMbMeknZS6d3W5e6fuPt7efdHXTQisy2NUukNKgMpZnYpu0l60d1fqXB/1EYjMruxpDslyd2fkTTIzPouvVGimd1I0iPu/qG7L5R0j6RD2rE/aq/Rt7NlJZpZpIn7tK2wgt2n7ZSLMys9mrCPpCez0haSTnb3DVR6d/T33X0rSVtJOsHM1pF0sKQhKt0ROFrS9i2Od6aZHRgZagNJPc3sbjObaGZHl5nS9pJedvcXJd0tab/suPtIGilpG3ffXNJv3P0fkiZIOjJ7xGRBK6f6jKTPuftwST+W9KvIz2KEmf0lsu86kt6W9NfsD+EvZrZSK2OhjhqY2SXfX1HS3pKuLrNJiplt6QiVWViiMRqY2ceVLWjMbGtJAyWtFdkuxcxOlfQ5M1st+5vbV9KAVsZCHTX4dna77A7qTWY2tMw2KWZWklzSrdn9mtGtjIMG4D7tZ34WTXGfth5P1adsBTObkn1+n0or6O0lPeruL2f1PSVtZv957W0PSYNVWnFf4e6LJL1hZncuOai7l3u9+LIqvbxqN0krSHrIzB529+eW2m6UpCuzz69U6Q/lakm7S/qru3+YjVPu5WXl9JA0zswGq3Rj2nXpDdx9gqSvlJn7FpK+6e6PmNl5kk6T9KN2zgHVaXRmlzhA0gNtvKQxtcxKksysm6QDVXpZJhqv0Zk9S9J52ZhPSposaVFku+Qy6+7TzOzXkm6V9IGkKWXmjvpqdGYnSRro7vPNbF9J/8yOtbTkMpvZ0d1fN7M+km4zs2fc/d52zgHV4z7tUprlPm1nW5wtyK5H+bfSs6/6oGVJpV/eLUttt28F482Q9I67fyDpAzO7V6XXuf47yGbWRdKhkkaa2RnZ+KuZ2f9v797jrKrr/Y+/PyKICnJVREAhUbyLiqiJd8VLpWCWYpmYHTqd8vLreMou51RW5jH1pJUpqQc101MqiZkYKmamooCKKCZeUEAEgVREFMXP74+9yHG+a8+smb1nz/e75/V8PPaDmQ9rr/Vde95s1nevtT7TvQXbeV8fngXt2qD+Q0nT3X2smQ1W6ROMlox9kbvPyL6/WaUgo7Zqndn1yp55ijiz6x0taba7L23Fc1G5mmbW3d+UdFr2fJP0oqQXGq032sy6+9XKLrUxs/NVeu9FbbVHZtd//Sczu9zM+rr78gbrjTmzi7M/l5nZZJXumWRyVnsc07Zs7Mkc03bIyxqbcZekr5hZZ0kys+2zU5/3SzrRStfv9pd0SIF13SZplJltmF2yso/CGxAPkzTH3Qe5+2B330alTxjGSpom6bTsubIPu+atktQw6AtU+jRDKv2jWK+HpMXZ1+MLjPef3P1VSQvtw2t6D5P0dEvWgZqpZmbXX5t9kEr5zRNlZhsoe68colG1zFqpA1eX7NsvSbq/4cFvJtrMZmcfZGZbq3R55m9bug7URDUzu2X2QcL6S3E3kLSi0WJRZtbMNl1/oJ3t/2iVLs9FnDimVXrHtEzOQlep9AObbWZzJV2p0hnGyZLmZ393naSH1j/Bylyf6+7zJE2VNEfSI5KucvfGb2LjFHaUu0XSOHefKmmKpJnZqetzsr+fJOkKy26elPQDlS7rmamPXhJzoaSfmNljKnOW1Jq+rvwMlW7SnCNpuHKu70UUqpbZzFhJf84+HcsTbWaz/3SOkHRrmbEjDtXM7I6S5prZ31U6a3pWzjLRZlbSLWb2tKTbJX3VI75JvYOrZmZPUCmzT0i6TNJJ7u6Nlok1s/0kPZCN/RFJd2TjQZw4pv1QMse0Fr4fAAAAAABqjTNnAAAAABABJmcAAAAAEAEmZwAAAAAQASZnAAAAABABJmcAAAAAEAEmZwAAAAAQASZnAAAAABABJmcAAAAAEAEmZwAAAAAQASZnAAAAABABJmcAAAAAEAEmZwAAAAAQASZnAAAAABABJmcAAAAAEAEmZwAAAAAQASZnAAAAABCBDSt5spkdJelSSZ0kXeXuFzSzvFeyPcDdrZLnk1nUWqWZlVqWWzKLKlju7ptXsgIyixqraWaz5cktKlLu+KDVZ87MrJOkX0o6WtJOksaZ2U6tXR/Q1sgsUkRu0Q5equTJZBbtgMyiblRyWeNISc+5+wvuvlbSTZKOq86wgDZBZpEicovUkFmkhswiGpVMzgZIWtjg+0VZ7SPMbIKZzTSzmRVsC6gGMosUNZtbMovIkFmkhuMDRKOie86KcPeJkiZKXJ+LNJBZpIbMIjVkFikit6iFSs6cLZY0qMH3A7MaECsyixSRW6SGzCI1ZBbRqGRy9qik7cxsiJl1kXSSpCnVGRbQJsgsUkRukRoyi9SQWUSj1Zc1uvv7ZvY1SXep1Hb0Gnd/qmojA6qMzCJF5BapIbNIDZlFTMy9dpfMcn0uKlWN3xnVEmQWlSKzSNAsdx9Rq42RWVRBTTMrkVtUruq/5wwAAAAAUD1t3q0RAAAgZUftNii3fufl48PiG28Hpf3OvD6oPfz8skqHBaAOceYMAAAAACLA5AwAAAAAIsDkDAAAAAAiwOQMAAAAACLA5AwAAAAAIkC3RgAAgCaccfgu+X+xQc6vKeq1aVA6cZ9tgxrdGgHk4cwZAAAAAESAyRkAAAAARIDJGQAAAABEgMkZAAAAAESAhiA1sO+2WwS1Cz67T1DbuEv+j2PkkbsW29DLK4LSb++bF9Suf3B+7tNnL3gtqC17851i20bd+8lnRga1c087IHfZu+4Nc3feH2YFtQefW1r5wACgij62efegdsweWxdfwT9WB6VbZr5YyZAAdCCcOQMAAACACDA5AwAAAIAIMDkDAAAAgAgwOQMAAACACFTUEMTMFkhaJWmdpPfdfUQ1BpWy0w4YFtSu+cHx4YJdO4c19/yVlqs3Nqh3UDr5C6PC2in75z//tVVB6cfX/y2offeWR4uNJ1Lk9qNO3m9oULvh7CPDBQeG+VKZaB45Zq+g9kFOjo+5+M5mxwcyi/SknNkte2wSFrftV3wFq8JGWg88+2oFI0ItpJzZ1B2y41ZB7d6JXwxqy+csDGoDzrw+d51r131Q+cDaSTW6NR7i7sursB6glsgtUkNmkRoyi9SQWbQ7LmsEAAAAgAhUOjlzSX82s1lmNiFvATObYGYzzWxmhdsCqqXJ3JJZRIjMIjVkFqnhmBZRqPSyxlHuvtjMtpA0zcyecff7Gy7g7hMlTZQkMyt48xTQpprMLZlFhMgsUkNmkRqOaRGFiiZn7r44+3OZmU2WNFLS/U0/q77tNzS8afi7P5sa1BavXF2L4ejcT+4R1IYN7JW/8JDNg9J3vnJoUHty0cqg9n8znm/54NpJR85tbvOP7x4XLph3Q3yFjh4b3lu9YECYxUdfeC2offGq+3LXueqd9yoeVwo6cmaRppQzO6hPt/YeAtpByplN3S55Dcc6hRf39d1jm6C2Va/845UFy9+qeFztpdWXNZrZpmbWff3XkkZLmlutgQFtgdwiNWQWqSGzSA2ZRUwqOXPWT9JkM1u/nt+6e3iKCIgLuUVqyCxSQ2aRGjKLaLR6cubuL0javYpjAdocuUVqyCxSQ2aRGjKLmNBKHwAAAAAiUI1fQo0Gzrrhb0Ftzdp17TCSkkkPPBvU+nbvmrvs5DNHB7VRx4QfJN301cODWkoNQToKy6ndcPaRYbGS5h8LwuYdZQ0OG85ss8+2YW1kWOvTbaPcVR56wR+Lbx8ACrhuwiHtPQSgbo3da3BQuyyn+Vyee26bHdRWrn630iFFhzNnAAAAABABJmcAAAAAEAEmZwAAAAAQASZnAAAAABABGoJUWXs2/yhq+ap3cuszXwybO4zKW7Bzp+oOCG3ix58ZGRYH9C703GWPvRTU+p1xXeFt9+8ZNhn51akHBDXL6Vpy7NG7BbVDRm2fu52PD+0X1B58bmmBEQJA2zjxkjvbewhAtF5e8VZY3LJnWFuzNih963czgtqba96rxrCiwpkzAAAAAIgAkzMAAAAAiACTMwAAAACIAJMzAAAAAIgAkzMAAAAAiADdGjugLx44LLd+9teOCIvvhF1wvnzl9GoPCRXIaXgoSdpzm76Fnv/N86cEtav+8kwFI5KWvP52UBtz6V2FnvtMTtemYWW6Nf7t0s8HNfvExYW2g/j8+osHBrUvfWqPcMGcNp+nXHhHUPvNg/OrMq7W6LlJl9z6d47ds9XrzOtuet0Dzwa1OQtXtnobHc3n9hsa1Lps3aeida5+9/2Knl+JAb3CTrndNupc0TpXrH43qJXr+gw05+YzRhdablVO5+U177Xfv61a4swZAAAAAESAyRkAAAAARIDJGQAAAABEoNnJmZldY2bLzGxug1pvM5tmZvOzP3u17TCBliG3SA2ZRWrILFJDZpGCIg1BJkn6haTrGtTOlXSPu19gZudm33+z+sOrX106hfPide65y677IL9exMk5Nztf/dXD8xfO2f5D0+cFtYn3hbUITVIHye2WPcMbwCXpyDF7FXr+SyveCmorc24Ar5VDLrg9qL148bjcZTcatlVQ+8HxI4La926dWfnA2t4k1WFmt91is6D23GWn5C88qHexlea8Vx04rH9Qq7QhSNfOnYLa0bsNCmqn7B82rBk7bt/8lVbwfq4Nwo4g/57XyKlMQ5DJOa/H8Zf9ufXjqYPMfiwnn9p0o4rWefpBOwS1O554OahNPC1sgLNxlzBzLfH5w3YOiwML/rsqY/XcRUFt8qwXg9oV9z4d1P42P2zq0M4mKfHMpm7w1jl5zGl21D2nqdm7761rgxHFp9kzZ+5+v6TG7/THSbo2+/paSWOqPC6gIuQWqSGzSA2ZRWrILFLQ2nvO+rn7kuzrVyX1q9J4gLZEbpEaMovUkFmkhswiKhX/njN3dzMre52GmU2QNKHS7QDV1FRuySxiRGaRGjKL1HBMixi09szZUjPrL0nZn8vKLejuE919hLuHN4IAtVUot2QWESGzSA2ZRWo4pkVUWnvmbIqkUyVdkP15W9VGlLgjdx0Y1C793P5BrV+PjYPamjI3Or759tpC256zcEVQ+0zezcH9cm6AlvR4zs28h/xkSqFtJ6Iuc3vF+AOKL7zgtaD02EvLqziayi15/e2g9oPJs3KXPf/csCHI8K37VH1M7Sj5zP70pJzGGOUaFLwR/uy/+Yu7g9orORmptPlHnlP23y6oTfzGJ4LaqpwGHP/67d9XfTwXnbRfUHMVbzBy+M4DqjmccpLPbKXGfnZkUPOjdg0X7JHTzMlyOiO0s013CY9rPp9XGxvOV/b96rVBbcbzZec+7aXDZ7YtTPqXg/P/YkDO+3/O29h1OY285i99s7JBJaJIK/0bJT0kaZiZLTKz01UK8BFmNl/S4dn3QDTILVJDZpEaMovUkFmkoNkzZ+6e38NaOqzKYwGqhtwiNWQWqSGzSA2ZRQpae88ZAAAAAKCKmJwBAAAAQAQqbqXfke09ZPOgNvWinDPm3bqGtRVvBaWem4VNQiSpf+dOhcYzLK+Yc3PxSw8/l/v8fX8wOai9+/4HhbaN2tg1p5HCsZ8Jbz4vZ5dv/l9Qe/bVNyoaUy388fGXc+vn59w7v0GEN9SjqPBnN2dR2Gxj6pyFtRiMtt+yZ1D7VE6jj3L5rLYrp8+ryXZQoQ1yPvfuuWntx1FrOccw//3ZfYLa6AvvCGpr13GsUW/WtuT48fXVQWni9LBJXUfBmTMAAAAAiACTMwAAAACIAJMzAAAAAIgAkzMAAAAAiAANQSqwS05zhtzmHy+vCEp/eChsyjFmzF7VGFazPOc3sUvS1n26BbWO8tvYk1bm56klrwelVe+817ZjqbWcff+gXMDRLs658aGgNna/ofkLD+oTlO68+ORwueWrgtJFt80Oaj+fNjeovZzTjKmc/7jp4cLLAjW3MDy2uPbup6q+mdG7Dgpq/UcMKfTcgz61R1Db83czgtrDzy9r+cAQjYG9woY3m3fPOR6W8g9CO4WN757MaQbVUXDmDAAAAAAiwOQMAAAAACLA5AwAAAAAIsDkDAAAAAAiQEOQCuy+dXjzuszC2jZ9g9KYwWFN763L3c4bTy4Kat+79dGgtnL1u0Htss/vH9QGl7kZ/0cnjAxqJ/7y7txlEb/bHng2qLWkGUJMtuq1SXsPAa30wmth844hZ1yXu+yVpx0Y1EYfvku4YM576jlnHFGo9t7fl+Rue8dzfxfUlr7xdlB76933c5+PNF365yeD2nmf3jtccGi/yjaU0xhMA3sFpUWPvhjUDr3g9txV5mVxyethZiv1s899PKidVbAhCDqGg3boH9TGnLRv/sJrw9z+JueY9s01ddbArAU4cwYAAAAAEWByBgAAAAARYHIGAAAAABFgcgYAAAAAEWh2cmZm15jZMjOb26D2fTNbbGaPZ49j2naYQHFkFikit0gNmUVqyCxSUKRb4yRJv5DUuL3W/7j7RVUfUQt12yjchW5dO9dk2+ffPjuobZaz7a5dwjHmNXW8/J6ncrfz17+/2vLBZU4/cIegdtBug3KX3XVg71ZvJzKTFHFm0XJXjA+7+NWhSeoguV2wPL9r6JE//VNQ2+2mh4Pa+Z8JO8t+Iq+r42YbB6XO24ddxSTpuclnBbW/3TknqI360W25z++gJinxzOZ1hFub0zm5S4XbmTg1zNLTr/wjqN2S061x0T9WV7h1NDBJiWc2Rq/kdAl9/YmXc5fN6xp9ypXTqz6mlDV75szd75e0sgZjAaqCzCJF5BapIbNIDZlFCiq55+xrZjYnO0Uc/rKOjJlNMLOZZjazgm0B1UBmkaJmc0tmERkyi9RwfIBotHZy9itJ20oaLmmJpIvLLejuE919hLuPaOW2gGogs0hRodySWUSEzCI1HB8gKq2anLn7Undf5+4fSPq1pPAGACAiZBYpIrdIDZlFasgsYlOkIUjAzPq7+5Ls27GS5ja1fLX0y7m5e/5PTwpq3XcZ2PqN5HXqkCT3oPT2068EtYU5Nzr+5sH5Qe2xl5YHtUoaf6Bp7ZXZmigT2XJRjt3J+w0NaoP33bbw84/72V3VHE67quvcFjRnYXh7yCcvmRrUdvv9I0FtdM7/Bf994j6529lguy3DdQ6qmyZJNVMPmb0kp3nHNzrlv6FuUKbBTGMTJhwSFp9bGpSGbL5ZofVJ0ndvDjP/1rvvF35+ezlp3/A9/uHnl7XDSErqIbO11KVTeF7n3otPDhfMOWaXpJ4vh8e/+KhmJ2dmdqOkgyX1NbNFkr4n6WAzGy7JJS2Q9OU2HCPQImQWKSK3SA2ZRWrILFLQ7OTM3cfllK9ug7EAVUFmkSJyi9SQWaSGzCIFlXRrBAAAAABUCZMzAAAAAIhAqxqCtJfbv35UUOu+04Cgdsctjwa155a+WfXxfHrEkKA2bOvwBvIfbh3egD7z2fBG4DvK/Db1ovp02yioHbTTVoWff9k07oFNUtirplQuU4/dleMPDIvl9mXBa206FqQjr3FIXq1fj01yn39OTkMQdEzfymkus9ugPrnLHlOwIUiuof2C0lk5tXLOGrNXUHtv1Zqg9umfT2vZuBrZcaueFT2/sX233aKq60NtjRiyeVj84IOwtkF+E53DfzSlyiOqP5w5AwAAAIAIMDkDAAAAgAgwOQMAAACACDA5AwAAAIAIJNUQZO8dwuYWD0ydE9Q+ecnUWgxHZ9/wYE22kyev+cfzF+X8hvZtw5uL33l6ce46b535QsXjQjz6du8a1Lp0Cj+PWbsu50beGtl1YNhAp1vfbuGC76/Lff7Xr/9btYeERPXbbOOg9pXDdgpq55xxRP4KLLx5/T9uerjicaE+vFfufTKvnvM+2yYG9ApKnRXWpvzy1FqMRsrr/5DTzGnhytVtPhRUR14zmNMOHBYu2Dv8f/vnl9+Tu857yxyD4kOcOQMAAACACDA5AwAAAIAIMDkDAAAAgAgwOQMAAACACCTVEOQvT7wc1PYdGv6m+S02CxshLHvznTYZUy3sObhvUJs18Yvhgt3C/dailUHp81fem7udlF8jhPY/aregdtGC5UHtzN/UpqnGlw/ZMahd8aMTwgVzbiDXwhW56/yfu56scFRI0bAtewS16d8+Nqj133Nw+OTlq3LXueiF14LatLmLWjw21Kcxl96VWz90WvgedP4JI4PaPjnvx3Un7707x8V3PtG240DVDO0XvtcevvPAoHbf7Y8FtRsemp+7zoIx6dA4cwYAAAAAEWByBgAAAAARYHIGAAAAABFgcgYAAAAAEWh2cmZmg8xsupk9bWZPmdlZWb23mU0zs/nZn+GvpQfaAZlFasgsUkRukRoyixSYe9N9U8ysv6T+7j7bzLpLmiVpjKTxkla6+wVmdq6kXu7+zWbWVVGTlvu+9amgdtAnhwe1VTkdtnb+1u+C2sKVqysZTmF9um0U1D62+WZB7een7J/7/H0OHBYWN+4SlN6Z90pQG3DWb4LaytXv5m4nBe5uzS0TU2Zr4fb/d1Ru/ZMn7F3o+XdNnhXUZr8UdnX89u8fCWrnHJ3fgWznAb2D2vjTDggX3CDnx/lB+JJPz+kEJUmHXvDH3HpMOnpm99+uX1DbdVCfws8/YPstg9rJx+weLti7W6H1vfb4S7n1Lb52XeExdQCz3H1EcwtVK7exZbZSXTt3CmrDtw4zf8fXjw5qvXPyrk3DY4go5RxP/vb6sBvwl675S1Bbs3ZdpVuvaWazddVVbvOcd3z4kv7n2UcGNTvwx7UYTt0pd3zQ7Jkzd1/i7rOzr1dJmidpgKTjJF2bLXatSuEG2h2ZRWrILFJEbpEaMosUtOj3nJnZYEl7SJohqZ+7L8n+6lVJ4cejpedMkDSh9UMEWo/MIjVkFilqaW7JLNob77WIVeGGIGbWTdItks529zcb/p2Xro3MPb3r7hPdfUSR081ANZFZpIbMIkWtyS2ZRXvivRYxKzQ5M7POKoX4Bne/NSsvza7dXX8N77K2GSLQcmQWqSGzSBG5RWrILGJXpCGIqXT97Up3P7tB/aeSVjS4ebK3u3+jmXVVdPPkiftsG9RuOuOIcMEhm4e1NWuD0n+DI4J0AAARC0lEQVReNi2oLf5HfpOQjbuEN/ieecSuucs2Nmz3QWGxxyZhrZmfRUMzpz0V1D5xyZ+C2rI33ym8zhQUbK4QTWZrYcseG+fWl/zy1LA4OOffRlGv/COsbRE2tpEkbRj+e8mV89O889aZQe2zvwj/rUrSW+++X2w77aijZ/a1nBz23X3rylaa94rm7PXV/3t/UPvGTQ/nrjLlRkltoGhzharkNrbMtqeT9xsa1IZs3j132f2GhlfefeKEkVUfU1F3/yFsLnXEhXfUavM1zWz2nLrKbZdO4fmaK8aHjbxOO3VUUKMhSOuUOz4ocs/Z/pJOkfSkmT2e1b4t6QJJvzOz0yW9JOmz1RgoUAVkFqkhs0gRuUVqyCyi1+zkzN0fUP7nlJJ0WHWHA1SOzCI1ZBYpIrdIDZlFCgo3BAEAAAAAtB0mZwAAAAAQgWYbglR1Y21w82Tf7l2D2uQzRwe1UcfsXmyFVuZsd5Vfp5WPvxzUrrxvXu6yl971ZFB7bdWaoPZBXd2amq9Ic4VqSvmG3+237BHUHvn+8UGtx9Atwid37RLWCjZhKOv1sNnO9AeeDWrH/s/UoJZC449yOnpme24SZuk7x+5Z0Trz3qavy8nSnIUrK9pOB1aouUK1xJZZJKmmmZXSzm2nDcI30eP3GhLUvnLYTkFt5MfCY4ZuE66pzsA6mHLHB5w5AwAAAIAIMDkDAAAAgAgwOQMAAACACDA5AwAAAIAIJN8QJM8Wm4VNQvbYpm9Q231Qn6B29O5bV7TtvOYda94Lmxnc9eSiirbTUXX05gpt4VufHB7Uzj/3U0FtTk7Dmt0Gh/+uJOn8P8wKarc/9lJQe/j5ZUWGmDQyiwTREASpoSFIjo02zD8Hc97xewe1I3cbFNR2PzRsCLLXyZcHtdkLlrdidKAhCAAAAABEjMkZAAAAAESAyRkAAAAARIDJGQAAAABEoC4bgqB+0VwBqSGzSBANQZAaGoLkGLJ599z6Czf+W1hc815QenDG80Ht8Av/GD517bqWDw40BAEAAACAmDE5AwAAAIAIMDkDAAAAgAgwOQMAAACAGLh7kw9JgyRNl/S0pKcknZXVvy9psaTHs8cxBdblPHhU8mguY2SWR2wPMssjwcdMMssjsUezmSW3PGJ7lMtWs90azay/pP7uPtvMukuaJWmMpM9KesvdL2pyBR9dV9MbA5pRpPMdmUVMyCwS1GznOzKLyBTq1khuEZNyxwcbFnjiEklLsq9Xmdk8SQOqOzygesgsUkNmkRoyixSRW6SgRfecmdlgSXtImpGVvmZmc8zsGjPrVeY5E8xsppnNrGikQCuQWaSGzCI1ZBYpIreIVpFrdLNLH7updPr3+Oz7fpI6qTTB+7Gka7g+l0dbP4rmlczyiOVBZnkk+Ch0/w6Z5RHRo3BmyS2PWB7lslXozJmZdZZ0i6Qb3P1Wlda41N3XufsHkn4taWSRdQG1QGaRGjKL1JBZpIjcInbNTs7MzCRdLWmeu1/SoN6/wWJjJc2t/vCAliOzSA2ZRWrILFJEbpGCIt0aR0n6q6QnJX2Qlb8taZyk4Sqdmlsg6cteutGyqXU1vTGgGV6s8x2ZRTTILBJUpFsjmUVMinZrJLeIRrnjg2YnZ9VEkFGpIge61URmUSkyiwQVOtCtFjKLKqhpZiVyi8qVOz5oUbdGAAAAAEDbYHIGAAAAABFgcgYAAAAAEWByBgAAAAARYHIGAAAAABFgcgYAAAAAEWByBgAAAAAR2LDG21su6aXs677Z9/WgnvZFind/tmmHbZLZNMS6P2S2euppX6S496fWua3XzEr1tT8x70t7vtfG/Lq0Rj3tT8z7UjazNf0l1B/ZsNnMWv/CwLZST/si1d/+VEs9vS71tC9S/e1PtdTT61JP+yLV3/5US729LvW0P/W0L9VUb69LPe1PqvvCZY0AAAAAEAEmZwAAAAAQgfacnE1sx21XWz3ti1R/+1Mt9fS61NO+SPW3P9VST69LPe2LVH/7Uy319rrU0/7U075UU729LvW0P0nuS7vdcwYAAAAA+BCXNQIAAABABJicAQAAAEAEaj45M7OjzOzvZvacmZ1b6+1XysyuMbNlZja3Qa23mU0zs/nZn73ac4xFmdkgM5tuZk+b2VNmdlZWT3J/2gqZjQeZLYbMxoPMFpdybuspsxK5LSrlzEr1ldt6ymxNJ2dm1knSLyUdLWknSePMbKdajqEKJkk6qlHtXEn3uPt2ku7Jvk/B+5L+3d13krSvpK9mP49U96fqyGx0yGwzyGx0yGwBdZDbSaqfzErktll1kFmpvnJbN5mt9ZmzkZKec/cX3H2tpJskHVfjMVTE3e+XtLJR+ThJ12ZfXytpTE0H1UruvsTdZ2dfr5I0T9IAJbo/bYTMRoTMFkJmI0JmC0s6t/WUWYncFpR0ZqX6ym09ZbbWk7MBkhY2+H5RVktdP3dfkn39qqR+7TmY1jCzwZL2kDRDdbA/VURmI0VmyyKzkSKzTarH3NbFz5jcllWPmZXq4GecemZpCFJlXvrdBEn9fgIz6ybpFklnu/ubDf8uxf1By6T4MyazHVuKP2My27Gl+jMmtx1bij/jeshsrSdniyUNavD9wKyWuqVm1l+Ssj+XtfN4CjOzziqF+AZ3vzUrJ7s/bYDMRobMNovMRobMFlKPuU36Z0xum1WPmZUS/hnXS2ZrPTl7VNJ2ZjbEzLpIOknSlBqPoS1MkXRq9vWpkm5rx7EUZmYm6WpJ89z9kgZ/leT+tBEyGxEyWwiZjQiZLawec5vsz5jcFlKPmZUS/RnXVWbdvaYPScdIelbS85K+U+vtV2H8N0paIuk9la4vPl1SH5U6wMyXdLek3u09zoL7Mkql07tzJD2ePY5JdX/a8HUis5E8yGzh14nMRvIgsy16rZLNbT1lNtsfclvsdUo2s9n46ya39ZRZy3YIAAAAANCOaAgCAAAAABFgcgYAAAAAEWByBgAAAAARYHIGAAAAABFgcgYAAAAAEehQkzMzW2dmj5vZXDP7vZltUsG6JpnZCc0sc5yZzcm2OdPMRjWx7BgzczPbocC2z65w7OPN7BfNLLONmc3Oxv6Umf1ra7eH1muHzJqZXWZmz2XZ3bOJZaPKbLbcqWY2P3uc2tzyqL52yOzBZvZGts3Hzey/mlh2eJbZowpse7yZbdWacTcY1x8LLLfAzJ5c//9Ea7eH1qt1ZrPlDm7w/+tfmlguxsz2NLObzewZM5tnZvu1dptovXZ4r93BzB4ys3fN7Jxmlo0xt9eY2TIzm9vabdVKh5qcSVrj7sPdfRdJayV9ZMJhZhtWeXv3SNrd3YdL+qKkq5pYdpykB7I/m3O2pFb/IyxoiaT9srHvI+ncSv7xoNVqndmjJW2XPSZI+lUTy0aVWTPrLel7KuV1pKTvmVmvttwmctU6s5L012ybw939vCaWa0lmx0uq1XveIdnYR9Roe/iommbWzHpKulzSse6+s6TPNLF4jJm9VNJUd99B0u6S5tVgmwjV+r12paQzJV1UYNkYcztJUrOTxRh0tMlZQ3+VNDSbcf/VzKZIetrMOpnZT83s0ezMwZelf55R+IWZ/d3M7pa0RXMbcPe3/MNfJLepSr8cL2Bm3VT65Xmnq/Qb5tfXO5nZRdmnInPM7AwzO1OlEE83s+nZcm81eM4JZjYp+/pTZjbDzB4zs7vNrF/RF8fd17r7u9m3G6ljZyUWbZ5ZScdJus5LHpbU08z6N14oxsxKOlLSNHdf6e7/kDRNibwR17FaZLYQMzOVDoLHSzrCzLo2+LtvWuns1RNmdkH2CfIISTdkn0xvbKUzXH2z5UeY2X3Z1yOzT5MfM7MHzWxYtcaMdlGLzJ4s6VZ3f1mS3H1Z3kIxZtbMekg6UNLV2djXuvvrRZ+PNlOLY9pl7v6oSr+wuqwYc5uN/36VJpjR65AH3Fb6NOFoSU9mpT0lneXu26t0sPmGu+8taW9J/2JmQySNlTRM0k6SviDp4w3Wd56ZHVtmW2PN7BlJd6h09izPcSp9CvWspBVmtldWnyBpsKTh7r6bpBvc/TJJr6j0SeshzezqA5L2dfc9JN0k6Rs54zvWzHI/aTazQWY2R9JCSf/t7q80sz20kRpmdoBKP+/1FmW1xmLMbNGxowZq+T4rab/sP/s7zWznMst8XNKL7v68pPskfSJb79Eq5Xkfd99d0oXufrOkmZI+l30yvaaJXX1G0gFZZv9L0vk5r8UIMyt35YRL+rOZzTKzCU1sB22shpndXlIvM7sv+7l/ocyQYszsEEmvSfrf7CD5KjPbtIltoY3V+L22iBhzm5S2uLwkZhub2ePZ139V6ZOfj0t6xN1fzOqjJe1mH15720OlS7wOlHSju6+T9IqZ3bt+pe5e9h4Hd58sabKZHSjph5IOz1lsnEqXCUilA9JxkmZly17h7u9n62rpjH+gpP+z0pmPLpJebLyAu0+RNKXM2Beq9FpsJekPZnazuy9t4RhQmZpntqAoM4so1DqzsyVt4+5vmdkxkv6QrauxcSplVdmfX5B0i0qZ/V93fzvbTksz20PStWa2nUoTrc6NF3D3mZK+VOb5o9x9sZltIWmamT2TfcKL2ql1ZjeUtJekwyRtLOkhM3s4+7CroRgzu6FKB/9nuPsMM7tU0rmS/rOFY0DlYj4+iC23Selok7M12T1U/1Q6+6rVDUsqvenc1Wi5YyrZsLvfb2YfM7O+7r68wXp7SzpU0q5m5pI6SXIz+4+WrL7B110bfP1zSZe4+xQzO1jS91s59lesdAPlAZJubs060Gq1zuxiSYMafD8wqzVcb6yZXSzp4AbfD1TpUzvUVk0z6+5vNvj6T2Z2ec77bCdJn5Z0nJl9J9t+HzPr3oJNva8PrzZpmNkfSpru7mPNbLBamDl3X5z9uczMJqt0vySTs9qq9fvsIkkr3H21pNVmdr9K9279c3IWcWYXSVrk7jOy729WaXKG2mu3Y9pyIs5tUjrkZY3NuEvSV8yssySZ2fbZKfv7JZ1opet3+0tq7vIsmdlQy/6lWKnr3UaSVjRa7ARJ17v7Nu4+2N0HqXS24ACV7pn5cnbKev1BsSStktQw6EvNbEcz20ClU9Xr9dCHB9Yt6lxnZgPNbOPs614q3V/095asAzVTtcyqdEbqC1ayr0qXQyxptEyUmVXpdRhtZr2yzI7OaohPNd9nt2zwPjtSpf/XGr/PHiZpjrsPyjK7jUqf5I5VKbOnWdbprInMLlDpbIdUOvhYr2Fmxzc33kZj33T9QUu2/6MlRd9JrIOq5vvsbZJGmdmGWe72UdhUI8rMuvurkhbah/f7HCbp6ZasAzVVzdwWEWVuU8PkLHSVSm80s7OzRVeqdIZxsqT52d9dJ+mh9U+w8tfnflrS3Oy08y8lnejujZuCjMvW3dAtWf0qSS9LmmNmT6h0E7EkTZQ01bLmCip9avVHSQ+q1GVxve9L+r2ZzZK0XDms/P07O0qakW33L5Iucvcnc5ZD+6tmZv8k6QVJz0n6taR/y1kmysxml0j8UNKj2eO8Vlw2gdqoZmZPUOl99glJl0k6qSXvs+4+VaUPJWZm79XrW0RPknSFZTepS/qBpEut1O5+XYP1XCjpJ2b2mMpcjWLl74PoJ+mBbOyPSLojGw/iU7XMuvs8SVMlzVHp536VuzeelMeaWUk6Q6UGDnMkDVfOvT+IRtVym30QtkjS1yV918wWmdlmjRaLNrdmdmO2n8OysZ+et1wMLPw/DAAAAABQa5w5AwAAAIAIMDkDAAAAgAgwOQMAAACACDA5AwAAAIAIMDkDAAAAgAgwOQMAAACACDA5AwAAAIAI/H+NhSvXY8VwDwAAAABJRU5ErkJggg==\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + } + ] +} \ No newline at end of file From 2c160ff8ee7d5ff09935b12517f4713e202412c4 Mon Sep 17 00:00:00 2001 From: RVP20 <77159539+RVP20@users.noreply.github.com> Date: Thu, 21 Jul 2022 20:15:15 +0530 Subject: [PATCH 5/5] Assignment4 --- Final Task/A4_201043.ipynb | 1200 ++++++++++++++++++++++++++++++++++++ 1 file changed, 1200 insertions(+) create mode 100644 Final Task/A4_201043.ipynb diff --git a/Final Task/A4_201043.ipynb b/Final Task/A4_201043.ipynb new file mode 100644 index 0000000..9ffa7cd --- /dev/null +++ b/Final Task/A4_201043.ipynb @@ -0,0 +1,1200 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Copy of ICG-CVwTF-Final_Task.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU", + "gpuClass": "standard" + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "## Final Task:\n", + "This is your final evaluation for the project. As decided, we will be predicting images of people into three classes: `without_mask`, `mask_weared_incorrect` and `with_mask`. " + ], + "metadata": { + "id": "rtI19Rt-H7Uc" + } + }, + { + "cell_type": "code", + "source": [ + "import tensorflow as tf\n", + "import numpy as np\n", + "from tensorflow import keras\n", + "from keras import layers" + ], + "metadata": { + "id": "c2CiXcHQTbX8" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Loading the dataset\n", + "Make a copy of the dataset given to you in your Google Drive (keep it outside, don't put it in any folder to avoid inconvenience). Ensure it is named as `Mask_Dataset` or change the path (the variable `data_dir`) accordingly." + ], + "metadata": { + "id": "QKDPyiZTIm1c" + } + }, + { + "cell_type": "code", + "source": [ + "# Mount Google Drive\n", + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hNEMe7XsIjrK", + "outputId": "4014d5e8-15cc-4fb5-a213-0ed8773b0099" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mounted at /content/drive\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import pathlib\n", + "\n", + "path='/content/drive/MyDrive/Mask_Dataset/'\n", + "data_dir = pathlib.Path(path)" + ], + "metadata": { + "id": "8CXzo4MOJOl8" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Know the Dataset\n", + "Most of the code is written for you as you aren't used to these libraries. You are to go through the documentation for your benefit." + ], + "metadata": { + "id": "YHPHkGyDKscK" + } + }, + { + "cell_type": "code", + "source": [ + "# Print image count\n", + "image_count = len(list(data_dir.glob('*/*.png')))\n", + "print(image_count)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "PzbSy-vXKjD-", + "outputId": "f104e43d-a8ad-4952-906d-fbda41ea08d7" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "8982\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Print Output Labels\n", + "import os\n", + "output_classes = os.listdir(data_dir)\n", + "print(output_classes)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "rFHWFYj5NCVm", + "outputId": "0e9b62f6-c2fd-425f-c633-31e7a366e06e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "['mask_weared_incorrect', 'without_mask', 'with_mask']\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Plot count of each ouput label\n", + "import matplotlib.pyplot as plt\n", + "\n", + "count=[]\n", + "for label in output_classes:\n", + " this_path=path+label\n", + " dir=pathlib.Path(this_path)\n", + " im_count=os.listdir(dir)\n", + " count.append(len(im_count))\n", + "\n", + "print(count)\n", + "\n", + "plt.bar(output_classes,count)\n", + "plt.title(\"Statistics\")\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 299 + }, + "id": "fESyMw90KaxN", + "outputId": "0fcd386a-62dd-49d6-f7df-5eee277a226a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[2994, 2994, 2994]\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Check some sample images (Use of cv2)\n", + "import cv2\n", + "from google.colab.patches import cv2_imshow\n", + "for label in output_classes:\n", + " this_path=path+label\n", + " dir=pathlib.Path(this_path)\n", + " sample=str(os.listdir(dir)[0])\n", + " this_path=this_path + \"/\" + sample\n", + " dir=pathlib.Path(this_path)\n", + " img = cv2.imread(this_path)\n", + " cv2_imshow(img)\n", + "\n", + " \n", + " \n", + "\n", + "# Your code" + ], + "metadata": { + "id": "HDSJ2Zk5a14s", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 401 + }, + "outputId": "3591fdd1-c8c0-49e7-df7f-70bec081711a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "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\n" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "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\n" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "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1twrM9mbb2266XaM7TFUhUkBDexAjBCyCa5mt93r87q1aqBuzbdmrXlVMyKibmbTALODsQCqQUZGH72P0fuIMci0tl0vctn2y9v764+f+8ubqvruSiIkh6A8UCRcZtIbREHdTOTCDiduVOk74ILd9bZvb7fbt9fX99fXt5fbbd/31pq5miUTNBGYKlzFjIJUpCBITZqYMAWYHCpkgLOJlRPnqhiArCpiKJO0WbdDSIjambPCrLkLUJ222SJ125qbaWt6u49fx7i0Y1O5uHy4Hn3EUCU21Zdmr7u/7u1l97dre71uL5vvTbdmrVlbNUJh61KrPwlhIDMSyewxHqM/jn4co/dOskENwra329v1228v376buTdTkENUJCeup/PQKWeFMGMtkSspqjxUAQcuDS+X7dvr7ce399++//jt2/f31/eX621rm6kWDD6zWxURV8C4W4ZkIpJJEVNSUT/LVKggwTrJyEBEpbBgTDiWMgNXJDmQTM3ywlKENTVxmEzswlX2Zvvurem+2eu9/3r0W/Ory2vTX5sdfUSkAbvbrfnL3m673za/7e3l4pdmm2lzbW5uRdWrVGAaILFqupAge8S9j1+Pfj/6o0dEiijFs1308tZev1+//Xz98Zu6z45Y5VViE/83ZVBGYtUIQSKAADMB4kSuNuDa7O16+f7+9vO3H3/7/fefv//+/ceP6+3W9l3dKZJkRI6oFwmKpFhaS9+4ZQaTkiOUKVmdB9VmM5nOZYAYyMAM0TmzMsxCVpBVR6oZzERVBarGmadSDd60tdn6v7Tj2nw33YU308/djz4iaCK722Xz294um182u2x+3X1zayqm2nxBKXJWJEaRICMzg5Xp/urxz3v/4358HtETgLVtb/ub3L7b6/f2+n17/ba9fjd3r6ZRQcqmQgoNlpLAEACayUwZE9qYHfry/oXEbabXfXt9eXl///btx4/37z9e3t/btokaRSOiH+N4PHrvyYK40Ed/RHRIVx1mA8roMrpkiqlJU3fzZqaF8ghTMoUpGYxgDuaISV0YiGAkyBRRM3VX95k8VP5WtSo9Mre2XbYUQgnJlIgmuLv24UmqSHO/NN9335tvm+2b7c03V5NqaWixTypFVFMpgKXSOKJn3kf8eoz/uPf/+ByfnanubXvZXnB919u7Xl+xXdK2VBcxX+kqVo2nCqYiCROQOVT6hDYWbMbZfjFgb7js++16fXl5eX17fXl9u768bNerqhWho49xHMfj/jiOIwsYBEbGEXFEdKIDnYwx+Dgkw9yaybY1V9NlAwUVc8kQkeOI0SWOGEcczAyORIaQVKUnW4oZTKDlNsnqKKiZeXOfUEykZGyCo9mISKJCd2u+ba01bc22ZlszN7MqASsxW6ihqKopISkhmQmMyEfPjx6/jvzzwD1VbLttr/by7fLt5+Xbz+3lm243qicEENdVWZkVooioOEj0JIkj0irhw0w6RbC57G6byeul/fj+7fv37+/vby8vL/tlN28VPiIzInrvvffoY4zBTKgQMjJHZI/sEX1kjxiRTGoCEBcTdbXmbVMzEVGInQYYkWIiNtFYI4ITHK9UIeo/AAVWxDkUZun0LYlMAxrQBJvi6jYiYvbZ1bwIM+7NvNVxMldTEcUZ5de+VVFTAuzjiKy+YiRHSE8d4vTWru+37799/5d/+flv//j9H//4/vPn6/u3y+3Ft70KiYoBstDIaYCRxOBRPbos5vYMACJwxWVvt4q9P358+/btdntp3pCI3sdxUGREZLLgJwhUJM1ENQEhmT2Ooz8ex/0+7kdGCETKT7fN2mbe1FphPtVWRFIiJRNZaYK7URwGgw76YCweG5EjZgGnRV+kQkzUzeCupJFCKun1UklCCtXx1ry5tYkvuBf0UVD4l4YEJnBLcFDMhhQCN5/I981bu718++33v/39X//xj3/7H//j7//6j/dv75frdd+3/XJRkTKAiMCqNwREciQRHNX3xOTVRBYxCCZobtfL/vb28u3b+7cfv728vW/7TvJ43D9//cqIWmiIMFMEquqtFfZWyYvkg73Hx+f4/IwxhDBzb63te9su7purKaTWMyIkU2NIhEYgo3Br0YJpdjAZI2NEwU1RiXiCrENwYuwmxXTWwpDTnSREkpw+qgywublNA9RYwFz9ZzNjNsZUkrSkTrKHuurufttFmun17dtvP/71b3/7t3/91//xj3/87e9/v73c3F1NW3MRcVvgtquYiYhoEpHJ2bdafTs0gxpU5LK199fXH9+/ff/+7bcf33/+/Pn+7du27Rnx+evXH5Bj381dzM29ypOCTapkL4i8mzlhmRYhpJq3bdsvl23ftn1v3kysWK1ZOyIGo0uMzFCy8nA1W11AkpmjSz9wPNiPjMdqHVco5oJW52/SMt0mxUdjtqHMpwFaM1e1ZYB1AhZgKE8DiBTd1K272Wa2e7vtksKLbO31/bfffvzjb7//29//5d/+/veff/vbdr0USleQtcusp6qxWT6OyZlmF47hKntz28x82y/768vLj2/ffv724/v379/e33+8v397ue1mOcbnn3/gOAoK8G1v++6rEybuRb4ttC17z34wholkRJXpbdva1pq5q+rkkYDUVXvMlqE8+war+IIQCTETgxjMJTw4KEmhFCkXUJCEaUIVajCXBlPNNAIrW3JrzVt170RNz6ZqGW9RNAoREKgwMylbG7tvvfXrxqCJIWzb324/v739/P7t548fP3789v3Hb23fkhER1ZvzL93j2XBkIjMjxxgjc4Bhgs3tsl0uL29v7+8/vn//+fPnb7/9eH97e7nebpf9qqqjj+ORY8Tnx+at7ft+uTJeQDrg5U7NxYygguBNBe5+XO+jD5AT6i8GRk72jgAGNSHUWS2E6uJgglbVXVvNXhFrpibbZhzJibBEDomeEcEqZqYxTYWqAuZC+PVLY0sXVdjsHOFRrOYcztCpQmEYN99627bWL4PBFGNY2/d22/y6+da8tebb5ttO0phaBqjXj0Rq+VspDn1kJkNAN72Ibtb2l7e3Hz9/+/n773/7/fff//b9+/fb9bq5O6Cjx+hH7/3+OcjuvvcrknOuqlAB1ckeru6sadvafrscj8d4HNl79mBEeWohi0R1kvKhExUtoKVI2yQzv5CZKi/0ZlYthciMyC79MboRXfIA4vxZETWtZ5nlQqELZmJrEENOAL6MtIhiNbCm0xh0Y/O2tbZvWyRThgym2tZkd5hSkMkM0iFiajA1F4GPyJmDpmjSnvmytQa4bmIpbvv15duPH7//y+//8i8/f//bz58/397e99YE5NHH56/7/bMjI0aMwQgRsa21GJbhZFaBodNfm6v53vZtj0uMMR6P8Tji8YijZyQnaFE86yLpFvChhJHOjDl1F6gxiyyCrYqimpQmCkFKJmLmO6AipWY0ABUZk/6batVgrFm857DUkyMx3cQKiTW/UPxKVSXRHNm22PYcA6Cq+shUa5teHE2qwRFZwRUFaJuIeD+6CDIVTNDIsr64+0X96rtuF7/cLre3t99+/+33v/347ffvP368f3t/ub64GiOGfj5GT/dunqZJhQlNqRLzU0MlRATQTAXrHLuZu2dr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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Check shape of the images in your dataset. This will be helpful while specifying input_shape in your Transfer Learning Model\n", + "shape=img.shape" + ], + "metadata": { + "id": "jWBEMC1FUfXS" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Check if all the images have same shape, else you need to resize them to some common size\n", + "# The code provided as it is above in the template will help \n", + "for label in output_classes:\n", + " this_path=path+label\n", + " dir=pathlib.Path(this_path)\n", + " for i in range(0,len(im_count)):\n", + " sample=str(os.listdir(dir)[i])\n", + " this_path_=this_path + \"/\" + sample\n", + " #dir_=pathlib.Path(this_path)\n", + " img = cv2.imread(this_path_)\n", + " if(img.shape!=shape):\n", + " print(sample+\" has a different shape.\")\n", + " " + ], + "metadata": { + "id": "52BhBWRab5yc" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# If the shape is variable, reshape to a common size \n", + "# If it is same, prove it\n", + "len(im_count)" + ], + "metadata": { + "id": "G-Atau4Rfc-x", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "a9220c6d-f3bc-4d2c-fc8d-4c9b431a75d3" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "2994" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Anything else you want to plot/experiment\n", + "size=np.insert(shape,0,3*len(im_count))\n", + "data=np.zeros(size)\n", + "labels=[]\n", + "j=0\n", + "for label in output_classes:\n", + " this_path=path+label\n", + " dir=pathlib.Path(this_path)\n", + " for i in range(0,len(im_count)):\n", + " sample=str(os.listdir(dir)[i])\n", + " this_path_=this_path + \"/\" + sample\n", + " #dir_=pathlib.Path(this_path)\n", + " img = cv2.imread(this_path_)\n", + " data[j]=img\n", + " labels.append(label)\n", + " j=j+1\n", + "\n" + ], + "metadata": { + "id": "F0XHxMo2RVQd" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Model Definition\n", + "Choose a model for Transfer Learning (You may also experment with multiple models and keep all of them in this notebook)" + ], + "metadata": { + "id": "zSoUXS1cRbnu" + } + }, + { + "cell_type": "code", + "source": [ + "from tensorflow.keras.layers import Input, Lambda, Dense, Flatten\n", + "from tensorflow.keras.models import Model\n", + "from tensorflow.keras.preprocessing import image\n", + "from tensorflow.keras.models import Sequential" + ], + "metadata": { + "id": "QKZmIgXMTHfy" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Choose and define base model\n", + "base_model = tf.keras.applications.MobileNetV2(input_shape=shape,\n", + " include_top=False,\n", + " weights='imagenet')" + ], + "metadata": { + "id": "9xWLUibHRNGj", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "705c30f1-0401-40d5-c2f8-78fdb9260d88" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_128_no_top.h5\n", + "9412608/9406464 [==============================] - 0s 0us/step\n", + "9420800/9406464 [==============================] - 0s 0us/step\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Print base model summary and have a look at the layers\n", + "base_model.summary()" + ], + "metadata": { + "id": "J3TwB_GLd7BU", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "4a125ecf-490a-448b-d30f-53e442c8e2c3" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Model: \"mobilenetv2_1.00_128\"\n", + "__________________________________________________________________________________________________\n", + " Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + " input_1 (InputLayer) [(None, 128, 128, 3 0 [] \n", + " )] \n", + " \n", + " Conv1 (Conv2D) (None, 64, 64, 32) 864 ['input_1[0][0]'] \n", + " \n", + " bn_Conv1 (BatchNormalization) (None, 64, 64, 32) 128 ['Conv1[0][0]'] \n", + " \n", + " Conv1_relu (ReLU) (None, 64, 64, 32) 0 ['bn_Conv1[0][0]'] \n", + " \n", + " expanded_conv_depthwise (Depth (None, 64, 64, 32) 288 ['Conv1_relu[0][0]'] \n", + " wiseConv2D) \n", + " \n", + " expanded_conv_depthwise_BN (Ba (None, 64, 64, 32) 128 ['expanded_conv_depthwise[0][0]']\n", + " tchNormalization) \n", + " \n", + " expanded_conv_depthwise_relu ( (None, 64, 64, 32) 0 ['expanded_conv_depthwise_BN[0][0\n", + " ReLU) ]'] \n", + " \n", + " expanded_conv_project (Conv2D) (None, 64, 64, 16) 512 ['expanded_conv_depthwise_relu[0]\n", + " [0]'] \n", + " \n", + " expanded_conv_project_BN (Batc (None, 64, 64, 16) 64 ['expanded_conv_project[0][0]'] \n", + " hNormalization) \n", + " \n", + " block_1_expand (Conv2D) (None, 64, 64, 96) 1536 ['expanded_conv_project_BN[0][0]'\n", + " ] \n", + " \n", + " block_1_expand_BN (BatchNormal (None, 64, 64, 96) 384 ['block_1_expand[0][0]'] \n", + " ization) \n", + " \n", + " block_1_expand_relu (ReLU) (None, 64, 64, 96) 0 ['block_1_expand_BN[0][0]'] \n", + " \n", + " block_1_pad (ZeroPadding2D) (None, 65, 65, 96) 0 ['block_1_expand_relu[0][0]'] \n", + " \n", + " block_1_depthwise (DepthwiseCo (None, 32, 32, 96) 864 ['block_1_pad[0][0]'] \n", + " nv2D) \n", + " \n", + " block_1_depthwise_BN (BatchNor (None, 32, 32, 96) 384 ['block_1_depthwise[0][0]'] \n", + " malization) \n", + " \n", + " block_1_depthwise_relu (ReLU) (None, 32, 32, 96) 0 ['block_1_depthwise_BN[0][0]'] \n", + " \n", + " block_1_project (Conv2D) (None, 32, 32, 24) 2304 ['block_1_depthwise_relu[0][0]'] \n", + " \n", + " block_1_project_BN (BatchNorma (None, 32, 32, 24) 96 ['block_1_project[0][0]'] \n", + " lization) \n", + " \n", + " block_2_expand (Conv2D) (None, 32, 32, 144) 3456 ['block_1_project_BN[0][0]'] \n", + " \n", + " block_2_expand_BN (BatchNormal (None, 32, 32, 144) 576 ['block_2_expand[0][0]'] \n", + " ization) \n", + " \n", + " block_2_expand_relu (ReLU) (None, 32, 32, 144) 0 ['block_2_expand_BN[0][0]'] \n", + " \n", + " block_2_depthwise (DepthwiseCo (None, 32, 32, 144) 1296 ['block_2_expand_relu[0][0]'] \n", + " nv2D) \n", + " \n", + " block_2_depthwise_BN (BatchNor (None, 32, 32, 144) 576 ['block_2_depthwise[0][0]'] \n", + " malization) \n", + " \n", + " block_2_depthwise_relu (ReLU) (None, 32, 32, 144) 0 ['block_2_depthwise_BN[0][0]'] \n", + " \n", + " block_2_project (Conv2D) (None, 32, 32, 24) 3456 ['block_2_depthwise_relu[0][0]'] \n", + " \n", + " block_2_project_BN (BatchNorma (None, 32, 32, 24) 96 ['block_2_project[0][0]'] \n", + " lization) \n", + " \n", + " block_2_add (Add) (None, 32, 32, 24) 0 ['block_1_project_BN[0][0]', \n", + " 'block_2_project_BN[0][0]'] \n", + " \n", + " block_3_expand (Conv2D) (None, 32, 32, 144) 3456 ['block_2_add[0][0]'] \n", + " \n", + " block_3_expand_BN (BatchNormal (None, 32, 32, 144) 576 ['block_3_expand[0][0]'] \n", + " ization) \n", + " \n", + " block_3_expand_relu (ReLU) (None, 32, 32, 144) 0 ['block_3_expand_BN[0][0]'] \n", + " \n", + " block_3_pad (ZeroPadding2D) (None, 33, 33, 144) 0 ['block_3_expand_relu[0][0]'] \n", + " \n", + " block_3_depthwise (DepthwiseCo (None, 16, 16, 144) 1296 ['block_3_pad[0][0]'] \n", + " nv2D) \n", + " \n", + " block_3_depthwise_BN (BatchNor (None, 16, 16, 144) 576 ['block_3_depthwise[0][0]'] \n", + " malization) \n", + " \n", + " block_3_depthwise_relu (ReLU) (None, 16, 16, 144) 0 ['block_3_depthwise_BN[0][0]'] \n", + " \n", + " block_3_project (Conv2D) (None, 16, 16, 32) 4608 ['block_3_depthwise_relu[0][0]'] \n", + " \n", + " block_3_project_BN (BatchNorma (None, 16, 16, 32) 128 ['block_3_project[0][0]'] \n", + " lization) \n", + " \n", + " block_4_expand (Conv2D) (None, 16, 16, 192) 6144 ['block_3_project_BN[0][0]'] \n", + " \n", + " block_4_expand_BN (BatchNormal (None, 16, 16, 192) 768 ['block_4_expand[0][0]'] \n", + " ization) \n", + " \n", + " block_4_expand_relu (ReLU) (None, 16, 16, 192) 0 ['block_4_expand_BN[0][0]'] \n", + " \n", + " block_4_depthwise (DepthwiseCo (None, 16, 16, 192) 1728 ['block_4_expand_relu[0][0]'] \n", + " nv2D) \n", + " \n", + " block_4_depthwise_BN (BatchNor (None, 16, 16, 192) 768 ['block_4_depthwise[0][0]'] \n", + " malization) \n", + " \n", + " block_4_depthwise_relu (ReLU) (None, 16, 16, 192) 0 ['block_4_depthwise_BN[0][0]'] \n", + " \n", + " block_4_project (Conv2D) (None, 16, 16, 32) 6144 ['block_4_depthwise_relu[0][0]'] \n", + " \n", + " block_4_project_BN (BatchNorma (None, 16, 16, 32) 128 ['block_4_project[0][0]'] \n", + " lization) \n", + " \n", + " block_4_add (Add) (None, 16, 16, 32) 0 ['block_3_project_BN[0][0]', \n", + " 'block_4_project_BN[0][0]'] \n", + " \n", + " block_5_expand (Conv2D) (None, 16, 16, 192) 6144 ['block_4_add[0][0]'] \n", + " \n", + " block_5_expand_BN (BatchNormal (None, 16, 16, 192) 768 ['block_5_expand[0][0]'] \n", + " ization) \n", + " \n", + " block_5_expand_relu (ReLU) (None, 16, 16, 192) 0 ['block_5_expand_BN[0][0]'] \n", + " \n", + " block_5_depthwise (DepthwiseCo (None, 16, 16, 192) 1728 ['block_5_expand_relu[0][0]'] \n", + " nv2D) \n", + " \n", + " block_5_depthwise_BN (BatchNor (None, 16, 16, 192) 768 ['block_5_depthwise[0][0]'] \n", + " malization) \n", + " \n", + " block_5_depthwise_relu (ReLU) (None, 16, 16, 192) 0 ['block_5_depthwise_BN[0][0]'] \n", + " \n", + " block_5_project (Conv2D) (None, 16, 16, 32) 6144 ['block_5_depthwise_relu[0][0]'] \n", + " \n", + " block_5_project_BN (BatchNorma (None, 16, 16, 32) 128 ['block_5_project[0][0]'] \n", + " lization) \n", + " \n", + " block_5_add (Add) (None, 16, 16, 32) 0 ['block_4_add[0][0]', \n", + " 'block_5_project_BN[0][0]'] \n", + " \n", + " block_6_expand (Conv2D) (None, 16, 16, 192) 6144 ['block_5_add[0][0]'] \n", + " \n", + " block_6_expand_BN (BatchNormal (None, 16, 16, 192) 768 ['block_6_expand[0][0]'] \n", + " ization) \n", + " \n", + " block_6_expand_relu (ReLU) (None, 16, 16, 192) 0 ['block_6_expand_BN[0][0]'] \n", + " \n", + " block_6_pad (ZeroPadding2D) (None, 17, 17, 192) 0 ['block_6_expand_relu[0][0]'] \n", + " \n", + " block_6_depthwise (DepthwiseCo (None, 8, 8, 192) 1728 ['block_6_pad[0][0]'] \n", + " nv2D) \n", + " \n", + " block_6_depthwise_BN (BatchNor (None, 8, 8, 192) 768 ['block_6_depthwise[0][0]'] \n", + " malization) \n", + " \n", + " block_6_depthwise_relu (ReLU) (None, 8, 8, 192) 0 ['block_6_depthwise_BN[0][0]'] \n", + " \n", + " block_6_project (Conv2D) (None, 8, 8, 64) 12288 ['block_6_depthwise_relu[0][0]'] \n", + " \n", + " block_6_project_BN (BatchNorma (None, 8, 8, 64) 256 ['block_6_project[0][0]'] \n", + " lization) \n", + " \n", + " block_7_expand (Conv2D) (None, 8, 8, 384) 24576 ['block_6_project_BN[0][0]'] \n", + " \n", + " block_7_expand_BN (BatchNormal (None, 8, 8, 384) 1536 ['block_7_expand[0][0]'] \n", + " ization) \n", + " \n", + " block_7_expand_relu (ReLU) (None, 8, 8, 384) 0 ['block_7_expand_BN[0][0]'] \n", + " \n", + " block_7_depthwise (DepthwiseCo (None, 8, 8, 384) 3456 ['block_7_expand_relu[0][0]'] \n", + " nv2D) \n", + " \n", + " block_7_depthwise_BN (BatchNor (None, 8, 8, 384) 1536 ['block_7_depthwise[0][0]'] \n", + " malization) \n", + " \n", + " block_7_depthwise_relu (ReLU) (None, 8, 8, 384) 0 ['block_7_depthwise_BN[0][0]'] \n", + " \n", + " block_7_project (Conv2D) (None, 8, 8, 64) 24576 ['block_7_depthwise_relu[0][0]'] \n", + " \n", + " block_7_project_BN (BatchNorma (None, 8, 8, 64) 256 ['block_7_project[0][0]'] \n", + " lization) \n", + " \n", + " block_7_add (Add) (None, 8, 8, 64) 0 ['block_6_project_BN[0][0]', \n", + " 'block_7_project_BN[0][0]'] \n", + " \n", + " block_8_expand (Conv2D) (None, 8, 8, 384) 24576 ['block_7_add[0][0]'] \n", + " \n", + " block_8_expand_BN (BatchNormal (None, 8, 8, 384) 1536 ['block_8_expand[0][0]'] \n", + " ization) \n", + " \n", + " block_8_expand_relu (ReLU) (None, 8, 8, 384) 0 ['block_8_expand_BN[0][0]'] \n", + " \n", + " block_8_depthwise (DepthwiseCo (None, 8, 8, 384) 3456 ['block_8_expand_relu[0][0]'] \n", + " nv2D) \n", + " \n", + " block_8_depthwise_BN (BatchNor (None, 8, 8, 384) 1536 ['block_8_depthwise[0][0]'] \n", + " malization) \n", + " \n", + " block_8_depthwise_relu (ReLU) (None, 8, 8, 384) 0 ['block_8_depthwise_BN[0][0]'] \n", + " \n", + " block_8_project (Conv2D) (None, 8, 8, 64) 24576 ['block_8_depthwise_relu[0][0]'] \n", + " \n", + " block_8_project_BN (BatchNorma (None, 8, 8, 64) 256 ['block_8_project[0][0]'] \n", + " lization) \n", + " \n", + " block_8_add (Add) (None, 8, 8, 64) 0 ['block_7_add[0][0]', \n", + " 'block_8_project_BN[0][0]'] \n", + " \n", + " block_9_expand (Conv2D) (None, 8, 8, 384) 24576 ['block_8_add[0][0]'] \n", + " \n", + " block_9_expand_BN (BatchNormal (None, 8, 8, 384) 1536 ['block_9_expand[0][0]'] \n", + " ization) \n", + " \n", + " block_9_expand_relu (ReLU) (None, 8, 8, 384) 0 ['block_9_expand_BN[0][0]'] \n", + " \n", + " block_9_depthwise (DepthwiseCo (None, 8, 8, 384) 3456 ['block_9_expand_relu[0][0]'] \n", + " nv2D) \n", + " \n", + " block_9_depthwise_BN (BatchNor (None, 8, 8, 384) 1536 ['block_9_depthwise[0][0]'] \n", + " malization) \n", + " \n", + " block_9_depthwise_relu (ReLU) (None, 8, 8, 384) 0 ['block_9_depthwise_BN[0][0]'] \n", + " \n", + " block_9_project (Conv2D) (None, 8, 8, 64) 24576 ['block_9_depthwise_relu[0][0]'] \n", + " \n", + " block_9_project_BN (BatchNorma (None, 8, 8, 64) 256 ['block_9_project[0][0]'] \n", + " lization) \n", + " \n", + " block_9_add (Add) (None, 8, 8, 64) 0 ['block_8_add[0][0]', \n", + " 'block_9_project_BN[0][0]'] \n", + " \n", + " block_10_expand (Conv2D) (None, 8, 8, 384) 24576 ['block_9_add[0][0]'] \n", + " \n", + " block_10_expand_BN (BatchNorma (None, 8, 8, 384) 1536 ['block_10_expand[0][0]'] \n", + " lization) \n", + " \n", + " block_10_expand_relu (ReLU) (None, 8, 8, 384) 0 ['block_10_expand_BN[0][0]'] \n", + " \n", + " block_10_depthwise (DepthwiseC (None, 8, 8, 384) 3456 ['block_10_expand_relu[0][0]'] \n", + " onv2D) \n", + " \n", + " block_10_depthwise_BN (BatchNo (None, 8, 8, 384) 1536 ['block_10_depthwise[0][0]'] \n", + " rmalization) \n", + " \n", + " block_10_depthwise_relu (ReLU) (None, 8, 8, 384) 0 ['block_10_depthwise_BN[0][0]'] \n", + " \n", + " block_10_project (Conv2D) (None, 8, 8, 96) 36864 ['block_10_depthwise_relu[0][0]']\n", + " \n", + " block_10_project_BN (BatchNorm (None, 8, 8, 96) 384 ['block_10_project[0][0]'] \n", + " alization) \n", + " \n", + " block_11_expand (Conv2D) (None, 8, 8, 576) 55296 ['block_10_project_BN[0][0]'] \n", + " \n", + " block_11_expand_BN (BatchNorma (None, 8, 8, 576) 2304 ['block_11_expand[0][0]'] \n", + " lization) \n", + " \n", + " block_11_expand_relu (ReLU) (None, 8, 8, 576) 0 ['block_11_expand_BN[0][0]'] \n", + " \n", + " block_11_depthwise (DepthwiseC (None, 8, 8, 576) 5184 ['block_11_expand_relu[0][0]'] \n", + " onv2D) \n", + " \n", + " block_11_depthwise_BN (BatchNo (None, 8, 8, 576) 2304 ['block_11_depthwise[0][0]'] \n", + " rmalization) \n", + " \n", + " block_11_depthwise_relu (ReLU) (None, 8, 8, 576) 0 ['block_11_depthwise_BN[0][0]'] \n", + " \n", + " block_11_project (Conv2D) (None, 8, 8, 96) 55296 ['block_11_depthwise_relu[0][0]']\n", + " \n", + " block_11_project_BN (BatchNorm (None, 8, 8, 96) 384 ['block_11_project[0][0]'] \n", + " alization) \n", + " \n", + " block_11_add (Add) (None, 8, 8, 96) 0 ['block_10_project_BN[0][0]', \n", + " 'block_11_project_BN[0][0]'] \n", + " \n", + " block_12_expand (Conv2D) (None, 8, 8, 576) 55296 ['block_11_add[0][0]'] \n", + " \n", + " block_12_expand_BN (BatchNorma (None, 8, 8, 576) 2304 ['block_12_expand[0][0]'] \n", + " lization) \n", + " \n", + " block_12_expand_relu (ReLU) (None, 8, 8, 576) 0 ['block_12_expand_BN[0][0]'] \n", + " \n", + " block_12_depthwise (DepthwiseC (None, 8, 8, 576) 5184 ['block_12_expand_relu[0][0]'] \n", + " onv2D) \n", + " \n", + " block_12_depthwise_BN (BatchNo (None, 8, 8, 576) 2304 ['block_12_depthwise[0][0]'] \n", + " rmalization) \n", + " \n", + " block_12_depthwise_relu (ReLU) (None, 8, 8, 576) 0 ['block_12_depthwise_BN[0][0]'] \n", + " \n", + " block_12_project (Conv2D) (None, 8, 8, 96) 55296 ['block_12_depthwise_relu[0][0]']\n", + " \n", + " block_12_project_BN (BatchNorm (None, 8, 8, 96) 384 ['block_12_project[0][0]'] \n", + " alization) \n", + " \n", + " block_12_add (Add) (None, 8, 8, 96) 0 ['block_11_add[0][0]', \n", + " 'block_12_project_BN[0][0]'] \n", + " \n", + " block_13_expand (Conv2D) (None, 8, 8, 576) 55296 ['block_12_add[0][0]'] \n", + " \n", + " block_13_expand_BN (BatchNorma (None, 8, 8, 576) 2304 ['block_13_expand[0][0]'] \n", + " lization) \n", + " \n", + " block_13_expand_relu (ReLU) (None, 8, 8, 576) 0 ['block_13_expand_BN[0][0]'] \n", + " \n", + " block_13_pad (ZeroPadding2D) (None, 9, 9, 576) 0 ['block_13_expand_relu[0][0]'] \n", + " \n", + " block_13_depthwise (DepthwiseC (None, 4, 4, 576) 5184 ['block_13_pad[0][0]'] \n", + " onv2D) \n", + " \n", + " block_13_depthwise_BN (BatchNo (None, 4, 4, 576) 2304 ['block_13_depthwise[0][0]'] \n", + " rmalization) \n", + " \n", + " block_13_depthwise_relu (ReLU) (None, 4, 4, 576) 0 ['block_13_depthwise_BN[0][0]'] \n", + " \n", + " block_13_project (Conv2D) (None, 4, 4, 160) 92160 ['block_13_depthwise_relu[0][0]']\n", + " \n", + " block_13_project_BN (BatchNorm (None, 4, 4, 160) 640 ['block_13_project[0][0]'] \n", + " alization) \n", + " \n", + " block_14_expand (Conv2D) (None, 4, 4, 960) 153600 ['block_13_project_BN[0][0]'] \n", + " \n", + " block_14_expand_BN (BatchNorma (None, 4, 4, 960) 3840 ['block_14_expand[0][0]'] \n", + " lization) \n", + " \n", + " block_14_expand_relu (ReLU) (None, 4, 4, 960) 0 ['block_14_expand_BN[0][0]'] \n", + " \n", + " block_14_depthwise (DepthwiseC (None, 4, 4, 960) 8640 ['block_14_expand_relu[0][0]'] \n", + " onv2D) \n", + " \n", + " block_14_depthwise_BN (BatchNo (None, 4, 4, 960) 3840 ['block_14_depthwise[0][0]'] \n", + " rmalization) \n", + " \n", + " block_14_depthwise_relu (ReLU) (None, 4, 4, 960) 0 ['block_14_depthwise_BN[0][0]'] \n", + " \n", + " block_14_project (Conv2D) (None, 4, 4, 160) 153600 ['block_14_depthwise_relu[0][0]']\n", + " \n", + " block_14_project_BN (BatchNorm (None, 4, 4, 160) 640 ['block_14_project[0][0]'] \n", + " alization) \n", + " \n", + " block_14_add (Add) (None, 4, 4, 160) 0 ['block_13_project_BN[0][0]', \n", + " 'block_14_project_BN[0][0]'] \n", + " \n", + " block_15_expand (Conv2D) (None, 4, 4, 960) 153600 ['block_14_add[0][0]'] \n", + " \n", + " block_15_expand_BN (BatchNorma (None, 4, 4, 960) 3840 ['block_15_expand[0][0]'] \n", + " lization) \n", + " \n", + " block_15_expand_relu (ReLU) (None, 4, 4, 960) 0 ['block_15_expand_BN[0][0]'] \n", + " \n", + " block_15_depthwise (DepthwiseC (None, 4, 4, 960) 8640 ['block_15_expand_relu[0][0]'] \n", + " onv2D) \n", + " \n", + " block_15_depthwise_BN (BatchNo (None, 4, 4, 960) 3840 ['block_15_depthwise[0][0]'] \n", + " rmalization) \n", + " \n", + " block_15_depthwise_relu (ReLU) (None, 4, 4, 960) 0 ['block_15_depthwise_BN[0][0]'] \n", + " \n", + " block_15_project (Conv2D) (None, 4, 4, 160) 153600 ['block_15_depthwise_relu[0][0]']\n", + " \n", + " block_15_project_BN (BatchNorm (None, 4, 4, 160) 640 ['block_15_project[0][0]'] \n", + " alization) \n", + " \n", + " block_15_add (Add) (None, 4, 4, 160) 0 ['block_14_add[0][0]', \n", + " 'block_15_project_BN[0][0]'] \n", + " \n", + " block_16_expand (Conv2D) (None, 4, 4, 960) 153600 ['block_15_add[0][0]'] \n", + " \n", + " block_16_expand_BN (BatchNorma (None, 4, 4, 960) 3840 ['block_16_expand[0][0]'] \n", + " lization) \n", + " \n", + " block_16_expand_relu (ReLU) (None, 4, 4, 960) 0 ['block_16_expand_BN[0][0]'] \n", + " \n", + " block_16_depthwise (DepthwiseC (None, 4, 4, 960) 8640 ['block_16_expand_relu[0][0]'] \n", + " onv2D) \n", + " \n", + " block_16_depthwise_BN (BatchNo (None, 4, 4, 960) 3840 ['block_16_depthwise[0][0]'] \n", + " rmalization) \n", + " \n", + " block_16_depthwise_relu (ReLU) (None, 4, 4, 960) 0 ['block_16_depthwise_BN[0][0]'] \n", + " \n", + " block_16_project (Conv2D) (None, 4, 4, 320) 307200 ['block_16_depthwise_relu[0][0]']\n", + " \n", + " block_16_project_BN (BatchNorm (None, 4, 4, 320) 1280 ['block_16_project[0][0]'] \n", + " alization) \n", + " \n", + " Conv_1 (Conv2D) (None, 4, 4, 1280) 409600 ['block_16_project_BN[0][0]'] \n", + " \n", + " Conv_1_bn (BatchNormalization) (None, 4, 4, 1280) 5120 ['Conv_1[0][0]'] \n", + " \n", + " out_relu (ReLU) (None, 4, 4, 1280) 0 ['Conv_1_bn[0][0]'] \n", + " \n", + "==================================================================================================\n", + "Total params: 2,257,984\n", + "Trainable params: 2,223,872\n", + "Non-trainable params: 34,112\n", + "__________________________________________________________________________________________________\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# As we're using Transfer Learning, you do not need to train all the layers. Freeze all of the layers or train some layers (experiment)\n", + "for layer in base_model.layers:\n", + " layer.trainable = False" + ], + "metadata": { + "id": "F_Heq3C1eKd-" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Append Fully connected/custom Conv2D/Dropout/MaxPooling layers to the base model\n", + "model=tf.keras.Sequential()\n", + "model.add(base_model)\n", + "model.add(tf.keras.layers.AveragePooling2D(pool_size=(7,7), padding=\"same\"))\n", + "model.add(tf.keras.layers.Flatten())\n", + "model.add(tf.keras.layers.Dense(128, activation=\"relu\"))\n", + "model.add(tf.keras.layers.Dropout(0.5))" + ], + "metadata": { + "id": "MKx1EtUJea6D" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Add the final output layer\n", + "model.add(tf.keras.layers.Dense(3,activation=\"softmax\"))" + ], + "metadata": { + "id": "q6I3oTTNgP8L" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Print your model's summary\n", + "model.summary()" + ], + "metadata": { + "id": "6aVQocJwgN5r", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "2d1a0c68-f3cd-49c4-b1b1-90cc4ec9708f" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " mobilenetv2_1.00_128 (Funct (None, 4, 4, 1280) 2257984 \n", + " ional) \n", + " \n", + " average_pooling2d (AverageP (None, 1, 1, 1280) 0 \n", + " ooling2D) \n", + " \n", + " flatten (Flatten) (None, 1280) 0 \n", + " \n", + " dense (Dense) (None, 128) 163968 \n", + " \n", + " dropout (Dropout) (None, 128) 0 \n", + " \n", + " dense_1 (Dense) (None, 3) 387 \n", + " \n", + "=================================================================\n", + "Total params: 2,422,339\n", + "Trainable params: 164,355\n", + "Non-trainable params: 2,257,984\n", + "_________________________________________________________________\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Compile you model (set the parameters like loss/optimizers/metrics)\n", + "model.compile(optimizer='adam',loss='categorical_crossentropy', metrics=['accuracy'])" + ], + "metadata": { + "id": "qdC71fUBgXAg" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Data Augmentation and Pre-processing\n", + "Augment the data. You may also try dyanamic augmentation using [`tf.keras.preprocessing.image.ImageDataGenerator `](https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image/ImageDataGenerator). \n", + "You may use [`tf.keras.applications.vgg16.preprocess_input`](https://www.tensorflow.org/api_docs/python/tf/keras/applications/vgg16/preprocess_input)(or some other base model's utility) for pre-processing (can also be passed as a parameter to `ImageDataGenerator`)" + ], + "metadata": { + "id": "RdUSMLggifex" + } + }, + { + "cell_type": "code", + "source": [ + "from keras.applications.mobilenet_v2 import preprocess_input # Change according to your base model\n", + "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n", + "from sklearn.preprocessing import LabelBinarizer\n", + "from sklearn.model_selection import train_test_split\n", + "from tensorflow.keras.utils import to_categorical\n", + "\n", + "aug = ImageDataGenerator(\n", + "\trotation_range=20,\n", + "\tzoom_range=0.15,\n", + "\twidth_shift_range=0.2,\n", + "\theight_shift_range=0.2,\n", + "\tshear_range=0.15,\n", + "\thorizontal_flip=True,\n", + "\tfill_mode=\"nearest\")\n", + "\n", + "# Your code " + ], + "metadata": { + "id": "DBscSsvkgn39" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "data=preprocess_input(data)" + ], + "metadata": { + "id": "h9o3Zsd7IKAp" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Training and Validation Dataset \n", + "Split the dataset into training and validation (We'll be looking for your validation accuracy, assume we are using complete dataset for now). \n", + "\n", + "Hint: `flow_from_directory` used with `ImageDataGenerator` will simplify things for you." + ], + "metadata": { + "id": "IcKPxCpOkcuG" + } + }, + { + "cell_type": "code", + "source": [ + "# Your code\n", + "from sklearn.preprocessing import LabelBinarizer\n", + "from sklearn.model_selection import train_test_split\n", + "from tensorflow.keras.utils import to_categorical\n", + "\n", + "lb = LabelBinarizer()\n", + "labels_ = lb.fit_transform(labels)\n", + "#labels_ = to_categorical(labels_, num_classes=3)" + ], + "metadata": { + "id": "sB7hb3ybkJRq" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "(trainX, testX, trainY, testY) = train_test_split(data, labels_,test_size=0.20, stratify=labels_, random_state=42)" + ], + "metadata": { + "id": "LrzAO4njPAgA" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "del(base_model)" + ], + "metadata": { + "id": "OyppjiakJ_zP" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Training \n", + "Train your model for some epochs and plot the graph. Try and save your best model. Experiment with the parameters of `model.fit`" + ], + "metadata": { + "id": "ZZPsjpT1mp3z" + } + }, + { + "cell_type": "code", + "source": [ + "from keras.callbacks import ModelCheckpoint\n", + "\n", + "history=model.fit(aug.flow(trainX, trainY, batch_size=32), steps_per_epoch= len(trainX) // 32, validation_data=(testX, testY), validation_steps=len(testX) // 32,\n", + "\tepochs=20)\n", + "# ModelCheckpoint is helpful to save the model giving best results (brownie points)" + ], + "metadata": { + "id": "Gs2X14MBmu7W", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "3c7b57bf-902c-49d4-e3fa-cb02ce3cb6b1" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/20\n", + "224/224 [==============================] - ETA: 0s - loss: 0.3011 - accuracy: 0.8875WARNING:tensorflow:Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches (in this case, 56 batches). You may need to use the repeat() function when building your dataset.\n", + "224/224 [==============================] - 44s 137ms/step - loss: 0.3011 - accuracy: 0.8875 - val_loss: 0.1047 - val_accuracy: 0.9616\n", + "Epoch 2/20\n", + "224/224 [==============================] - 26s 116ms/step - loss: 0.1798 - accuracy: 0.9374\n", + "Epoch 3/20\n", + "224/224 [==============================] - 26s 116ms/step - loss: 0.1483 - accuracy: 0.9449\n", + "Epoch 4/20\n", + "224/224 [==============================] - 26s 116ms/step - loss: 0.1350 - accuracy: 0.9509\n", + "Epoch 5/20\n", + "224/224 [==============================] - 26s 116ms/step - loss: 0.1162 - accuracy: 0.9583\n", + "Epoch 6/20\n", + "224/224 [==============================] - 27s 123ms/step - loss: 0.1109 - accuracy: 0.9582\n", + "Epoch 7/20\n", + "224/224 [==============================] - 26s 116ms/step - loss: 0.1032 - accuracy: 0.9644\n", + "Epoch 8/20\n", + "224/224 [==============================] - 26s 115ms/step - loss: 0.1048 - accuracy: 0.9620\n", + "Epoch 9/20\n", + "224/224 [==============================] - 26s 116ms/step - loss: 0.0962 - accuracy: 0.9645\n", + "Epoch 10/20\n", + "224/224 [==============================] - 26s 117ms/step - loss: 0.0997 - accuracy: 0.9638\n", + "Epoch 11/20\n", + "224/224 [==============================] - 27s 123ms/step - loss: 0.0974 - accuracy: 0.9649\n", + "Epoch 12/20\n", + "224/224 [==============================] - 26s 116ms/step - loss: 0.0890 - accuracy: 0.9673\n", + "Epoch 13/20\n", + "224/224 [==============================] - 26s 116ms/step - loss: 0.0888 - accuracy: 0.9681\n", + "Epoch 14/20\n", + "224/224 [==============================] - 26s 116ms/step - loss: 0.0805 - accuracy: 0.9720\n", + "Epoch 15/20\n", + "224/224 [==============================] - 26s 117ms/step - loss: 0.0936 - accuracy: 0.9656\n", + "Epoch 16/20\n", + "224/224 [==============================] - 28s 123ms/step - loss: 0.0835 - accuracy: 0.9695\n", + "Epoch 17/20\n", + "224/224 [==============================] - 26s 116ms/step - loss: 0.0796 - accuracy: 0.9713\n", + "Epoch 18/20\n", + "224/224 [==============================] - 26s 116ms/step - loss: 0.0697 - accuracy: 0.9729\n", + "Epoch 19/20\n", + "224/224 [==============================] - 27s 122ms/step - loss: 0.0811 - accuracy: 0.9685\n", + "Epoch 20/20\n", + "224/224 [==============================] - 26s 116ms/step - loss: 0.0785 - accuracy: 0.9719\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### Evaluate the performance" + ], + "metadata": { + "id": "FTvRa1FXri4R" + } + }, + { + "cell_type": "code", + "source": [ + "# Plot training & validation loss/accuracy values\n", + "test_loss, test_acc = model.evaluate(testX,testY)" + ], + "metadata": { + "id": "cTH6flzcrck0", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "b32a9915-8818-4558-b547-c973d69ddd89" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "57/57 [==============================] - 2s 28ms/step - loss: 0.0462 - accuracy: 0.9844\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.metrics import classification_report, confusion_matrix\n", + "import numpy as np\n", + "preds=model.predict(testX)\n", + "#classification_report(np.argmax(preds,axis=1),testY)" + ], + "metadata": { + "id": "fJ-ZtU84r66Z" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "#x=np.argmax(preds,axis=1)\n", + "#preds[:,x]=1\n", + "preds\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "oOK4pTW5OlIw", + "outputId": "faf99d12-80be-4c7e-fa00-f53a11b5ad36" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[1., 1., 1.],\n", + " [1., 1., 1.],\n", + " [1., 1., 1.],\n", + " ...,\n", + " [1., 1., 1.],\n", + " [1., 1., 1.],\n", + " [1., 1., 1.]], dtype=float32)" + ] + }, + "metadata": {}, + "execution_count": 47 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Use the classification report to print precision, recall, f1-score for the three classes(optional, brownie points)" + ], + "metadata": { + "id": "VytDxkswrvXw" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file