diff --git a/MNIST_CNN.ipynb b/MNIST_CNN.ipynb new file mode 100644 index 0000000..98818da --- /dev/null +++ b/MNIST_CNN.ipynb @@ -0,0 +1,239 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyPi1NMWMjcq5xT+iIDJb1ha", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "9p34bGWawZHo" + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "from tensorflow.keras import datasets, layers, models\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "source": [ + "from tensorflow import keras\n", + "\n", + "(X_train, y_train) , (X_test, y_test) = keras.datasets.mnist.load_data()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Cm6n7mxd24uI", + "outputId": "d8ea3c36-2392-4d13-8c75-aec126a8d7c9" + }, + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n", + "\u001b[1m11490434/11490434\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0us/step\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "X_train = X_train / 255\n", + "X_test = X_test / 255" + ], + "metadata": { + "id": "Y32GFU2724wQ" + }, + "execution_count": 10, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "X_train_flattened = X_train.reshape(len(X_train), 28*28)\n", + "X_test_flattened = X_test.reshape(len(X_test), 28*28)" + ], + "metadata": { + "id": "JhDxM0Ci24z2" + }, + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model = keras.Sequential([\n", + " layers.Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)),\n", + " layers.MaxPooling2D((2, 2)),\n", + "\n", + " layers.Conv2D(filters=64, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)),\n", + " layers.MaxPooling2D((2, 2)),\n", + "\n", + " keras.layers.Flatten(),\n", + " keras.layers.Dense(100, activation='relu'),\n", + " keras.layers.Dense(10, activation='softmax')\n", + "])\n", + "\n", + "model.compile(optimizer='adam',\n", + " loss='sparse_categorical_crossentropy',\n", + " metrics=['accuracy'])\n", + "\n", + "model.fit(X_train, y_train, epochs=5)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "xiL69z4y8uUN", + "outputId": "cf022306-a8f9-4740-f650-fd8b5ec24dc5" + }, + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.11/dist-packages/keras/src/layers/convolutional/base_conv.py:107: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/5\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m55s\u001b[0m 28ms/step - accuracy: 0.9072 - loss: 0.3004\n", + "Epoch 2/5\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m53s\u001b[0m 28ms/step - accuracy: 0.9866 - loss: 0.0442\n", + "Epoch 3/5\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m81s\u001b[0m 28ms/step - accuracy: 0.9905 - loss: 0.0289\n", + "Epoch 4/5\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m82s\u001b[0m 28ms/step - accuracy: 0.9941 - loss: 0.0197\n", + "Epoch 5/5\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m52s\u001b[0m 28ms/step - accuracy: 0.9955 - loss: 0.0144\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 15 + } + ] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.metrics import confusion_matrix , classification_report\n", + "import numpy as np\n", + "y_pred = model.predict(X_test)\n", + "y_pred_classes = [np.argmax(element) for element in y_pred]\n", + "\n", + "print(\"Classification Report: \\n\", classification_report(y_test, y_pred_classes))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "7UA-puJ28uQl", + "outputId": "d01495a8-6f7d-4932-84b8-d6f6c4ff9a49" + }, + "execution_count": 16, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 9ms/step\n", + "Classification Report: \n", + " precision recall f1-score support\n", + "\n", + " 0 0.99 1.00 0.99 980\n", + " 1 1.00 1.00 1.00 1135\n", + " 2 0.99 0.99 0.99 1032\n", + " 3 0.99 1.00 0.99 1010\n", + " 4 0.99 0.99 0.99 982\n", + " 5 0.99 0.99 0.99 892\n", + " 6 1.00 0.98 0.99 958\n", + " 7 0.98 0.99 0.99 1028\n", + " 8 0.99 0.99 0.99 974\n", + " 9 0.99 0.99 0.99 1009\n", + "\n", + " accuracy 0.99 10000\n", + " macro avg 0.99 0.99 0.99 10000\n", + "weighted avg 0.99 0.99 0.99 10000\n", + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "model.evaluate(X_test,y_test)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "M5CcUU1L8uOX", + "outputId": "e9f1e805-5974-4da1-e8e4-8ec18aa01f02" + }, + "execution_count": 17, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 11ms/step - accuracy: 0.9885 - loss: 0.0343\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[0.026914624497294426, 0.9914000034332275]" + ] + }, + "metadata": {}, + "execution_count": 17 + } + ] + } + ] +} \ No newline at end of file