{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "7d2a26b3", "metadata": { "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19", "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5", "execution": { "iopub.execute_input": "2024-04-16T22:00:10.335503Z", "iopub.status.busy": "2024-04-16T22:00:10.335218Z", "iopub.status.idle": "2024-04-16T22:00:32.659332Z", "shell.execute_reply": "2024-04-16T22:00:32.658519Z" }, "papermill": { "duration": 22.335217, "end_time": "2024-04-16T22:00:32.661735", "exception": false, "start_time": "2024-04-16T22:00:10.326518", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-04-16 22:00:15.815167: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", "2024-04-16 22:00:15.815298: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", "2024-04-16 22:00:16.085359: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n" ] } ], "source": [ "import os \n", "import pandas as pd \n", "import numpy as np \n", "import cv2\n", "from collections import Counter\n", "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.utils import shuffle\n", "from tensorflow.keras.utils import to_categorical\n", "import tqdm\n", "import tensorflow as tf\n", "from sklearn.preprocessing import LabelEncoder" ] }, { "cell_type": "code", "execution_count": 2, "id": "33f06205", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:00:32.677855Z", "iopub.status.busy": "2024-04-16T22:00:32.677087Z", "iopub.status.idle": "2024-04-16T22:00:32.681329Z", "shell.execute_reply": "2024-04-16T22:00:32.680543Z" }, "papermill": { "duration": 0.013857, "end_time": "2024-04-16T22:00:32.683190", "exception": false, "start_time": "2024-04-16T22:00:32.669333", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "import warnings\n", "warnings.filterwarnings(\"ignore\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "c42455dd", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:00:32.698237Z", "iopub.status.busy": "2024-04-16T22:00:32.697962Z", "iopub.status.idle": "2024-04-16T22:00:32.702243Z", "shell.execute_reply": "2024-04-16T22:00:32.701564Z" }, "papermill": { "duration": 0.013891, "end_time": "2024-04-16T22:00:32.704185", "exception": false, "start_time": "2024-04-16T22:00:32.690294", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "import os\n", "os.chdir(\"/kaggle/input/the-oxfordiiit-pet-dataset\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "3692816e", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:00:32.727399Z", "iopub.status.busy": "2024-04-16T22:00:32.726860Z", "iopub.status.idle": "2024-04-16T22:00:59.954162Z", "shell.execute_reply": "2024-04-16T22:00:59.953373Z" }, "papermill": { "duration": 27.2386, "end_time": "2024-04-16T22:00:59.956503", "exception": false, "start_time": "2024-04-16T22:00:32.717903", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "images = np.load('/kaggle/input/dataset-oxford-preprocessing/images_oxford.npy')\n", "labels = np.load('/kaggle/input/dataset-oxford-preprocessing/labels_oxford.npy',allow_pickle = True)" ] }, { "cell_type": "code", "execution_count": 5, "id": "0a6213c0", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:00:59.972494Z", "iopub.status.busy": "2024-04-16T22:00:59.972201Z", "iopub.status.idle": "2024-04-16T22:00:59.988482Z", "shell.execute_reply": "2024-04-16T22:00:59.987703Z" }, "papermill": { "duration": 0.026509, "end_time": "2024-04-16T22:00:59.990400", "exception": false, "start_time": "2024-04-16T22:00:59.963891", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'Abyssinian',\n", " 'Bengal',\n", " 'Birman',\n", " 'Bombay',\n", " 'British_Shorthair',\n", " 'Egyptian_Mau',\n", " 'Maine_Coon',\n", " 'Persian',\n", " 'Ragdoll',\n", " 'Russian_Blue',\n", " 'Siamese',\n", " 'Sphynx',\n", " 'american_bulldog',\n", " 'american_pit_bull_terrier',\n", " 'basset_hound',\n", " 'beagle',\n", " 'boxer',\n", " 'chihuahua',\n", " 'english_cocker_spaniel',\n", " 'english_setter',\n", " 'german_shorthaired',\n", " 'great_pyrenees',\n", " 'havanese',\n", " 'japanese_chin',\n", " 'keeshond',\n", " 'leonberger',\n", " 'miniature_pinscher',\n", " 'newfoundland',\n", " 'pomeranian',\n", " 'pug',\n", " 'saint_bernard',\n", " 'samoyed',\n", " 'scottish_terrier',\n", " 'shiba_inu',\n", " 'staffordshire_bull_terrier',\n", " 'wheaten_terrier',\n", " 'yorkshire_terrier'}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "set(labels)" ] }, { "cell_type": "code", "execution_count": 6, "id": "ce977375", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:01:00.006868Z", "iopub.status.busy": "2024-04-16T22:01:00.006581Z", "iopub.status.idle": "2024-04-16T22:01:00.011926Z", "shell.execute_reply": "2024-04-16T22:01:00.011068Z" }, "papermill": { "duration": 0.015616, "end_time": "2024-04-16T22:01:00.013985", "exception": false, "start_time": "2024-04-16T22:00:59.998369", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "14779" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(labels)" ] }, { "cell_type": "code", "execution_count": 7, "id": "6b8527ba", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:01:00.029646Z", "iopub.status.busy": "2024-04-16T22:01:00.029397Z", "iopub.status.idle": "2024-04-16T22:01:00.046546Z", "shell.execute_reply": "2024-04-16T22:01:00.045731Z" }, "papermill": { "duration": 0.027091, "end_time": "2024-04-16T22:01:00.048350", "exception": false, "start_time": "2024-04-16T22:01:00.021259", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "Counter({'american_pit_bull_terrier': 400,\n", " 'leonberger': 400,\n", " 'english_cocker_spaniel': 400,\n", " 'Siamese': 400,\n", " 'saint_bernard': 400,\n", " 'american_bulldog': 400,\n", " 'Sphynx': 400,\n", " 'Egyptian_Mau': 400,\n", " 'Birman': 400,\n", " 'english_setter': 400,\n", " 'newfoundland': 400,\n", " 'pug': 400,\n", " 'yorkshire_terrier': 400,\n", " 'Abyssinian': 400,\n", " 'havanese': 400,\n", " 'miniature_pinscher': 400,\n", " 'chihuahua': 400,\n", " 'basset_hound': 400,\n", " 'Bombay': 400,\n", " 'British_Shorthair': 400,\n", " 'Maine_Coon': 400,\n", " 'Bengal': 400,\n", " 'japanese_chin': 400,\n", " 'shiba_inu': 400,\n", " 'wheaten_terrier': 400,\n", " 'beagle': 400,\n", " 'Persian': 400,\n", " 'great_pyrenees': 400,\n", " 'pomeranian': 400,\n", " 'samoyed': 400,\n", " 'german_shorthaired': 400,\n", " 'Ragdoll': 400,\n", " 'keeshond': 400,\n", " 'Russian_Blue': 400,\n", " 'boxer': 399,\n", " 'scottish_terrier': 398,\n", " 'staffordshire_bull_terrier': 382})" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "breeds = Counter(labels)\n", "breeds" ] }, { "cell_type": "code", "execution_count": 8, "id": "31488066", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:01:00.065868Z", "iopub.status.busy": "2024-04-16T22:01:00.065613Z", "iopub.status.idle": "2024-04-16T22:01:00.070631Z", "shell.execute_reply": "2024-04-16T22:01:00.069830Z" }, "papermill": { "duration": 0.01644, "end_time": "2024-04-16T22:01:00.072437", "exception": false, "start_time": "2024-04-16T22:01:00.055997", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "37" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "num_classes = len(breeds)\n", "num_classes" ] }, { "cell_type": "code", "execution_count": 9, "id": "06779267", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:01:00.088854Z", "iopub.status.busy": "2024-04-16T22:01:00.088606Z", "iopub.status.idle": "2024-04-16T22:01:00.093857Z", "shell.execute_reply": "2024-04-16T22:01:00.093067Z" }, "papermill": { "duration": 0.01556, "end_time": "2024-04-16T22:01:00.095826", "exception": false, "start_time": "2024-04-16T22:01:00.080266", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "((14779, 224, 224, 3), (14779,))" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "images.shape, labels.shape" ] }, { "cell_type": "code", "execution_count": 10, "id": "f1202dea", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:01:00.113232Z", "iopub.status.busy": "2024-04-16T22:01:00.112519Z", "iopub.status.idle": "2024-04-16T22:01:00.125656Z", "shell.execute_reply": "2024-04-16T22:01:00.124704Z" }, "papermill": { "duration": 0.023796, "end_time": "2024-04-16T22:01:00.127634", "exception": false, "start_time": "2024-04-16T22:01:00.103838", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "label_encoder = LabelEncoder()\n", "labels_encoded = label_encoder.fit_transform(labels)\n", "\n", "labels_encoded = to_categorical(labels_encoded)" ] }, { "cell_type": "code", "execution_count": 11, "id": "8a9acd0e", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:01:00.144808Z", "iopub.status.busy": "2024-04-16T22:01:00.144529Z", "iopub.status.idle": "2024-04-16T22:01:00.148345Z", "shell.execute_reply": "2024-04-16T22:01:00.147466Z" }, "papermill": { "duration": 0.014681, "end_time": "2024-04-16T22:01:00.150327", "exception": false, "start_time": "2024-04-16T22:01:00.135646", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# images = images / 255.0" ] }, { "cell_type": "code", "execution_count": 12, "id": "3a370106", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:01:00.167923Z", "iopub.status.busy": "2024-04-16T22:01:00.167694Z", "iopub.status.idle": "2024-04-16T22:01:00.172811Z", "shell.execute_reply": "2024-04-16T22:01:00.171989Z" }, "papermill": { "duration": 0.016613, "end_time": "2024-04-16T22:01:00.174733", "exception": false, "start_time": "2024-04-16T22:01:00.158120", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "((14779, 224, 224, 3), (14779, 37))" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "images.shape, labels_encoded.shape" ] }, { "cell_type": "code", "execution_count": 13, "id": "1d985d2a", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:01:00.190948Z", "iopub.status.busy": "2024-04-16T22:01:00.190702Z", "iopub.status.idle": "2024-04-16T22:01:01.865074Z", "shell.execute_reply": "2024-04-16T22:01:01.864185Z" }, "papermill": { "duration": 1.685102, "end_time": "2024-04-16T22:01:01.867522", "exception": false, "start_time": "2024-04-16T22:01:00.182420", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "X_train, X_test, y_train, y_test = train_test_split(images, labels_encoded, test_size=0.30,stratify=labels_encoded, random_state=42)\n", "X_val, X_test, y_val, y_test = train_test_split(X_test, y_test, test_size=0.50,stratify=y_test, random_state=42)" ] }, { "cell_type": "code", "execution_count": 14, "id": "b34ae72b", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:01:01.886761Z", "iopub.status.busy": "2024-04-16T22:01:01.886149Z", "iopub.status.idle": "2024-04-16T22:01:01.891160Z", "shell.execute_reply": "2024-04-16T22:01:01.890130Z" }, "papermill": { "duration": 0.017072, "end_time": "2024-04-16T22:01:01.893387", "exception": false, "start_time": "2024-04-16T22:01:01.876315", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "image_height = images.shape[1]\n", "image_width = images.shape[2]\n", "num_channels = images.shape[3]" ] }, { "cell_type": "code", "execution_count": 15, "id": "1067af3e", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:01:01.912419Z", "iopub.status.busy": "2024-04-16T22:01:01.912098Z", "iopub.status.idle": "2024-04-16T22:01:03.174708Z", "shell.execute_reply": "2024-04-16T22:01:03.173770Z" }, "papermill": { "duration": 1.274472, "end_time": "2024-04-16T22:01:03.176773", "exception": false, "start_time": "2024-04-16T22:01:01.902301", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
Model: \"sequential\"\n",
"
\n"
],
"text/plain": [
"\u001b[1mModel: \"sequential\"\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", "┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", "│ conv2d (Conv2D) │ (None, 222, 222, 32) │ 896 │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ max_pooling2d (MaxPooling2D) │ (None, 111, 111, 32) │ 0 │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ conv2d_1 (Conv2D) │ (None, 109, 109, 64) │ 18,496 │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ max_pooling2d_1 (MaxPooling2D) │ (None, 54, 54, 64) │ 0 │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ conv2d_2 (Conv2D) │ (None, 52, 52, 128) │ 73,856 │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ max_pooling2d_2 (MaxPooling2D) │ (None, 26, 26, 128) │ 0 │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ flatten (Flatten) │ (None, 86528) │ 0 │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dense (Dense) │ (None, 256) │ 22,151,424 │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dropout (Dropout) │ (None, 256) │ 0 │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dense_1 (Dense) │ (None, 37) │ 9,509 │\n", "└─────────────────────────────────┴────────────────────────┴───────────────┘\n", "\n" ], "text/plain": [ "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", "│ conv2d (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m222\u001b[0m, \u001b[38;5;34m222\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m896\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ max_pooling2d (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m111\u001b[0m, \u001b[38;5;34m111\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ conv2d_1 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m109\u001b[0m, \u001b[38;5;34m109\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ max_pooling2d_1 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m54\u001b[0m, \u001b[38;5;34m54\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ conv2d_2 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m52\u001b[0m, \u001b[38;5;34m52\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m73,856\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ max_pooling2d_2 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ flatten (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m86528\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m22,151,424\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dropout (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dense_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m37\u001b[0m) │ \u001b[38;5;34m9,509\u001b[0m │\n", "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Total params: 22,254,181 (84.89 MB)\n", "\n" ], "text/plain": [ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m22,254,181\u001b[0m (84.89 MB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Trainable params: 22,254,181 (84.89 MB)\n", "\n" ], "text/plain": [ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m22,254,181\u001b[0m (84.89 MB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Non-trainable params: 0 (0.00 B)\n", "\n" ], "text/plain": [ "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from keras.models import Sequential\n", "from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout\n", "from keras import regularizers\n", "model = Sequential()\n", "model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(image_height, image_width, num_channels)))\n", "model.add(MaxPooling2D((2, 2)))\n", "model.add(Conv2D(64, (3, 3), activation='relu'))\n", "model.add(MaxPooling2D((2, 2)))\n", "model.add(Conv2D(128, (3, 3), activation='relu'))\n", "model.add(MaxPooling2D((2, 2)))\n", "model.add(Flatten())\n", "model.add(Dense(256, activation='relu',kernel_regularizer=regularizers.l2(0.01)))\n", "model.add(Dropout(0.5))\n", "model.add(Dense(num_classes, activation='softmax'))\n", "\n", "model.summary()" ] }, { "cell_type": "code", "execution_count": 16, "id": "b4826c89", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:01:03.196985Z", "iopub.status.busy": "2024-04-16T22:01:03.196671Z", "iopub.status.idle": "2024-04-16T22:09:42.080105Z", "shell.execute_reply": "2024-04-16T22:09:42.079212Z" }, "papermill": { "duration": 518.89615, "end_time": "2024-04-16T22:09:42.082461", "exception": false, "start_time": "2024-04-16T22:01:03.186311", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/50\n", "\u001b[1m 1/162\u001b[0m \u001b[37m━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m50:29\u001b[0m 19s/step - accuracy: 0.0000e+00 - loss: 46.3226" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", "I0000 00:00:1713304885.444527 73 device_compiler.h:186] Compiled cluster using XLA! This line is logged at most once for the lifetime of the process.\n", "W0000 00:00:1713304885.463501 73 graph_launch.cc:671] Fallback to op-by-op mode because memset node breaks graph update\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 147ms/step - accuracy: 0.0235 - loss: 31.6297" ] }, { "name": "stderr", "output_type": "stream", "text": [ "W0000 00:00:1713304910.793107 74 graph_launch.cc:671] Fallback to op-by-op mode because memset node breaks graph update\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m47s\u001b[0m 172ms/step - accuracy: 0.0235 - loss: 31.5211 - val_accuracy: 0.0383 - val_loss: 7.2346\n", "Epoch 2/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 92ms/step - accuracy: 0.0401 - loss: 6.7231 - val_accuracy: 0.0609 - val_loss: 5.6700\n", "Epoch 3/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 93ms/step - accuracy: 0.0831 - loss: 5.4390 - val_accuracy: 0.1398 - val_loss: 4.8644\n", "Epoch 4/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 94ms/step - accuracy: 0.1880 - loss: 4.6205 - val_accuracy: 0.2422 - val_loss: 4.3936\n", "Epoch 5/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 94ms/step - accuracy: 0.2967 - loss: 4.0802 - val_accuracy: 0.3054 - val_loss: 4.2094\n", "Epoch 6/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 95ms/step - accuracy: 0.3923 - loss: 3.7587 - val_accuracy: 0.3978 - val_loss: 3.9772\n", "Epoch 7/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 94ms/step - accuracy: 0.4769 - loss: 3.4809 - val_accuracy: 0.4641 - val_loss: 3.9603\n", "Epoch 8/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 93ms/step - accuracy: 0.5503 - loss: 3.3079 - val_accuracy: 0.5273 - val_loss: 3.7981\n", "Epoch 9/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 94ms/step - accuracy: 0.5975 - loss: 3.2404 - val_accuracy: 0.5584 - val_loss: 3.8154\n", "Epoch 10/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 93ms/step - accuracy: 0.6346 - loss: 3.1921 - val_accuracy: 0.6130 - val_loss: 3.8795\n", "Epoch 11/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 93ms/step - accuracy: 0.6562 - loss: 3.2347 - val_accuracy: 0.6315 - val_loss: 3.8876\n", "Epoch 12/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 94ms/step - accuracy: 0.6855 - loss: 3.1278 - val_accuracy: 0.6441 - val_loss: 3.8718\n", "Epoch 13/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 94ms/step - accuracy: 0.7158 - loss: 3.1111 - val_accuracy: 0.6522 - val_loss: 3.8522\n", "Epoch 14/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 93ms/step - accuracy: 0.7215 - loss: 3.0864 - val_accuracy: 0.6653 - val_loss: 3.7930\n", "Epoch 15/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 93ms/step - accuracy: 0.7344 - loss: 3.0475 - val_accuracy: 0.6788 - val_loss: 3.8108\n", "Epoch 16/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 93ms/step - accuracy: 0.7459 - loss: 3.0414 - val_accuracy: 0.6883 - val_loss: 3.8128\n", "Epoch 17/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 86ms/step - accuracy: 0.7501 - loss: 3.0504 - val_accuracy: 0.6806 - val_loss: 3.8387\n", "Epoch 18/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 86ms/step - accuracy: 0.7587 - loss: 3.0388 - val_accuracy: 0.6820 - val_loss: 3.8895\n", "Epoch 19/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 94ms/step - accuracy: 0.7619 - loss: 3.0352 - val_accuracy: 0.6951 - val_loss: 3.8897\n", "Epoch 20/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 86ms/step - accuracy: 0.7741 - loss: 3.0078 - val_accuracy: 0.6946 - val_loss: 3.8974\n", "Epoch 21/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 86ms/step - accuracy: 0.7791 - loss: 3.0252 - val_accuracy: 0.6901 - val_loss: 3.9344\n", "Epoch 22/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 94ms/step - accuracy: 0.7853 - loss: 3.0383 - val_accuracy: 0.7014 - val_loss: 3.9186\n", "Epoch 23/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 86ms/step - accuracy: 0.7932 - loss: 3.0170 - val_accuracy: 0.6951 - val_loss: 3.8738\n", "Epoch 24/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 86ms/step - accuracy: 0.7815 - loss: 3.0445 - val_accuracy: 0.6937 - val_loss: 3.9341\n", "Epoch 25/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 93ms/step - accuracy: 0.7950 - loss: 2.9906 - val_accuracy: 0.7028 - val_loss: 3.9243\n", "Epoch 26/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 94ms/step - accuracy: 0.7949 - loss: 2.9980 - val_accuracy: 0.7037 - val_loss: 3.9562\n", "Epoch 27/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 94ms/step - accuracy: 0.7934 - loss: 3.0201 - val_accuracy: 0.7104 - val_loss: 3.8794\n", "Epoch 28/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 86ms/step - accuracy: 0.7982 - loss: 3.0264 - val_accuracy: 0.6982 - val_loss: 4.0489\n", "Epoch 29/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 86ms/step - accuracy: 0.8043 - loss: 3.0672 - val_accuracy: 0.7009 - val_loss: 4.0159\n", "Epoch 30/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 86ms/step - accuracy: 0.8146 - loss: 2.9765 - val_accuracy: 0.6946 - val_loss: 4.0095\n", "Epoch 31/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 86ms/step - accuracy: 0.8057 - loss: 3.0157 - val_accuracy: 0.6960 - val_loss: 4.0809\n", "Epoch 32/50\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 86ms/step - accuracy: 0.8104 - loss: 3.0607 - val_accuracy: 0.7055 - val_loss: 4.0430\n" ] } ], "source": [ "from keras.callbacks import EarlyStopping, ModelCheckpoint\n", "\n", "early_stopping = EarlyStopping(monitor='val_accuracy', patience=5, restore_best_weights=True)\n", "model_checkpoint = ModelCheckpoint('/kaggle/working/best_model.keras', monitor='val_accuracy', save_best_only=True)\n", "\n", "# Compile the model\n", "model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n", "\n", "# Training with callbacks and validation set\n", "history = model.fit(X_train, y_train, epochs=50, batch_size=64, verbose=1,\n", " validation_data=(X_val, y_val), callbacks=[early_stopping, model_checkpoint])" ] }, { "cell_type": "code", "execution_count": 17, "id": "dcb5ab7f", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:09:42.976374Z", "iopub.status.busy": "2024-04-16T22:09:42.975493Z", "iopub.status.idle": "2024-04-16T22:09:49.453559Z", "shell.execute_reply": "2024-04-16T22:09:49.452631Z" }, "papermill": { "duration": 6.925514, "end_time": "2024-04-16T22:09:49.455461", "exception": false, "start_time": "2024-04-16T22:09:42.529947", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m70/70\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 34ms/step - accuracy: 0.6766 - loss: 4.0216\n" ] }, { "data": { "text/plain": [ "[3.8591182231903076, 0.6991429924964905]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.evaluate(X_test, y_test, verbose=1)" ] }, { "cell_type": "code", "execution_count": 18, "id": "30365f13", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:09:50.383559Z", "iopub.status.busy": "2024-04-16T22:09:50.383206Z", "iopub.status.idle": "2024-04-16T22:09:52.730734Z", "shell.execute_reply": "2024-04-16T22:09:52.729573Z" }, "papermill": { "duration": 2.824049, "end_time": "2024-04-16T22:09:52.732991", "exception": false, "start_time": "2024-04-16T22:09:49.908942", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m70/70\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step\n", " precision recall f1-score support\n", "\n", " 0 0.62 0.73 0.67 60\n", " 1 0.64 0.78 0.70 60\n", " 2 0.63 0.73 0.68 60\n", " 3 0.88 0.75 0.81 60\n", " 4 0.71 0.82 0.76 60\n", " 5 0.76 0.62 0.68 60\n", " 6 0.74 0.72 0.73 60\n", " 7 0.79 0.68 0.73 60\n", " 8 0.80 0.60 0.69 60\n", " 9 0.81 0.73 0.77 60\n", " 10 0.70 0.83 0.76 60\n", " 11 0.79 0.70 0.74 60\n", " 12 0.76 0.73 0.75 60\n", " 13 0.62 0.78 0.69 60\n", " 14 0.78 0.65 0.71 60\n", " 15 0.75 0.77 0.76 60\n", " 16 0.68 0.67 0.67 60\n", " 17 0.70 0.75 0.73 60\n", " 18 0.60 0.68 0.64 60\n", " 19 0.70 0.65 0.67 60\n", " 20 0.67 0.70 0.68 60\n", " 21 0.69 0.73 0.71 60\n", " 22 0.67 0.68 0.68 60\n", " 23 0.78 0.77 0.77 60\n", " 24 0.70 0.65 0.67 60\n", " 25 0.59 0.75 0.66 60\n", " 26 0.76 0.58 0.66 60\n", " 27 0.78 0.72 0.75 60\n", " 28 0.53 0.67 0.59 60\n", " 29 0.89 0.67 0.76 60\n", " 30 0.64 0.63 0.64 60\n", " 31 0.64 0.73 0.68 60\n", " 32 0.63 0.63 0.63 59\n", " 33 0.75 0.67 0.71 60\n", " 34 0.77 0.62 0.69 58\n", " 35 0.66 0.67 0.66 60\n", " 36 0.63 0.62 0.62 60\n", "\n", " accuracy 0.70 2217\n", " macro avg 0.71 0.70 0.70 2217\n", "weighted avg 0.71 0.70 0.70 2217\n", "\n" ] } ], "source": [ "from sklearn.metrics import classification_report\n", "\n", "y_pred = model.predict(X_test)\n", "y_pred_labels = np.argmax(y_pred, axis=1)\n", "y_test_labels = np.argmax(y_test, axis=1)\n", "\n", "classification_rep = classification_report(y_test_labels, y_pred_labels)\n", "\n", "print(classification_rep)" ] }, { "cell_type": "code", "execution_count": 19, "id": "e51a57a5", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:09:53.655270Z", "iopub.status.busy": "2024-04-16T22:09:53.654541Z", "iopub.status.idle": "2024-04-16T22:09:53.661164Z", "shell.execute_reply": "2024-04-16T22:09:53.660206Z" }, "papermill": { "duration": 0.458336, "end_time": "2024-04-16T22:09:53.663330", "exception": false, "start_time": "2024-04-16T22:09:53.204994", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The class predicted wrong the most is: 26\n" ] } ], "source": [ "# Find the class that was predicted wrong the most\n", "wrong_predictions = np.where(y_pred_labels != y_test_labels)[0]\n", "wrong_classes = y_test_labels[wrong_predictions]\n", "most_wrong_class = Counter(wrong_classes).most_common(1)[0][0]\n", "\n", "print(f\"The class predicted wrong the most is: {most_wrong_class}\")" ] }, { "cell_type": "code", "execution_count": 20, "id": "57b9d8ab", "metadata": { "execution": { "iopub.execute_input": "2024-04-16T22:09:54.561863Z", "iopub.status.busy": "2024-04-16T22:09:54.561131Z", "iopub.status.idle": "2024-04-16T22:09:54.929057Z", "shell.execute_reply": "2024-04-16T22:09:54.928046Z" }, "papermill": { "duration": 0.810454, "end_time": "2024-04-16T22:09:54.931068", "exception": false, "start_time": "2024-04-16T22:09:54.120614", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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fVR4enoKa2trERgYKMaNG2dR/6Co69wAEEuWLDG0KSsrEy+99JJwdXUVdnZ2YtiwYSI7O1u6olvYrc5Renq6eOCBB4Sbm5tQqVSiffv24o033hBqtVrawlvI888/LwIDA4VSqRSenp6if//+hmAjhGl/fmRCCNFy/UREREREzYtjboiIiMisMNwQERGRWWG4ISIiIrPCcENERERmheGGiIiIzArDDREREZkVhhsiIiIyKww3RGTxZDIZ1q1bJ3UZRNREGG6ISFLPPfccZDJZrW3AgAFSl0ZEJspK6gKIiAYMGIAlS5YY7VOpVBJVQ0Smjj03RCQ5lUoFHx8fo83V1RVA9SWjhQsXYuDAgbC1tUVISAhWr15tdPzRo0fx8MMPw9bWFu7u7hg/fjyKi4uN2ixevBhdu3aFSqWCr68vJk2aZPR8QUEBhg0bBjs7O3To0AE///xz875pImo2DDdE1Oq9++67GD58OA4fPoxnnnkGo0aNwsmTJwEAJSUliI2NhaurK/bt24dVq1Zhy5YtRuFl4cKFmDhxIsaPH4+jR4/i559/Rvv27Y3+xqxZs/D000/jyJEjGDRoEJ555hkUFha26PskoiYi9cqdRGTZ4uPjhUKhEPb29kbbBx98IISoXtl5woQJRsdERUWJF198UQghxJdffilcXV1FcXGx4fnffvtNyOVywyrhfn5+4u233663BgDinXfeMTwuLi4WAMSGDRua7H0SUcvhmBsikly/fv2wcOFCo31ubm6G36Ojo42ei46OxqFDhwAAJ0+eRGhoKOzt7Q3P33fffdDr9UhLS4NMJkNWVhb69+/fYA09evQw/G5vbw8nJyfk5eXd6VsiIgkx3BCR5Ozt7WtdJmoqtra2t9XO2tra6LFMJoNer2+OkoiomXHMDRG1ert37671uHPnzgCAzp074/DhwygpKTE8/9dff0Eul6Njx45wdHREUFAQkpOTW7RmIpIOe26ISHIVFRXIyckx2mdlZQUPDw8AwKpVqxAREYH7778fy5Ytw969e/H1118DAJ555hnMmDED8fHxmDlzJvLz8zF58mQ8++yz8Pb2BgDMnDkTEyZMgJeXFwYOHIiioiL89ddfmDx5csu+USJqEQw3RCS5jRs3wtfX12hfx44dcerUKQDVM5lWrFiBl156Cb6+vli+fDm6dOkCALCzs8OmTZswZcoU9OrVC3Z2dhg+fDjmzJljeK34+HiUl5fjs88+w+uvvw4PDw+MGDGi5d4gEbUomRBCSF0EEVF9ZDIZ1q5di6FDh0pdChGZCI65ISIiIrPCcENERERmhWNuiKhV45VzImos9twQERGRWWG4ISIiIrPCcENERERmheGGiIiIzArDDREREZkVhhsiIiIyKww3REREZFYYboiIiMisMNwQERGRWfn/WlSNn7M7lYYAAAAASUVORK5CYII=", "text/plain": [ "