diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..f5e96dbfa --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +venv \ No newline at end of file diff --git a/README.md b/README.md index 3a77d8b3c..a8c0331a0 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,21 @@ -# FER May Hakathon +# Team FAI.CE: FER May Hakathon Facial Emotion Detection Hackathon Project, Create a model and test it uing 5 to 10 sec videos to detect emotions +Team Members: +Mohamed Ratiq +Bhavika Kaliya +Alora Tabuco + +## Run Locally +streamlit run app.py --server.enableXsrfProtection false +(This is only to allow file uploads when running locally) + +## View Deployment Link +https://fer-may-hackathon-faice.streamlit.app/ + +Please note that due to limitations with streamlit cloud - the performance is relatively slow on deployment. + # Facial Emotion Recognition
diff --git a/app.py b/app.py new file mode 100644 index 000000000..eaa9c431e --- /dev/null +++ b/app.py @@ -0,0 +1,90 @@ +import streamlit as st +import cv2 +import tempfile +import os +import numpy as np +import tensorflow as tf +from tensorflow.keras.models import load_model + +# This can be changed between cnnModel.h5, emotion_recognition_model.h5, and mobilenet.h5 +model_path = 'mobilenet.h5' +emotion_model = load_model(model_path) + +# Emotion labels +emotion_labels = ['Angry', 'Disgust', 'Fear', 'Happy', 'Sad', 'Surprise', 'Neutral'] + +def main(): + # Title of the app + st.title("Video Input App with Face Detection") + + with st.expander("Demo Video"): + st.video('assets/demo.webm') + + # File uploader for video input + video_file = st.file_uploader("Upload a video file", type=["mp4", "mov", "avi"]) + + if video_file is not None: + # Create a temporary file to save the uploaded video + tfile = tempfile.NamedTemporaryFile(delete=False) + tfile.write(video_file.read()) + + # Play the video and perform face detection + st.write("Processing video for face detection...") + process_video(tfile.name) + + # Clean up: remove the temporary file + tfile.close() + os.unlink(tfile.name) + +def process_video(video_path): + # Load OpenCV's pre-trained Haar Cascade face detector + face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') + + video_capture = cv2.VideoCapture(video_path) + + stframe = st.empty() + + while video_capture.isOpened(): + ret, frame = video_capture.read() + if not ret: + break + + # Convert the frame to grayscale + gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + + # Detect faces + faces = face_cascade.detectMultiScale(gray_frame, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) + + # Draw rectangles around the faces + for (x, y, w, h) in faces: + cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) + + # Extract the face ROI + face = gray_frame[y:y+h, x:x+w] + # Resize the face to 48x48 pixels + face_resized = cv2.resize(face, (224, 224)) + # Normalize the pixel values + face_normalized = face_resized / 255.0 + # Expand dimensions to match model input shape + face_rgb = np.stack((face_normalized,) * 3, axis=-1) + face_input = np.expand_dims(face_rgb, axis=0) + + # Predict the emotion + emotion_prediction = emotion_model.predict(face_input) + emotion_label = emotion_labels[np.argmax(emotion_prediction)] + + # Draw a rectangle around the face and put the emotion label + cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) + cv2.putText(frame, emotion_label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2) + + + # Convert the frame back to RGB + rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + + # Display the frame + stframe.image(rgb_frame, channels="RGB") + + video_capture.release() + +if __name__ == "__main__": + main() diff --git a/assets/demo.webm b/assets/demo.webm new file mode 100644 index 000000000..8c589b7c3 Binary files /dev/null and b/assets/demo.webm differ diff --git a/cnnModel.h5 b/cnnModel.h5 new file mode 100644 index 000000000..1d03388b5 Binary files /dev/null and b/cnnModel.h5 differ diff --git a/emotion_recognition_model.h5 b/emotion_recognition_model.h5 new file mode 100644 index 000000000..d16fea8cf Binary files /dev/null and b/emotion_recognition_model.h5 differ diff --git a/fer-mobilenet.ipynb b/fer-mobilenet.ipynb new file mode 100644 index 000000000..b770ecfdb --- /dev/null +++ b/fer-mobilenet.ipynb @@ -0,0 +1 @@ +{"cells":[{"cell_type":"markdown","metadata":{},"source":["# Imports"]},{"cell_type":"code","execution_count":4,"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.execute_input":"2024-06-02T06:41:38.362774Z","iopub.status.busy":"2024-06-02T06:41:38.362367Z","iopub.status.idle":"2024-06-02T06:41:38.369633Z","shell.execute_reply":"2024-06-02T06:41:38.368686Z","shell.execute_reply.started":"2024-06-02T06:41:38.362746Z"},"trusted":true},"outputs":[],"source":["import tensorflow as tf\n","from tensorflow import keras\n","from tensorflow.keras import layers\n","from tensorflow.keras.models import Model\n","from tensorflow.keras.applications import MobileNet\n","from tensorflow.keras.utils import plot_model, load_img\n","from tensorflow.keras.preprocessing.image import ImageDataGenerator\n","from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau\n","from tensorflow.keras.optimizers import Adam\n","from sklearn.metrics import precision_score, recall_score, f1_score\n","import matplotlib.pyplot as plt\n","import numpy as np\n","import os\n","import pandas as pd\n","import seaborn as sns\n","import numpy as np\n","import pandas as pd"]},{"cell_type":"markdown","metadata":{},"source":["# Data Preprocessing"]},{"cell_type":"code","execution_count":5,"metadata":{"execution":{"iopub.execute_input":"2024-06-02T06:41:41.710260Z","iopub.status.busy":"2024-06-02T06:41:41.709611Z","iopub.status.idle":"2024-06-02T06:41:41.715243Z","shell.execute_reply":"2024-06-02T06:41:41.714326Z","shell.execute_reply.started":"2024-06-02T06:41:41.710145Z"},"trusted":true},"outputs":[],"source":["# Set seed for reproducibility\n","tf.random.set_seed(42)\n","np.random.seed(42)\n","\n","# Define the dataset directory - this was ran on Kaggle Notebook. Should be changed to appropriate local directory\n","dataset_directory = '/kaggle/input/fer2013'\n","train_dir = f'/kaggle/input/fer2013/train'\n","test_dir = f'/kaggle/input/fer2013/test'"]},{"cell_type":"code","execution_count":7,"metadata":{"execution":{"iopub.execute_input":"2024-06-02T06:41:50.468356Z","iopub.status.busy":"2024-06-02T06:41:50.467976Z","iopub.status.idle":"2024-06-02T06:41:50.475431Z","shell.execute_reply":"2024-06-02T06:41:50.474598Z","shell.execute_reply.started":"2024-06-02T06:41:50.468328Z"},"trusted":true},"outputs":[],"source":["data_gen = ImageDataGenerator(\n"," rescale=1.0 / 255, # Normalize pixel values to [0, 1] by scaling by 255\n"," rotation_range=20, # Randomly rotate images by up to 20 degrees\n"," width_shift_range=0.2, # Randomly shift images horizontally by up to 20% of the width\n"," height_shift_range=0.2, # Randomly shift images vertically by up to 20% of the height\n"," shear_range=0.2, # Apply a shear transformation with a range of 20 degrees\n"," zoom_range=0.2, # Randomly zoom in or out by up to 20%\n"," horizontal_flip=True, # Randomly flip images horizontally\n"," validation_split=0.2 # Reserve 20% of the data for validation\n",")\n","\n","def get_generators(target_size):\n"," train_gen = data_gen.flow_from_directory(\n"," train_dir,\n"," target_size=target_size,\n"," batch_size=32,\n"," class_mode='categorical',\n"," subset='training'\n"," )\n"," val_gen = data_gen.flow_from_directory(\n"," train_dir,\n"," target_size=target_size,\n"," batch_size=32,\n"," class_mode='categorical',\n"," subset='validation'\n"," )\n"," test_gen = ImageDataGenerator(rescale=1.0/255).flow_from_directory(\n"," test_dir,\n"," target_size=target_size,\n"," batch_size=32,\n"," class_mode='categorical'\n"," )\n"," return train_gen, val_gen, test_gen"]},{"cell_type":"code","execution_count":8,"metadata":{"execution":{"iopub.execute_input":"2024-06-02T06:41:53.519999Z","iopub.status.busy":"2024-06-02T06:41:53.519307Z","iopub.status.idle":"2024-06-02T06:41:59.035008Z","shell.execute_reply":"2024-06-02T06:41:59.034095Z","shell.execute_reply.started":"2024-06-02T06:41:53.519968Z"},"trusted":true},"outputs":[{"name":"stderr","output_type":"stream","text":["/opt/conda/lib/python3.10/site-packages/seaborn/_oldcore.py:1765: FutureWarning: unique with argument that is not not a Series, Index, ExtensionArray, or np.ndarray is deprecated and will raise in a future version.\n"," order = pd.unique(vector)\n","/opt/conda/lib/python3.10/site-packages/seaborn/_oldcore.py:1765: FutureWarning: unique with argument that is not not a Series, Index, ExtensionArray, or np.ndarray is deprecated and will raise in a future version.\n"," order = pd.unique(vector)\n","/opt/conda/lib/python3.10/site-packages/seaborn/_oldcore.py:1765: FutureWarning: unique with argument that is not not a Series, Index, ExtensionArray, or np.ndarray is deprecated and will raise in a future version.\n"," order = pd.unique(vector)\n"]},{"data":{"image/png":"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5O3trTVr1mjUqFFKSkrS66+/fs3jLly4UH/99ZeefvppORwOTZo0SQ888IB++eWXa46S++677/T555/rn//8p0qWLKkZM2aoe/fuOnr0qEqXLi1J2rFjhzp27Kjy5ctr7NixSktL07hx41S2bNlrtq1cuXLy9PTUV199pUGDBsnf3z/buunp6brvvvv03XffqX///qpdu7Z27dqlqVOn6ueff7bm9vroo4/05JNP6o477lD//v0lSdWqVcv2uBk/y+rdu/c125ud6dOn67777lOvXr2UkpKiRYsW6aGHHtKyZcvUuXNnSdKePXt07733qkGDBho3bpzc3d118OBBff/999Zx3nnnHQ0ePFgPPvignn32WV24cEE7d+7Uli1b9Oijj+a6faGhoapWrdpV51ZISUlReHi4kpOTNWjQIAUGBur333/XsmXLlJCQIF9f3xy9tg899JCqV6+uV1999ZrDv9evX69PPvlEgwcPlru7u2bPnq2OHTvqhx9+UL169a6rj9f7dx8zZozGjh2rsLAwDRgwQPv379ecOXO0detWff/9906fjTNnzqhjx4564IEH9PDDD+uzzz7TiBEjVL9+fXXq1Om62gnkVq9evfTBBx/o008/dXowyenTp7VixQr17NlTnp6e2rNnj5YuXaqHHnpIwcHBOnnypN566y21bt1ae/fuVVBQ0HWd98knn9T8+fP16KOP6s4779SaNWus69rltm7dqk2bNqlHjx6qUKGCjhw5ojlz5qhNmzbau3evvLy81KpVKw0ePFgzZszQv//9b9WuXVuSrP9e6e+//1abNm108OBBDRw4UMHBwVq8eLH69u2rhIQEPfvss071cxvvKleurFWrVmnNmjVq167dVV+Pjz76SBEREQoPD9fEiRN1/vx5zZkzRy1bttSOHTtUpUoVPf300zp+/HiWP6HKynfffafTp09ryJAhuR6du3jxYp0/f14DBgxQ6dKl9cMPP+jNN9/Ub7/9psWLF1v1unfvrj179mjQoEGqUqWKTp06pejoaB09etRa79Chg8qWLav/+7//k5+fn44cOaLPP/88V+3KUKxYMfXs2VMvvfSSvvvuuyzfQ9Kla/OECROs63lSUpK2bdum7du36+67787Raztv3jxduHBB/fv3l7u7u/z9/ZWenp5l3bS0NHXs2FHNmzfXpEmTtHz5co0ePVoXL17UuHHjrquP1/t337Nnj+666y75+Pjo+eefV/HixfXWW2+pTZs2Wr9+vZo1a+ZUf9CgQSpVqpRGjx6tI0eOaNq0aRo4cKA++eST62onUJg9/fTTioqK0uOPP67Bgwfr8OHDmjlzpnbs2GH9++xa16myZctqzpw5GjBggO6//3498MADkqQGDRpke17iAHGAOHCLK+jMH/JfdiPeJJm5c+dmqn/lXQpjjHn66aeNl5eX00iv7Ea8lS5d2uku0RdffGEkma+++sralt2IJDc3N3Pw4EFr248//mgkmTfffNPa1qVLF+Pl5WV+//13a9uBAweMq6vrNUe8GWPMqFGjjCRTokQJ06lTJzN+/HgTGxubqd5HH31kXFxczMaNG522z50710gy33//vbWtRIkSVx3ldrnGjRsbX1/fHNU1JusRWFf+jVJSUky9evVMu3btrG1Tp041kswff/yR7bG7du2a7V2iq7nWiLeMY0syiYmJxpjMd2527NhhJGU5Uu9y2b22Ge+hnj17Zlt2Of3/O0Dbtm2ztv3666/Gw8PD3H///da2nI54u1rbrhzxdurUKePm5mY6dOhg0tLSrHozZ840ksz7779vbcv4bH744YfWtuTkZBMYGGi6d++e6VyAXS5evGjKly9vQkNDnbZnXANXrFhhjLk0Qu3y97Uxl64R7u7uZty4cU7bdI0Rb3FxcUaS+ec//+l0vEcffTTTXdusYlVMTEymz8/ixYuzvGtsTOYRb9OmTTOSzPz5861tKSkpJjQ01Hh7e5ukpCSnvuQk3mVl9+7dxtPT00gyjRo1Ms8++6xZunSpOXfunFO9v/76y/j5+ZmnnnrKaXt8fLzx9fV12p5VrM/O9OnTjSSzZMmSHNXP6s57Vq//hAkTjMPhML/++qsxxpgzZ85cM1YsWbLESDJbt27NUVsud7WRDpcfe/r06da2K0c6NGzY0HTu3Pmq58nutc14H/j4+GQaAZDdSAdJZtCgQda29PR007lzZ+Pm5mbF65yOdLha24zJPNKhW7duxs3NzRw6dMjadvz4cVOyZEnTqlUra1tGDAsLC3MagTF06FBTrFgxp5EjwM3kys/Lxo0bjaRMv/RYvny50/acXKf++OOPa45yuxxx4H+IA8SBWxFPNYXF3d1djz/+eKbtnp6e1v//9ddf+u9//6u77rpL58+f108//XTN4z7yyCMqVaqUtX7XXXdJuvRAgWsJCwtzGjXUoEED+fj4WPumpaVp1apV6tatm9Moittuuy3HI4HGjh2rhQsXqnHjxlqxYoVeeOEFhYSEqEmTJtq3b59Vb/Hixapdu7Zq1aql//73v9aScVdq7dq1OTrflZKSklSyZMlc7Zvh8r/RmTNnlJiYqLvuukvbt2+3tvv5+Um6NBdTdndc/Pz89Ntvv2nr1q031J6sZDwqO7unIvr6+kqSVqxYofPnz+f6PM8880yO64aGhiokJMRar1Spkrp27aoVK1YoLS0t1224llWrViklJUVDhgxxerDEU089JR8fH3399ddO9b29vZ3mqnBzc9Mdd9yRo88QkFeKFSumHj16KCYmxunhLgsXLlRAQIDat28v6VIsyXhfp6Wl6c8//5S3t7dq1qzpdE3KiW+++UaSNHjwYKftQ4YMyVT38utgamqq/vzzT912223y8/O77vNefv7AwED17NnT2la8eHENHjxYZ8+e1fr1653q5zbe1a1bV3FxcXrsscd05MgRTZ8+Xd26dVNAQIDeeecdq150dLQSEhLUs2dPpzhUrFgxNWvW7IbikKQbikWXv/7nzp3Tf//7X915550yxmjHjh1WHTc3N61bt05nzpzJ8jgZsWrZsmVKTU3NdXuycq04lHH+PXv26MCBA7k+T/fu3XM06j7D5SNIHQ6HBg4cqJSUFK1atSrXbbiWtLQ0rVy5Ut26dVPVqlWt7eXLl9ejjz6q7777znpfZOjfv7/TnE933XWX0tLS9Ouvv9rWTiA/LV68WL6+vrr77rudrrEhISHy9va2rrF2XKeIA/9DHCAO3IpIvMHyj3/8I8uJpffs2aP7779fvr6+8vHxUdmyZa0kQGJi4jWPW6lSJaf1jC8l2V1sr7Zvxv4Z+546dUp///23brvttkz1stqWnZ49e2rjxo06c+aMVq5cqUcffVQ7duxQly5drKcIHThwQHv27FHZsmWdlho1alhtyQ0fH5+rXvxzYtmyZWrevLk8PDzk7+9vDXG//O/zyCOPqEWLFnryyScVEBCgHj166NNPP3VKwo0YMULe3t664447VL16dUVGRjr9FPVGZDytJ7uAHhwcrGHDhundd99VmTJlFB4erlmzZuXoPXblcXKqevXqmbbVqFFD58+f1x9//HFd570eGcGpZs2aTtvd3NxUtWrVTMGrQoUKmZ6GevnnAMgvGQ9PWLhwoSTpt99+08aNG9WjRw/rpynp6emaOnWqqlevLnd3d5UpU0Zly5bVzp07r/vz/Ouvv8rFxSXTz7av/OxIl34WOmrUKFWsWNHpvAkJCdd93svPX7169UxPXs74aeqVn9UbiXc1atTQRx99pP/+97/auXOnXn31Vbm6uqp///7WP7wzvgS0a9cuUyxauXLlDcUh6epfRK7l6NGj6tu3r/z9/eXt7a2yZcuqdevWkv73bwV3d3dNnDhR3377rQICAtSqVStNmjRJ8fHx1nFat26t7t27a+zYsSpTpoy6du2qefPmKTk5Oddty3CtOCRJ48aNU0JCgmrUqKH69etr+PDh2rlz53Wd53rikIuLi9MXHknWvyvsfHr5H3/8ofPnz2f5Wapdu7bS09N17Ngxp+038v4GbgYHDhxQYmKiypUrl+kae/bsWesaa9d1ijhwCXGAOHArIvEGy+V3KTIkJCSodevW+vHHHzVu3Dh99dVXio6Otp4Ek93IqctlN0+AycHjl29k39zw8fHR3XffrQULFigiIkKHDh3Sli1bJF3qa/369RUdHZ3l8s9//jNX56xVq5YSExMzXdhyauPGjbrvvvvk4eGh2bNn65tvvlF0dLQeffRRp9fJ09NTGzZs0KpVq9S7d2/t3LlTjzzyiO6++25rdFft2rW1f/9+LVq0SC1bttR//vMftWzZUqNHj85V2y63e/dulStXzgrsWZk8ebJ27typf//73/r77781ePBg1a1bV7/99luOz5PV+/hGXJnwymDniLgr5ffnAMhOSEiIatWqpY8//liS9PHHH8sY4/Q001dffVXDhg1Tq1atNH/+fK1YsULR0dGqW7dujmJGbg0aNEjjx4/Xww8/rE8//VQrV65UdHS0Spcubet5L5cXn9VixYqpfv36GjlypJYsWSJJWrBggaT/xdyPPvooyzj0xRdf5KrdtWrVkiTt2rUrV/unpaXp7rvv1tdff60RI0Zo6dKlio6OVlRUlFO7pUujFX/++WdNmDBBHh4eeumll1S7dm1rNITD4dBnn32mmJgYDRw4UL///rueeOIJhYSEWF+Ycmv37t2Srn5jrlWrVjp06JDef/991atXT++++66aNGmid999N8fnuRXjkEQswq0vPT1d5cqVy/bf+hnzbdl5nZKIA8SBzIgDNz8eroCrWrdunf788099/vnnatWqlbX98OHDBdiq/ylXrpw8PDx08ODBTGVZbbseTZs21QcffKATJ05IujRR/o8//qj27dtne/HLcK3yy3Xp0kUff/yx5s+fr5EjR153O//zn//Iw8NDK1ascHoc9rx58zLVdXFxUfv27dW+fXtNmTJFr776ql544QWtXbtWYWFhkqQSJUrokUce0SOPPKKUlBQ98MADGj9+vEaOHJnrR1DHxMTo0KFDOXpce/369VW/fn29+OKL2rRpk1q0aKG5c+fqlVdekXR9r+21ZDWE/Oeff5aXl5c1PLxUqVJKSEjIVC+rIdU5bVvGY+L379/vdIcrJSVFhw8ftv4WQGHUq1cvvfTSS9q5c6cWLlyo6tWr6/bbb7fKP/vsM7Vt21bvvfee034JCQkqU6bMdZ2rcuXKSk9P16FDh5zuyO7fvz9T3c8++0wRERGaPHmyte3ChQuZPr/Xcw2pXLmydu7cqfT0dKdRbxnTLGR8lu3StGlTSXKKQ9Kl2Het68T19LNly5YqVaqUPv74Y/373/++7om1d+3apZ9//lkffPCB+vTpY23P7oE61apV03PPPafnnntOBw4cUKNGjTR58mTNnz/fqtO8eXM1b95c48eP18KFC9WrVy8tWrRITz755HW1LUNaWpoWLlwoLy8vtWzZ8qp1/f399fjjj+vxxx/X2bNn1apVK40ZM8Y6d17GofT0dP3yyy/W6AbpUhySpCpVqkj634iCK9/LNxKHypYtKy8vryw/Sz/99JNcXFxUsWLFHB0LuFVUq1ZNq1atUosWLXKUOLnadSqvrhPEAeKARBy4FTDiDVeVcdG9PIudkpKi2bNnF1STnBQrVkxhYWFaunSpjh8/bm0/ePCgvv3222vuf/78ecXExGRZlrF/xpe9hx9+WL///rvTPAsZ/v77b507d85aL1GiRJbJmqw8+OCDql+/vsaPH59lW/766y+98MIL2e5frFgxORwOpzseR44csZ6ymuH06dOZ9m3UqJEkWUO3//zzT6dyNzc31alTR8aYXM+x8Ouvv6pv375yc3PT8OHDs62XlJSkixcvOm2rX7++XFxcnIaWX89rey0xMTFOcz8dO3ZMX3zxhTp06GC996tVq6bExESnIeYnTpyw7kBeLqdtCwsLk5ubm2bMmOH02XrvvfeUmJiY7VOWgMIgY3TbqFGjFBcX5zTaTbp0TbryzufixYv1+++/X/e5MubqnDFjhtP2adOmZaqb1XnffPPNTHeDS5QoISnzP16zcs899yg+Pt7paV0XL17Um2++KW9vb+snNDdq48aNWV5jM+a4y4hD4eHh8vHx0auvvppl/ct/In89/fTy8tKIESO0b98+jRgxIss71/Pnz9cPP/yQ5f5Z/VvBGKPp06c71Tt//rw1fUOGatWqqWTJktZ1/syZM5nOf2Wsul5paWkaPHiw9u3bp8GDB1915PWVcdDb21u33XZbpjgk5ey1zYmZM2da/2+M0cyZM1W8eHFr3sTKlSurWLFi2rBhg9N+Wf1bLKdtK1asmDp06KAvvvjC6adMJ0+e1MKFC9WyZcurvk7Arejhhx9WWlqaXn755UxlFy9etD5XOblOeXl5Scr5dYI4QBzIQBy4NTHiDVd15513qlSpUoqIiNDgwYPlcDj00UcfFarhpGPGjNHKlSvVokULDRgwQGlpaZo5c6bq1aunuLi4q+57/vx53XnnnWrevLk6duyoihUrKiEhQUuXLtXGjRvVrVs3NW7cWJLUu3dvffrpp3rmmWe0du1atWjRQmlpafrpp5/06aefasWKFdZdqZCQEK1atUpTpkxRUFCQgoODMz2OOUPx4sX1+eefKywsTK1atdLDDz+sFi1aqHjx4tqzZ48WLlyoUqVKafz48Vnu37lzZ02ZMkUdO3bUo48+qlOnTmnWrFm67bbbnJJF48aN04YNG9S5c2dVrlxZp06d0uzZs1WhQgXrrk+HDh0UGBioFi1aKCAgQPv27dPMmTPVuXPnHE22un37ds2fP1/p6elKSEjQ1q1b9Z///Md631ztMepr1qzRwIED9dBDD6lGjRq6ePGiPvroIxUrVkzdu3e36l3Pa3st9erVU3h4uAYPHix3d3creI0dO9aq06NHD40YMUL333+/Bg8ebD2yvUaNGpkmbM9p28qWLauRI0dq7Nix6tixo+677z7t379fs2fP1u23356jkYFAQQkODtadd95p/ZzlysTbvffeq3Hjxunxxx/XnXfeqV27dmnBggWZ5i/JiUaNGqlnz56aPXu2EhMTdeedd2r16tVZjmi+99579dFHH8nX11d16tRRTEyMVq1apdKlS2c6ZrFixTRx4kQlJibK3d1d7dq1U7ly5TIds3///nrrrbfUt29fxcbGqkqVKvrss8/0/fffa9q0aTf8YJwMEydOVGxsrB544AHrOrl9+3Z9+OGH8vf3tx4m4ePjozlz5qh3795q0qSJevToobJly+ro0aP6+uuv1aJFC+sf7xkPjhk8eLDCw8Oth2NkZ/jw4dqzZ48mT56stWvX6sEHH1RgYKDi4+O1dOlS/fDDD9q0aVOW+9aqVUvVqlXTv/71L/3+++/y8fHRf/7zn0xzvvz8889q3769Hn74YdWpU0eurq5asmSJTp48abXtgw8+0OzZs3X//ferWrVq+uuvv/TOO+/Ix8dH99xzzzVfy8TERGvExPnz53Xw4EF9/vnnOnTokHr06JHlF+rL1alTR23atFFISIj8/f21bds2ffbZZ04TX1/va3s1Hh4eWr58uSIiItSsWTN9++23+vrrr/Xvf//bGnnt6+urhx56SG+++aYcDoeqVaumZcuWZTmX0/W07ZVXXlF0dLRatmypf/7zn3J1ddVbb72l5ORkTZo0KVf9AW5mrVu31tNPP60JEyYoLi5OHTp0UPHixXXgwAEtXrxY06dP14MPPpij65Snp6fq1KmjTz75RDVq1JC/v7/q1aunevXqZXlu4gBxgDhwi8unp6eiEMnqEcNXe/Ty999/b5o3b248PT1NUFCQef75582KFSsyPdI4IiLCVK5c2VrPeLxxVo+L1hWPMh49enSmNkkykZGRmfa98pHPxhizevVq07hxY+Pm5maqVatm3n33XfPcc88ZDw+PbF6FS1JTU80777xjunXrZipXrmzc3d2Nl5eXady4sXn99ddNcnKyU/2UlBQzceJEU7duXePu7m5KlSplQkJCzNixY01iYqJV76effjKtWrWyHgt+ZXuzcubMGTNq1ChTv3594+XlZTw8PEy9evXMyJEjzYkTJ6x6V77Oxhjz3nvvmerVqxt3d3dTq1YtM2/evEyv6erVq03Xrl1NUFCQcXNzM0FBQaZnz57m559/tuq89dZbplWrVqZ06dLG3d3dVKtWzQwfPtypb1nJ+FtnLK6ursbf3980a9bMjBw50nqE+OWufCz2L7/8Yp544glTrVo14+HhYfz9/U3btm3NqlWrnPbL7rXN6G/GY7cvd7X31/z5863XrnHjxpke022MMStXrjT16tUzbm5upmbNmmb+/PlZHjO7tmU8gvvw4cNO9WfO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o7fffvu62goAyH/X9VPTL7/80vr/FStWyNfX11pPS0vT6tWrVaVKlTxrHACgaCHOAADsZEec6dSpkzp16pRlmTFG06ZN04svvqiuXbtKkj788EMFBARo6dKl6tGjh/bt26fly5dr69atatq0qSTpzTff1D333KM33nhDQUFBWrBggVJSUvT+++/Lzc1NdevWVVxcnKZMmeKUoAMAFD7XlXjr1q2bJMnhcCgiIsKprHjx4qpSpYomT56cZ42D/ZgPAUBhQpy59RTmOCMRa4CiJr/jzOHDhxUfH6+wsDBrm6+vr5o1a6aYmBj16NFDMTEx8vPzs5JukhQWFiYXFxdt2bJF999/v2JiYtSqVSu5ublZdcLDwzVx4kSdOXNGpUqVynTu5ORkJScnW+tJSUl51i8AQM5d109N09PTlZ6erkqVKunUqVPWenp6upKTk7V//37de++9uWrIa6+9JofDoSFDhljbLly4oMjISJUuXVre3t7q3r27Tp486bTf0aNH1blzZ3l5ealcuXIaPny4Ll686FRn3bp1atKkidzd3XXbbbcpKioqV20EANjLzjiTnbS0NL300ksKDg6Wp6enqlWrppdfflnGGKtOXs3PAwAoWPkdZ+Lj4yVJAQEBTtsDAgKssvj4eJUrV86p3NXVVf7+/k51sjrG5ee40oQJE+Tr62stFStWvPEOAQCuW67meDt8+LDKlCmTZ43YunWr3nrrLTVo0MBp+9ChQ/XVV19p8eLFWr9+vY4fP64HHnjAKk9LS1Pnzp2VkpKiTZs26YMPPlBUVJRGjRrl1NbOnTurbdu2iouL05AhQ/Tkk09qxYoVedZ+AEDeyus4czUTJ07UnDlzNHPmTO3bt08TJ07UpEmT9Oabb1p18mJ+HgBA4ZGfcaagjBw5UomJidZy7Nixgm4SABRJ1/VT08utXr1aq1evtu4UXe7999/P8XHOnj2rXr166Z133tErr7xibU9MTNR7772nhQsXql27dpKkefPmqXbt2tq8ebOaN2+ulStXau/evVq1apUCAgLUqFEjvfzyyxoxYoTGjBkjNzc3zZ07V8HBwdaQ8dq1a+u7777T1KlTFR4enmWbGJYNAAUvr+LMtWzatEldu3ZV586dJUlVqlTRxx9/rB9++EFS3s3PcyViDQAUrPyIM4GBgZKkkydPqnz58tb2kydPqlGjRlad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HQDAdeKnpgAAAABgk61btyotLc1a3717t+6++2499NBD1rannnpK48aNs9a9vLys/09LS1Pnzp0VGBioTZs26cSJE+rTp4+KFy+uV199NX86AQDItQId8TZnzhw1aNBAPj4+8vHxUWhoqL799lur/MKFC4qMjFTp0qXl7e2t7t276+TJk07HyMndn3Xr1qlJkyZyd3fXbbfdpqioqPzoHgDgJvH777/rscceU+nSpeXp6an69etr27ZtVrkxRqNGjVL58uXl6empsLAwHThwwOkYp0+fVq9eveTj4yM/Pz/169dPZ8+eze+uAAAKmbJlyyowMNBali1bpmrVqql169ZWHS8vL6c6Pj4+VtnKlSu1d+9ezZ8/X40aNVKnTp308ssva9asWUpJSSmILgEArkOBJt4qVKig1157TbGxsdq2bZvatWunrl27as+ePZKkoUOH6quvvtLixYu1fv16HT9+XA888IC1f8bdn5SUFG3atEkffPCBoqKiNGrUKKvO4cOH1blzZ7Vt21ZxcXEaMmSInnzySa1YsSLf+wsAKHzOnDmjFi1aqHjx4vr222+1d+9eTZ48WaVKlbLqTJo0STNmzNDcuXO1ZcsWlShRQuHh4bpw4YJVp1evXtqzZ4+io6O1bNkybdiwQf379y+ILgEACqmUlBTNnz9fTzzxhBwOh7V9wYIFKlOmjOrVq6eRI0fq/PnzVllMTIzq16+vgIAAa1t4eLiSkpKs701ZSU5OVlJSktMCAMh/BfpT0y5dujitjx8/XnPmzNHmzZtVoUIFvffee1q4cKHatWsnSZo3b55q166tzZs3q3nz5tbdn1WrVikgIECNGjXSyy+/rBEjRmjMmDFyc3PT3LlzFRwcrMmTJ0uSateure+++05Tp05VeHh4vvcZAFC4TJw4URUrVtS8efOsbcHBwdb/G2M0bdo0vfjii+ratask6cMPP1RAQICWLl2qHj16aN++fVq+fLm2bt2qpk2bSpLefPNN3XPPPXrjjTcUFBSUv50CABRKS5cuVUJCgvr27Wtte/TRR1W5cmUFBQVp586dGjFihPbv36/PP/9ckhQfH++UdJNkrcfHx2d7rgkTJmjs2LF53wkAwHUpNA9XSEtL06JFi3Tu3DmFhoYqNjZWqampCgsLs+rUqlVLlSpVUkxMjKSc3f2JiYlxOkZGnYxjZIW7QwBQ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AAAAAAA2IPEGAAAAAAAA2IDEGwAAAAAAAGADEm8AAAAAAACADUi8AQAAAAAAADYg8QYAAAAAAADYgMQbAAAAAAAAYAMSbwAAAAAAAIANSLwBAAAAAAAANiDxBgAAAAAAANiAxBsAAAAAAABgAxJvAAAAAAAAgA1IvAEAAACATSZMmKDbb79dJUuWVLly5dStWzft37/fqU6bNm3kcDiclmeeecapztGjR9W5c2d5eXmpXLlyGj58uC5evJifXQEA5EKBJt42bNigLl26KCgoSA6HQ0uXLnUqN8Zo1KhRKl++vDw9PRUWFqYDBw441Tl9+rR69eolHx8f+fn5qV+/fjp79qxTnZ07d+quu+6Sh4eHKlasqEmTJtndNQDATSInX4guXLigyMhIlS5dWt7e3urevbtOnjzpVIcvRACArKxfv16RkZHavHmzoqOjlZqaqg4dOujcuXNO9Z566imdOHHCWi7/zpKWlqbOnTsrJSVFmzZt0gcffKCoqCiNGjUqv7sDALhOBZp4O3funBo2bKhZs2ZlWT5p0iTNmDFDc+fO1ZYtW1SiRAmFh4frwoULVp1evXppz549io6O1rJly7Rhwwb179/fKk9KSlKHDh1UuXJlxcbG6vXXX9eYMWP09ttv294/AEDhl5MvREOHDtVXX32lxYsXa/369Tp+/LgeeOABq5wvRACA7Cxfvlx9+/ZV3bp11bBhQ0VFReno0aOKjY11qufl5aXAwEBr8fHxscpWrlypvXv3av78+WrUqJE6deqkl19+WbNmzVJKSkp+dwkAcB1cC/LknTp1UqdOnbIsM8Zo2rRpevHFF9W1a1dJ0ocffqiAgAAtXbpUPXr00L59+7R8+XJt3bpVTZs2lSS9+eabuueee/TGG28oKChICxYsUEpKit5//325ubmpbt26iouL05QpU5wSdACAomn58uVO61FRUSpXrpxiY2PVqlUrJSYm6r333tPChQvVrl07SdK8efNUu3Ztbd68Wc2bN7e+EK1atUoBAQFq1KiRXn75ZY0YMUJjxoyRm5tbQXQNAFAIJSYmSpL8/f2dti9YsEDz589XYGCgunTpopdeekleXl6SpJiYGNWvX18BAQFW/fDwcA0YMEB79uxR48aNM50nOTlZycnJ1npSUpId3QEAXEOhnePt8OHDio+PV1hYmLXN19dXzZo1U0xMjKRL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1esTGhqKn3/+GZWVlU2uY/Lkyfj333+xc+fORtMWLlyIjIwM9hQREb2gmDNERKRLzBkibfzFG1EHs379etTV1cHHxwfbt29HcXExzpw5g4SEBPj5+TUqr1AooNFokJaWhvPnzyMhIUHq/QGAu3fvIiIiAtnZ2bh48SJycnJw9OhRKJVKAMCcOXOwe/dulJSU4Pjx4/jtt9+kaURE9OJhzhARkS4xZ4i08eEKRB2MXC7H8ePHsXTpUsybNw/l5eWws7ODl5cXNmzY0Kj82LFjERUVhYiICNy7dw+jR49GbGwslixZAgAwMDDAzZs3MW3aNFy7dg2vvPIK3nnnHXz++ecAgLq6OoSHh+Py5cuwtLTE22+/jTVr1vyXm0xERP8h5gwREekSc4ZIG281JSIiIiIiIiIi0gHeakpERERERERERKQDbHgjIiIiIiIiIiLSATa8ERERERERERER6QAb3oiIiIiIiIiIiHSADW9EREREREREREQ6wIY3IiIiIiIiIiIiHWDDGxERERERERERkQ6w4Y2IiIiIiIiIiEgH2PBGRERERERERESkA2x4IyIiIiIiIiIi0gE2vBEREREREREREenA/wBexcm49M9M1AAAAABJRU5ErkJggg==","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["# Function to count images in each class\n","def count_images_in_directory(directory):\n"," class_counts = {}\n"," # Iterate over class directories and count images\n"," for class_name in os.listdir(directory):\n"," class_path = os.path.join(directory, class_name)\n"," if os.path.isdir(class_path):\n"," # Count the number of files in each class directory\n"," class_counts[class_name] = len(os.listdir(class_path))\n"," return class_counts\n","\n","# Get class counts for training, validation, and test datasets\n","train_class_counts = count_images_in_directory(train_dir)\n","\n","# Calculate the validation set class counts based on the split\n","validation_split = 0.2\n","val_class_counts = {key: int(value * validation_split) for key, value in train_class_counts.items()}\n","\n","# Get test set class counts\n","test_class_counts = count_images_in_directory(test_dir)\n","\n","# Plot class distribution for training, validation, and test datasets\n","fig, axes = plt.subplots(1, 3, figsize=(15, 5))\n","\n","sns.barplot(x=list(train_class_counts.keys()), y=list(train_class_counts.values()), ax=axes[0])\n","axes[0].set_title('Training Set Class Distribution')\n","axes[0].set_xlabel('Class')\n","axes[0].set_ylabel('Count')\n","\n","sns.barplot(x=list(val_class_counts.keys()), y=list(val_class_counts.values()), ax=axes[1])\n","axes[1].set_title('Validation Set Class Distribution')\n","axes[1].set_xlabel('Class')\n","axes[1].set_ylabel('Count')\n","\n","sns.barplot(x=list(test_class_counts.keys()), y=list(test_class_counts.values()), ax=axes[2])\n","axes[2].set_title('Test Set Class Distribution')\n","axes[2].set_xlabel('Class')\n","axes[2].set_ylabel('Count')\n","\n","plt.show()"]},{"cell_type":"markdown","metadata":{},"source":["# Model Training"]},{"cell_type":"code","execution_count":9,"metadata":{"execution":{"iopub.execute_input":"2024-06-02T06:42:03.615877Z","iopub.status.busy":"2024-06-02T06:42:03.615525Z","iopub.status.idle":"2024-06-02T06:42:03.621747Z","shell.execute_reply":"2024-06-02T06:42:03.620839Z","shell.execute_reply.started":"2024-06-02T06:42:03.615853Z"},"trusted":true},"outputs":[],"source":["# Function to create a custom model\n","def create_model(base_model, num_classes):\n"," x = layers.GlobalAveragePooling2D()(base_model.output)\n"," x = layers.Dropout(0.5)(x)\n"," x = layers.Dense(128, activation='relu')(x)\n"," x = layers.Dropout(0.5)(x)\n"," outputs = layers.Dense(num_classes, activation='softmax')(x) # Set the correct number of classes\n"," return Model(inputs=base_model.input, outputs=outputs)"]},{"cell_type":"code","execution_count":10,"metadata":{"execution":{"iopub.execute_input":"2024-06-02T06:42:06.956165Z","iopub.status.busy":"2024-06-02T06:42:06.955772Z","iopub.status.idle":"2024-06-02T06:42:06.969180Z","shell.execute_reply":"2024-06-02T06:42:06.968196Z","shell.execute_reply.started":"2024-06-02T06:42:06.956138Z"},"trusted":true},"outputs":[],"source":["# Define callbacks for early stopping and learning rate reduction\n","callbacks = [\n"," EarlyStopping(patience=10, restore_best_weights=True),\n"," ReduceLROnPlateau(factor=0.1, patience=5, verbose=1)\n","]\n","\n","# Define a function to train, evaluate, and plot model metrics\n","def train_and_evaluate(model, train_gen, val_gen, test_gen, epochs=5):\n"," #Display the model summary\n"," model.summary()\n"," \n"," # Train the model\n"," history = model.fit(\n"," train_gen,\n"," validation_data=val_gen,\n"," epochs=epochs,\n"," callbacks=callbacks\n"," )\n","\n"," # Evaluate on the test set and calculate additional metrics\n"," test_loss, test_acc = model.evaluate(test_gen)\n"," \n"," # Get predictions and ground truth labels from the test set\n"," predictions = model.predict(test_gen)\n"," predicted_classes = np.argmax(predictions, axis=1) # Get class with highest probability\n"," true_classes = test_gen.classes\n"," \n"," # Calculate precision, recall, and F1-score\n"," precision = precision_score(true_classes, predicted_classes, average='macro')\n"," recall = recall_score(true_classes, predicted_classes, average='macro')\n"," f1 = f1_score(true_classes, predicted_classes, average='macro')\n","\n"," # Print precision, recall, and F1 score\n"," print(\"Precision:\", precision)\n"," print(\"Recall:\", recall)\n"," print(\"F1 Score:\", f1)\n","\n"," # Plot training and validation accuracy\n"," plt.figure()\n"," plt.plot(history.history['accuracy'], label='Train Accuracy')\n"," plt.plot(history.history['val_accuracy'], label='Validation Accuracy')\n"," plt.xlabel('Epochs')\n"," plt.ylabel('Accuracy')\n"," plt.title(f'{model.name} - Training and Validation Accuracy')\n"," plt.legend()\n"," plt.show()\n"," \n"," # Plot loss and validation loss\n"," plt.figure()\n"," plt.plot(history.history['loss'], label='Train Loss')\n"," plt.plot(history.history['val_loss'], label='Validation Loss')\n"," plt.xlabel('Epochs')\n"," plt.ylabel('Loss')\n"," plt.title(f'{model.name} - Training and Validation Loss')\n"," plt.legend()\n"," plt.show()\n","\n"," # Save the model\n"," model.save(f'{model.name}_model.h5')\n"," print(\"Model saved as:\", f'{model.name}_model.h5')\n","\n"," return history, test_loss, test_acc, precision, recall, f1"]},{"cell_type":"code","execution_count":12,"metadata":{"execution":{"iopub.execute_input":"2024-06-02T06:42:29.294500Z","iopub.status.busy":"2024-06-02T06:42:29.294092Z","iopub.status.idle":"2024-06-02T07:15:16.085790Z","shell.execute_reply":"2024-06-02T07:15:16.084842Z","shell.execute_reply.started":"2024-06-02T06:42:29.294470Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Found 22968 images belonging to 7 classes.\n","Found 5741 images belonging to 7 classes.\n","Found 7178 images belonging to 7 classes.\n"]},{"data":{"text/html":["
Model: \"functional_3\"\n","
\n"],"text/plain":["\u001b[1mModel: \"functional_3\"\u001b[0m\n"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n","┃ Layer (type)                     Output Shape                  Param # ┃\n","┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n","│ input_layer_1 (InputLayer)      │ (None, 224, 224, 3)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv1 (Conv2D)                  │ (None, 112, 112, 32)   │           864 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv1_bn (BatchNormalization)   │ (None, 112, 112, 32)   │           128 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv1_relu (ReLU)               │ (None, 112, 112, 32)   │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_1 (DepthwiseConv2D)     │ (None, 112, 112, 32)   │           288 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_1_bn                    │ (None, 112, 112, 32)   │           128 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_1_relu (ReLU)           │ (None, 112, 112, 32)   │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_1 (Conv2D)              │ (None, 112, 112, 64)   │         2,048 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_1_bn                    │ (None, 112, 112, 64)   │           256 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_1_relu (ReLU)           │ (None, 112, 112, 64)   │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pad_2 (ZeroPadding2D)      │ (None, 113, 113, 64)   │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_2 (DepthwiseConv2D)     │ (None, 56, 56, 64)     │           576 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_2_bn                    │ (None, 56, 56, 64)     │           256 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_2_relu (ReLU)           │ (None, 56, 56, 64)     │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_2 (Conv2D)              │ (None, 56, 56, 128)    │         8,192 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_2_bn                    │ (None, 56, 56, 128)    │           512 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_2_relu (ReLU)           │ (None, 56, 56, 128)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_3 (DepthwiseConv2D)     │ (None, 56, 56, 128)    │         1,152 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_3_bn                    │ (None, 56, 56, 128)    │           512 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_3_relu (ReLU)           │ (None, 56, 56, 128)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_3 (Conv2D)              │ (None, 56, 56, 128)    │        16,384 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_3_bn                    │ (None, 56, 56, 128)    │           512 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_3_relu (ReLU)           │ (None, 56, 56, 128)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pad_4 (ZeroPadding2D)      │ (None, 57, 57, 128)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_4 (DepthwiseConv2D)     │ (None, 28, 28, 128)    │         1,152 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_4_bn                    │ (None, 28, 28, 128)    │           512 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_4_relu (ReLU)           │ (None, 28, 28, 128)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_4 (Conv2D)              │ (None, 28, 28, 256)    │        32,768 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_4_bn                    │ (None, 28, 28, 256)    │         1,024 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_4_relu (ReLU)           │ (None, 28, 28, 256)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_5 (DepthwiseConv2D)     │ (None, 28, 28, 256)    │         2,304 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_5_bn                    │ (None, 28, 28, 256)    │         1,024 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_5_relu (ReLU)           │ (None, 28, 28, 256)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_5 (Conv2D)              │ (None, 28, 28, 256)    │        65,536 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_5_bn                    │ (None, 28, 28, 256)    │         1,024 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_5_relu (ReLU)           │ (None, 28, 28, 256)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pad_6 (ZeroPadding2D)      │ (None, 29, 29, 256)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_6 (DepthwiseConv2D)     │ (None, 14, 14, 256)    │         2,304 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_6_bn                    │ (None, 14, 14, 256)    │         1,024 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_6_relu (ReLU)           │ (None, 14, 14, 256)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_6 (Conv2D)              │ (None, 14, 14, 512)    │       131,072 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_6_bn                    │ (None, 14, 14, 512)    │         2,048 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_6_relu (ReLU)           │ (None, 14, 14, 512)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_7 (DepthwiseConv2D)     │ (None, 14, 14, 512)    │         4,608 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_7_bn                    │ (None, 14, 14, 512)    │         2,048 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_7_relu (ReLU)           │ (None, 14, 14, 512)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_7 (Conv2D)              │ (None, 14, 14, 512)    │       262,144 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_7_bn                    │ (None, 14, 14, 512)    │         2,048 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_7_relu (ReLU)           │ (None, 14, 14, 512)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_8 (DepthwiseConv2D)     │ (None, 14, 14, 512)    │         4,608 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_8_bn                    │ (None, 14, 14, 512)    │         2,048 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_8_relu (ReLU)           │ (None, 14, 14, 512)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_8 (Conv2D)              │ (None, 14, 14, 512)    │       262,144 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_8_bn                    │ (None, 14, 14, 512)    │         2,048 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_8_relu (ReLU)           │ (None, 14, 14, 512)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_9 (DepthwiseConv2D)     │ (None, 14, 14, 512)    │         4,608 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_9_bn                    │ (None, 14, 14, 512)    │         2,048 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_9_relu (ReLU)           │ (None, 14, 14, 512)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_9 (Conv2D)              │ (None, 14, 14, 512)    │       262,144 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_9_bn                    │ (None, 14, 14, 512)    │         2,048 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_9_relu (ReLU)           │ (None, 14, 14, 512)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_10 (DepthwiseConv2D)    │ (None, 14, 14, 512)    │         4,608 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_10_bn                   │ (None, 14, 14, 512)    │         2,048 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_10_relu (ReLU)          │ (None, 14, 14, 512)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_10 (Conv2D)             │ (None, 14, 14, 512)    │       262,144 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_10_bn                   │ (None, 14, 14, 512)    │         2,048 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_10_relu (ReLU)          │ (None, 14, 14, 512)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_11 (DepthwiseConv2D)    │ (None, 14, 14, 512)    │         4,608 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_11_bn                   │ (None, 14, 14, 512)    │         2,048 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_11_relu (ReLU)          │ (None, 14, 14, 512)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_11 (Conv2D)             │ (None, 14, 14, 512)    │       262,144 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_11_bn                   │ (None, 14, 14, 512)    │         2,048 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_11_relu (ReLU)          │ (None, 14, 14, 512)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pad_12 (ZeroPadding2D)     │ (None, 15, 15, 512)    │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_12 (DepthwiseConv2D)    │ (None, 7, 7, 512)      │         4,608 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_12_bn                   │ (None, 7, 7, 512)      │         2,048 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_12_relu (ReLU)          │ (None, 7, 7, 512)      │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_12 (Conv2D)             │ (None, 7, 7, 1024)     │       524,288 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_12_bn                   │ (None, 7, 7, 1024)     │         4,096 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_12_relu (ReLU)          │ (None, 7, 7, 1024)     │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_13 (DepthwiseConv2D)    │ (None, 7, 7, 1024)     │         9,216 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_13_bn                   │ (None, 7, 7, 1024)     │         4,096 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_13_relu (ReLU)          │ (None, 7, 7, 1024)     │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_13 (Conv2D)             │ (None, 7, 7, 1024)     │     1,048,576 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_13_bn                   │ (None, 7, 7, 1024)     │         4,096 │\n","│ (BatchNormalization)            │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_13_relu (ReLU)          │ (None, 7, 7, 1024)     │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ global_average_pooling2d_1      │ (None, 1024)           │             0 │\n","│ (GlobalAveragePooling2D)        │                        │               │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_2 (Dropout)             │ (None, 1024)           │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_2 (Dense)                 │ (None, 128)            │       131,200 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_3 (Dropout)             │ (None, 128)            │             0 │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_3 (Dense)                 │ (None, 7)              │           903 │\n","└─────────────────────────────────┴────────────────────────┴───────────────┘\n","
\n"],"text/plain":["┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n","┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n","┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n","│ input_layer_1 (\u001b[38;5;33mInputLayer\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m224\u001b[0m, \u001b[38;5;34m224\u001b[0m, \u001b[38;5;34m3\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv1 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m864\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv1_bn (\u001b[38;5;33mBatchNormalization\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m128\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv1_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_1 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m288\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_1_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m128\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_1_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_1 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_1_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m256\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_1_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pad_2 (\u001b[38;5;33mZeroPadding2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m113\u001b[0m, \u001b[38;5;34m113\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_2 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m576\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_2_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m256\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_2_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_2 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m8,192\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_2_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_2_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_3 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m1,152\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_3_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_3_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_3 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m16,384\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_3_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_3_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pad_4 (\u001b[38;5;33mZeroPadding2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m57\u001b[0m, \u001b[38;5;34m57\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_4 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m1,152\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_4_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_4_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_4 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m32,768\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_4_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m1,024\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_4_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_5 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m2,304\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_5_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m1,024\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_5_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_5 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m65,536\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_5_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m1,024\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_5_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pad_6 (\u001b[38;5;33mZeroPadding2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m29\u001b[0m, \u001b[38;5;34m29\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_6 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m2,304\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_6_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m1,024\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_6_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_6 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m131,072\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_6_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_6_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_7 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m4,608\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_7_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_7_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_7 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m262,144\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_7_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_7_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_8 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m4,608\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_8_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_8_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_8 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m262,144\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_8_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_8_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_9 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m4,608\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_9_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_9_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_9 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m262,144\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_9_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_9_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_10 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m4,608\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_10_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_10_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_10 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m262,144\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_10_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_10_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_11 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m4,608\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_11_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_11_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_11 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m262,144\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_11_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_11_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pad_12 (\u001b[38;5;33mZeroPadding2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m15\u001b[0m, \u001b[38;5;34m15\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_12 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m4,608\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_12_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m2,048\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_12_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_12 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m524,288\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_12_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m4,096\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_12_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_13 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m9,216\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_13_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m4,096\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_dw_13_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_13 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m1,048,576\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_13_bn │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m4,096\u001b[0m │\n","│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ conv_pw_13_relu (\u001b[38;5;33mReLU\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ global_average_pooling2d_1 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","│ (\u001b[38;5;33mGlobalAveragePooling2D\u001b[0m) │ │ │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_2 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m131,200\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout_3 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense_3 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m) │ \u001b[38;5;34m903\u001b[0m │\n","└─────────────────────────────────┴────────────────────────┴───────────────┘\n"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["
 Total params: 3,360,967 (12.82 MB)\n","
\n"],"text/plain":["\u001b[1m Total params: \u001b[0m\u001b[38;5;34m3,360,967\u001b[0m (12.82 MB)\n"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["
 Trainable params: 3,339,079 (12.74 MB)\n","
\n"],"text/plain":["\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m3,339,079\u001b[0m (12.74 MB)\n"]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["
 Non-trainable params: 21,888 (85.50 KB)\n","
\n"],"text/plain":["\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m21,888\u001b[0m (85.50 KB)\n"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Epoch 1/5\n"]},{"name":"stderr","output_type":"stream","text":["/opt/conda/lib/python3.10/site-packages/keras/src/trainers/data_adapters/py_dataset_adapter.py:121: UserWarning: Your `PyDataset` class should call `super().__init__(**kwargs)` in its constructor. `**kwargs` can include `workers`, `use_multiprocessing`, `max_queue_size`. Do not pass these arguments to `fit()`, as they will be ignored.\n"," self._warn_if_super_not_called()\n"]},{"name":"stdout","output_type":"stream","text":["\u001b[1m 1/718\u001b[0m \u001b[37m━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m8:17:31\u001b[0m 42s/step - accuracy: 0.1250 - loss: 4.1364"]},{"name":"stderr","output_type":"stream","text":["WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n","I0000 00:00:1717310632.448896 110 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:1717310632.493334 110 graph_launch.cc:671] Fallback to op-by-op mode because memset node breaks graph update\n"]},{"name":"stdout","output_type":"stream","text":["\u001b[1m641/718\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━━\u001b[0m \u001b[1m43s\u001b[0m 559ms/step - accuracy: 0.2341 - loss: 2.3378"]},{"name":"stderr","output_type":"stream","text":["W0000 00:00:1717310989.989737 110 graph_launch.cc:671] Fallback to op-by-op mode because memset node breaks graph update\n"]},{"name":"stdout","output_type":"stream","text":["\u001b[1m718/718\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 551ms/step - accuracy: 0.2398 - loss: 2.2955"]},{"name":"stderr","output_type":"stream","text":["W0000 00:00:1717311031.222418 113 graph_launch.cc:671] Fallback to op-by-op mode because memset node breaks graph update\n"]},{"name":"stdout","output_type":"stream","text":["\u001b[1m718/718\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m539s\u001b[0m 694ms/step - accuracy: 0.2398 - loss: 2.2950 - val_accuracy: 0.4457 - val_loss: 1.4909 - learning_rate: 1.0000e-04\n","Epoch 2/5\n"]},{"name":"stderr","output_type":"stream","text":["W0000 00:00:1717311130.039388 110 graph_launch.cc:671] Fallback to op-by-op mode because memset node breaks graph update\n"]},{"name":"stdout","output_type":"stream","text":["\u001b[1m718/718\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m347s\u001b[0m 479ms/step - accuracy: 0.4080 - loss: 1.5304 - val_accuracy: 0.5041 - val_loss: 1.3054 - learning_rate: 1.0000e-04\n","Epoch 3/5\n","\u001b[1m718/718\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m318s\u001b[0m 439ms/step - accuracy: 0.4866 - loss: 1.3375 - val_accuracy: 0.5513 - val_loss: 1.2105 - learning_rate: 1.0000e-04\n","Epoch 4/5\n","\u001b[1m718/718\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m318s\u001b[0m 439ms/step - accuracy: 0.5263 - loss: 1.2668 - val_accuracy: 0.5732 - val_loss: 1.1358 - learning_rate: 1.0000e-04\n","Epoch 5/5\n","\u001b[1m718/718\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m327s\u001b[0m 452ms/step - accuracy: 0.5607 - loss: 1.1829 - val_accuracy: 0.5867 - val_loss: 1.0989 - learning_rate: 1.0000e-04\n","\u001b[1m225/225\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m60s\u001b[0m 268ms/step - accuracy: 0.5939 - loss: 1.0816\n"]},{"name":"stderr","output_type":"stream","text":["W0000 00:00:1717312500.481589 112 graph_launch.cc:671] Fallback to op-by-op mode because memset node breaks graph update\n"]},{"name":"stdout","output_type":"stream","text":["\u001b[1m 5/225\u001b[0m \u001b[37m━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m9s\u001b[0m 45ms/step"]},{"name":"stderr","output_type":"stream","text":["W0000 00:00:1717312502.397023 112 graph_launch.cc:671] Fallback to op-by-op mode because memset node breaks graph update\n"]},{"name":"stdout","output_type":"stream","text":["\u001b[1m225/225\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 57ms/step\n"]},{"name":"stderr","output_type":"stream","text":["W0000 00:00:1717312515.061030 112 graph_launch.cc:671] Fallback to op-by-op mode because memset node breaks graph update\n","/opt/conda/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n"," _warn_prf(average, modifier, msg_start, len(result))\n"]},{"name":"stdout","output_type":"stream","text":["Precision: 0.1356886008506111\n","Recall: 0.13814171604267003\n","F1 Score: 0.1310866482189191\n"]},{"data":{"image/png":"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qD179tC+fXvDY7344ovMmTOHF198kcaNG7N7927OnDmT79gdHBxo06YNc+fOJTs7G29vb3799dc8WypnzZrFr7/+Stu2bRkxYgR16tTh2rVrbNiwgT///NNokttBgwaxaNEifv/9dz744IOCPaHlXckNOBOlxYOGwSuKonz99deKv7+/YmFhoQQHByvbt29/4PDlefPm5dqf+4Z8KoqiHDt2TOnVq5dSqVIlxcrKSqlVq5YyZcoUozozZ85UvL29FRMTE6Mh8fcPg1cURYmKilKeffZZw/GaNm2q/PTTT/k6x7yGq544cULp2LGjYmdnp7i4uCgvvfSScuTIkUcOK86PxYsXK61atVJcXFwUMzMzxdXVVenevbvRkNbi8KBh8N26dcuz/g8//KAEBQUpVlZWiq+vr/LBBx8YhgjfOz3Bg4bB5+d5ftz30dq1a5XatWsrlpaWSv369ZUffvhB6dOnj1K7du2HPheKoih79+5VmjVrplhbWyteXl7KhAkTlO3bt+cawt22bVulXr16ufa/P3ZFUZRLly4pPXr0UGxsbBQXFxdlzJgxyrZt2/I1DP5eS5YsUQCladOmue7LyMhQ3nzzTcXT01OxtrZWWrZsqezfvz/X65CfYfCKoijp6enK6NGjlcqVKyu2trZK9+7dlejo6FzP961bt5ShQ4cqLi4uip2dnRIaGqqcOnUqz8/jl19+qfj7+yumpqZG557XtBpxcXGG41pYWCiBgYG5ho4X9H1xr1GjRimAEhUV9cA606dPVwDlyJEjiqLoh56//fbbip+fn2Jubq54eHgozz77rNExcnJylHnz5im1a9dWLCwsFFdXV6VLly7KoUOHDHVu376tDB8+XHF0dFTs7e2Vfv36KdevX3/gMPj4+PhcscXExBi+Kx0dHZW+ffsqV69ezfO8L126pAwaNEhxdXVVLC0tFX9/f+X11183mo7irnr16ikmJiZKTEzMA5+XikijKKWox6oQQhRAcHAwrq6uxd5nS4iy7IknnsDZ2Znw8HC1QylVpA+QEKLUy87OzjVv0q5duzhy5Eiey7cIIfT++ecfIiIi8lx3rqKTFiAhCiEpKemRa4V5eHiUUDTl38WLF+nYsSPPP/88Xl5enDp1is8++wxHR0eOHTv2WKumC1EeHTt2jEOHDvHhhx+SkJDA+fPnsbKyUjusUkU6QQtR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","text/plain":["
"]},"metadata":{},"output_type":"display_data"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABvn0lEQVR4nO3dd3gU5d7G8e+m9wYhBQKhBghIFQWUIh2kWlB5FewFRfRgOyiiHntX7OcIdhSUoihVmoCAIjWhQ+gd0kjfef9Y2BASliQkmezm/lzXXLozszu/ye4mN888zzwWwzAMRERERFyEm9kFiIiIiJQlhRsRERFxKQo3IiIi4lIUbkRERMSlKNyIiIiIS1G4EREREZeicCMiIiIuReFGREREXIrCjYiIiLgUhRu5qNWrV9OhQwf8/f2xWCysXbvW7JKKFBsby4gRI8wuA4Dx48djsVjMLsNUXbp0oUuXLqV67ogRI4iNjS3TeiqbRYsWYbFYWLRoUYUed/fu3VgsFiZNmmRfV5LPq8ViYfz48WVa06V8VkSKonAjDuXk5HDDDTdw4sQJ3n77bb766ivq1KljWj3Lly9n/PjxnDp1yrQaysuSJUsYMGAAMTEx+Pj4EBkZSe/evVm2bFmZHePsH7biLLt37y6z40rpDBgwAD8/P1JTUy+4z7Bhw/Dy8uL48eMVWFnJJSQkMH78+Er1uTobMKdOnWp2KVLGPMwuQCq3HTt2kJSUxGeffcZdd91ldjksX76c5557jhEjRhASElJg25YtW3Bzc968vnXrVtzc3LjvvvuIjIzk5MmTfP3113Tq1IlZs2bRu3fvSz5GeHg4X331VYF1b775Jvv27ePtt98utO+lmDt3bqmf+9lnn2G1Wi/p+K5g2LBh/Pzzz0ybNo3bbrut0PbTp08zY8YMevfuTbVq1Up9nKeffponn3zyUkq9qISEBJ577jm6dOlSqFXuUj4rIkVRuBGHjhw5AlAoSFRG3t7eZpdwSe66665CAfKBBx6gXr16vPPOO2USbvz9/fm///u/AusmT57MyZMnC60/l2EYZGZm4uvrW+xjeXl5lbpOT0/PUj/XlQwYMIDAwEC+/fbbIsPNjBkzSE9PZ9iwYZd0HA8PDzw8zPtzcCmfFZGiOO8/c6XcjRgxgs6dOwNwww03YLFY7NfFL3SN/Py+Emcvg7zxxht8+umn1K9fH29vby6//HJWr15d6PmbN2/mxhtvJDw8HF9fX+Li4hg7dixg6xfw2GOPAVC3bt1Cl0+K6nOzc+dObrjhBsLCwvDz8+PKK69k1qxZBfY52zT9ww8/8OKLL1KrVi18fHzo1q0b27dvL7Dv0qVLueGGG6hduzbe3t7ExMTwyCOPkJGRUdwfa4n4+fkRHh5e4ZfhYmNjufbaa5kzZw5t27bF19eXTz75BICJEydyzTXXUKNGDby9vWnatCkfffRRodc4/zNSkp/zpX6OpkyZQtOmTfHx8aFZs2ZMmzat2P14ZsyYQb9+/YiOjsbb25v69evzwgsvkJeXV+j8mjVrRkJCAl27dsXPz4+aNWvy2muvFXrNffv2MWjQIPz9/alRowaPPPIIWVlZF63F19eXIUOGsGDBAvs/NM717bffEhgYyIABAzhx4gRjxoyhefPmBAQEEBQURJ8+fVi3bt1Fj1NUn5usrCweeeQRwsPD7cfYt29foecmJSXxwAMPEBcXh6+vL9WqVeOGG24ocPlp0qRJ3HDDDQB07drV/t0929+oqN8nR44c4c477yQiIgIfHx9atGjBF198UWCfkn4uSqs4v0cA3n//feLj4/Hz8yM0NJS2bdvy7bff2renpqYyevRoYmNj8fb2pkaNGvTo0YM1a9aUWa1io5YbuaB7772XmjVr8tJLLzFq1Cguv/xyIiIiSvVa3377Lampqdx7771YLBZee+01hgwZws6dO+3/Sl+/fj1XX301np6e3HPPPcTGxrJjxw5+/vlnXnzxRYYMGcLWrVv57rvvePvtt6levTpw4csnhw8fpkOHDpw+fZpRo0ZRrVo1vvjiCwYMGMDUqVMZPHhwgf1feeUV3NzcGDNmDMnJybz22msMGzaMlStX2veZMmUKp0+f5v7776datWqsWrWK999/n3379jFlypRS/WzOl5KSQnZ2NseOHePLL79k48aN/Pvf/y6T1y6JLVu2cPPNN3Pvvfdy9913ExcXB8BHH31EfHw8AwYMwMPDg59//pkHHngAq9XKyJEjL/q6xfk5X0hxPkezZs1i6NChNG/enJdffpmTJ09y5513UrNmzWKd96RJkwgICODRRx8lICCA33//nXHjxpGSksLrr79eYN+TJ0/Su3dvhgwZwo033sjUqVN54oknaN68OX369AEgIyODbt26sWfPHkaNGkV0dDRfffUVv//+e7HqGTZsGF988QU//PADDz74oH39iRMnmDNnDjfffDO+vr5s2rSJ6dOnc8MNN1C3bl0OHz7MJ598QufOnUlISCA6OrpYxzvrrrvu4uuvv+aWW26hQ4cO/P777/Tr16/QfqtXr2b58uXcdNNN1KpVi927d/PRRx/RpUsXEhIS8PPzo1OnTowaNYr33nuPf//73zRp0gTA/t/zZWRk0KVLF7Zv386DDz5I3bp1mTJlCiNGjODUqVM8/PDDBfYvzueitIr7e+Szzz5j1KhRXH/99Tz88MNkZmayfv16Vq5cyS233ALAfffdx9SpU3nwwQdp2rQpx48f548//iAxMZHWrVtfUp1yHkPEgYULFxqAMWXKlALrO3fubHTu3LnQ/sOHDzfq1Kljf7xr1y4DMKpVq2acOHHCvn7GjBkGYPz888/2dZ06dTICAwONpKSkAq9ptVrt///6668bgLFr165Cx65Tp44xfPhw++PRo0cbgLF06VL7utTUVKNu3bpGbGyskZeXV+AcmzRpYmRlZdn3fffddw3A2LBhg33d6dOnCx335ZdfNiwWS4G6n332WaO0X69evXoZgAEYXl5exr333mtkZGSU6rWKo1+/fgXeM8Ow/SwBY/bs2YX2L+pn0KtXL6NevXoF1p3/GSnJz/lSPkfNmzc3atWqZaSmptrXLVq0yAAKnWdRijq/e++91/Dz8zMyMzMLnB9gfPnll/Z1WVlZRmRkpHHdddfZ173zzjsGYPzwww/2denp6UaDBg0MwFi4cKHDenJzc42oqCijffv2BdZ//PHHBmDMmTPHMAzDyMzMtH+mz9q1a5fh7e1tPP/88wXWAcbEiRPt687/vK5du9YAjAceeKDA691yyy0GYDz77LP2dUX9vFasWFHoZzNlypQLnu/5n5WzP7Ovv/7avi47O9to3769ERAQYKSkpBQ4l+J8Lopyod9v5yru75GBAwca8fHxDo8XHBxsjBw50uE+UjZ0WUoqxNChQwkNDbU/vvrqqwFbcy/A0aNHWbJkCXfccQe1a9cu8NzSDqn+9ddfadeuHVdddZV9XUBAAPfccw+7d+8mISGhwP633357gWv/59cIFOhzkp6ezrFjx+jQoQOGYfDPP/+Uqs7zvfLKK8ydO5f//e9/XHnllWRnZ5Obm1smr10SdevWpVevXoXWn/szSE5O5tixY3Tu3JmdO3eSnJx80dctzs/5Qi72OTpw4AAbNmzgtttuIyAgwL5f586dad68+UVfHwqeX2pqKseOHePqq6/m9OnTbN68ucC+AQEBBfoqeXl50a5duwLn8uuvvxIVFcX1119vX+fn58c999xTrHrc3d256aabWLFiRYFLPd9++y0RERF069YNsPU5O9uhPi8vj+PHjxMQEEBcXFyJL3v8+uuvAIwaNarA+tGjRxfa99yfV05ODsePH6dBgwaEhISU+nLLr7/+SmRkJDfffLN9naenJ6NGjSItLY3FixcX2P9in4tLUdzfIyEhIezbt8/h5bCQkBBWrlzJgQMHLrkucUzhRirE+YHl7C+ikydPAvm/hJo1a1Zmx0xKSrJfSjnX2abwpKSkEtUIsGfPHkaMGEFYWBgBAQGEh4fb+yUV5w97cbRs2ZIePXpwxx13MG/ePFatWnXR+/ekpaVx6NAh+3L06NFLrqNu3bpFrl+2bBndu3fH39+fkJAQwsPD7ZfNivMzKM7PubTPPfueNmjQoNBzi1pXlE2bNjF48GCCg4MJCgoiPDzcHmDOP79atWoVCt+hoaEFziUpKYkGDRoU2q+oz+aFnO0wfLb/xr59+1i6dCk33XQT7u7uAFitVt5++20aNmyIt7c31atXJzw8nPXr15f4s5mUlISbmxv169e/aM0ZGRmMGzeOmJiYAsc9depUqb8TSUlJNGzYsNDox0v57pZWcX+PPPHEEwQEBNCuXTsaNmzIyJEjC93G4bXXXmPjxo3ExMTQrl07xo8fXyYBTApTuJFSuVBryvmdLs86+wv4fIZhlFlNl+piNebl5dGjRw9mzZrFE088wfTp05k3b579ZmjlMXTZy8uLAQMG8NNPPznstPzGG28QFRVlXy6//PJLPnZRI6N27NhBt27dOHbsGG+99RazZs1i3rx5PPLII0DxfgaX8lko78/RqVOn6Ny5M+vWreP555/n559/Zt68ebz66qtA4fOrqM91mzZtaNy4Md999x0A3333HYZhFBgl9dJLL/Hoo4/SqVMnvv76a+bMmcO8efOIj48v12H1Dz30EC+++CI33ngjP/zwA3PnzmXevHlUq1atwobzV4bfL02aNGHLli1MnjyZq666ih9//JGrrrqKZ5991r7PjTfeyM6dO3n//feJjo7m9ddfJz4+nt9++63C6qwq1KFYSiU0NLTIf3Gc/y+q4qpXrx4AGzdudLhfSS5R1alThy1bthRaf/bSQklvRrhhwwa2bt3KF198UWBY7rx580r0OiWVkZGBYRikpqZecCj2bbfdVqDZvCRDtkvi559/Jisri5kzZxb41/LChQvL5XgldfY9PX/01YXWnW/RokUcP36cn376iU6dOtnX79q165Jq2rhxI4ZhFPj8FvXZdGTYsGE888wzrF+/nm+//ZaGDRsWCLFTp06la9eu/O9//yvwvFOnTtk735ekZqvVyo4dOwq0WhRV89SpUxk+fDhvvvmmfV1mZmahEX4l/e6uX78eq9VaoPWmtN/dS1GS3yP+/v4MHTqUoUOHkp2dzZAhQ3jxxRd56qmn8PHxASAqKooHHniABx54gCNHjtC6dWtefPFFewd0KRtquZFSqV+/Pps3by5w+WPdunWlvptueHg4nTp14vPPP2fPnj0Ftp37ry9/f3+AYg2N7tu3L6tWrWLFihX2denp6Xz66afExsbStGnTEtV49l+H59ZjGAbvvvtuiV7nQooa6nvq1Cl+/PFHYmJiqFGjxgWfW69ePbp3725fOnbsWCY1na+on0FycjITJ04sl+OVVHR0NM2aNePLL78kLS3Nvn7x4sVs2LDhos8v6vyys7P58MMPS11T3759OXDgQIG74J4+fZpPP/20RK9ztpVm3LhxrF27ttC9bdzd3Qu1VEyZMoX9+/eXuOazf2jfe++9AuvfeeedQvsWddz333+/UCtuSb+7hw4d4vvvv7evy83N5f333ycgIMB+KbgiFPf3yPl3iPby8qJp06YYhkFOTg55eXmFLtPVqFGD6OjoYt0WQEpGLTdSKnfccQdvvfUWvXr14s477+TIkSN8/PHHxMfHk5KSUqrXfO+997jqqqto3bo199xzD3Xr1mX37t3MmjXLPp9VmzZtABg7diw33XQTnp6e9O/f3/6L81xPPvkk3333HX369GHUqFGEhYXxxRdfsGvXLn788ccS3824cePG1K9fnzFjxrB//36CgoL48ccfy+S6Ptj+oNSqVYsrrriCGjVqsGfPHiZOnMiBAwcK/JI3U8+ePfHy8qJ///7ce++9pKWl8dlnn1GjRg0OHjxodnmA7fLMwIED6dixI7fffjsnT55kwoQJNGvWrEDgKUqHDh0IDQ1l+PDhjBo1CovFwldf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","text/plain":["
"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Model saved as: functional_3_model.h5\n"]}],"source":["mobilenet_model = create_model(MobileNet(weights='imagenet', include_top=False, input_shape=(224, 224, 3)), 7)\n","mobilenet_model.compile(optimizer=Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])\n","\n","train_gen, val_gen, test_gen = get_generators((224, 224))\n","mobilenet_history, mobilenet_test_loss, mobilenet_test_acc, mobilenet_precision, mobilenet_recall, mobilenet_f1 = train_and_evaluate(mobilenet_model, train_gen, val_gen, test_gen)"]},{"cell_type":"code","execution_count":14,"metadata":{"execution":{"iopub.execute_input":"2024-06-02T07:17:49.302943Z","iopub.status.busy":"2024-06-02T07:17:49.302601Z","iopub.status.idle":"2024-06-02T07:17:49.623755Z","shell.execute_reply":"2024-06-02T07:17:49.622614Z","shell.execute_reply.started":"2024-06-02T07:17:49.302918Z"},"trusted":true},"outputs":[],"source":["mobilenet_model.save('mobilenet.h5')"]}],"metadata":{"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"datasetId":786787,"sourceId":1351797,"sourceType":"datasetVersion"}],"dockerImageVersionId":30716,"isGpuEnabled":true,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.13"}},"nbformat":4,"nbformat_minor":4} diff --git a/fer.ipynb b/fer.ipynb new file mode 100644 index 000000000..3a7c863e3 --- /dev/null +++ b/fer.ipynb @@ -0,0 +1,576 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "from tensorflow.keras.models import Sequential,load_model\n", + "from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, BatchNormalization\n", + "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n", + "from tensorflow.keras.optimizers import Adam\n", + "from keras.initializers import RandomNormal\n", + "import numpy as np\n", + "from sklearn.metrics import classification_report, confusion_matrix\n", + "import PIL" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num GPUs Available: [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]\n" + ] + } + ], + "source": [ + "print(\"Num GPUs Available: \", tf.config.list_physical_devices('GPU'))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Preprocessing Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "img_width, img_height = 48, 48\n", + "batch_size = 32\n", + "\n", + "# Define the data directories\n", + "train_data_dir = 'images/train'\n", + "validation_data_dir = 'images/validation'" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 7178 images belonging to 7 classes.\n", + "Found 3668 images belonging to 7 classes.\n" + ] + } + ], + "source": [ + "data_gen = ImageDataGenerator(\n", + " rescale=1.0 / 255, # Normalize pixel values to [0, 1] by scaling by 255\n", + " rotation_range=20, \n", + " width_shift_range=0.2, \n", + " height_shift_range=0.2, \n", + " shear_range=0.2, \n", + " zoom_range=0.2, \n", + " vertical_flip=False,\n", + " horizontal_flip=True\n", + ")\n", + "\n", + "train_gen = data_gen.flow_from_directory(\n", + " train_data_dir,\n", + " target_size=(img_width, img_height),\n", + " batch_size=batch_size,\n", + " class_mode='categorical',\n", + ")\n", + "\n", + "val_gen = data_gen.flow_from_directory(\n", + " validation_data_dir,\n", + " target_size=(img_width, img_height),\n", + " batch_size=batch_size,\n", + " class_mode='categorical',\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Model" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Constructing CNN structure\n", + "model = Sequential()\n", + "\n", + "# 1st convolution layer\n", + "model.add(Conv2D(64, (3, 3), activation='relu', padding = 'same', input_shape=(img_width, img_height, 3), bias_initializer=RandomNormal(stddev=1), kernel_initializer=RandomNormal(stddev=1)))\n", + "model.add(Conv2D(64, (3, 3), activation='relu', padding = 'same', input_shape=(img_width, img_height, 3), bias_initializer=RandomNormal(stddev=1), kernel_initializer=RandomNormal(stddev=1)))\n", + "model.add(BatchNormalization())\n", + "model.add(MaxPooling2D(pool_size=(3,3), strides=(2, 2)))\n", + "model.add(Dropout(0.25))\n", + "\n", + "# 3rd convolution layer\n", + "model.add(Conv2D(64, (3, 3), activation='relu', padding = 'same', bias_initializer=RandomNormal(stddev=1), kernel_initializer=RandomNormal(stddev=1)))\n", + "model.add(Conv2D(64, (3, 3), activation='relu', padding = 'same', bias_initializer=RandomNormal(stddev=1), kernel_initializer=RandomNormal(stddev=1)))\n", + "model.add(BatchNormalization())\n", + "model.add(MaxPooling2D(pool_size=(3,3), strides=(2, 2)))\n", + "model.add(Dropout(0.25))\n", + " \n", + "# 5th convolution layer\n", + "model.add(Conv2D(128, (3, 3), activation='relu', padding = 'same', bias_initializer=RandomNormal(stddev=1), kernel_initializer=RandomNormal(stddev=1)))\n", + "model.add(Conv2D(128, (3, 3), activation='relu', padding = 'same', bias_initializer=RandomNormal(stddev=1), kernel_initializer=RandomNormal(stddev=1)))\n", + "model.add(BatchNormalization())\n", + "model.add(MaxPooling2D(pool_size=(3,3), strides=(2, 2)))\n", + "model.add(Dropout(0.25))\n", + "\n", + "# 7th convolution layer\n", + "model.add(Conv2D(256, (3, 3), activation='relu', padding = 'same', bias_initializer=RandomNormal(stddev=1), kernel_initializer=RandomNormal(stddev=1)))\n", + "model.add(Conv2D(256, (3, 3), activation='relu', padding = 'same', bias_initializer=RandomNormal(stddev=1), kernel_initializer=RandomNormal(stddev=1)))\n", + "model.add(BatchNormalization())\n", + "model.add(MaxPooling2D(pool_size=(3,3), strides=(2, 2)))\n", + "model.add(Dropout(0.5))\n", + "\n", + "\n", + "model.add(Flatten())\n", + "# Fully connected layers\n", + "model.add(Dense(2048, activation='relu'))\n", + "model.add(Dropout(0.5))\n", + "model.add(Dense(7, activation='softmax'))\n", + "\n", + "model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " conv2d (Conv2D) (None, 48, 48, 64) 1792 \n", + " \n", + " conv2d_1 (Conv2D) (None, 48, 48, 64) 36928 \n", + " \n", + " batch_normalization (BatchN (None, 48, 48, 64) 256 \n", + " ormalization) \n", + " \n", + " max_pooling2d (MaxPooling2D (None, 23, 23, 64) 0 \n", + " ) \n", + " \n", + " dropout (Dropout) (None, 23, 23, 64) 0 \n", + " \n", + " conv2d_2 (Conv2D) (None, 23, 23, 64) 36928 \n", + " \n", + " conv2d_3 (Conv2D) (None, 23, 23, 64) 36928 \n", + " \n", + " batch_normalization_1 (Batc (None, 23, 23, 64) 256 \n", + " hNormalization) \n", + " \n", + " max_pooling2d_1 (MaxPooling (None, 11, 11, 64) 0 \n", + " 2D) \n", + " \n", + " dropout_1 (Dropout) (None, 11, 11, 64) 0 \n", + " \n", + " conv2d_4 (Conv2D) (None, 11, 11, 128) 73856 \n", + " \n", + " conv2d_5 (Conv2D) (None, 11, 11, 128) 147584 \n", + " \n", + " batch_normalization_2 (Batc (None, 11, 11, 128) 512 \n", + " hNormalization) \n", + " \n", + " max_pooling2d_2 (MaxPooling (None, 5, 5, 128) 0 \n", + " 2D) \n", + " \n", + " dropout_2 (Dropout) (None, 5, 5, 128) 0 \n", + " \n", + " conv2d_6 (Conv2D) (None, 5, 5, 256) 295168 \n", + " \n", + " conv2d_7 (Conv2D) (None, 5, 5, 256) 590080 \n", + " \n", + " batch_normalization_3 (Batc (None, 5, 5, 256) 1024 \n", + " hNormalization) \n", + " \n", + " max_pooling2d_3 (MaxPooling (None, 2, 2, 256) 0 \n", + " 2D) \n", + " \n", + " dropout_3 (Dropout) (None, 2, 2, 256) 0 \n", + " \n", + " flatten (Flatten) (None, 1024) 0 \n", + " \n", + " dense (Dense) (None, 2048) 2099200 \n", + " \n", + " dropout_4 (Dropout) (None, 2048) 0 \n", + " \n", + " dense_1 (Dense) (None, 7) 14343 \n", + " \n", + "=================================================================\n", + "Total params: 3,334,855\n", + "Trainable params: 3,333,831\n", + "Non-trainable params: 1,024\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "model.summary()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/100\n", + "224/224 [==============================] - 41s 164ms/step - loss: 2.7620 - accuracy: 0.1919 - val_loss: 1.8154 - val_accuracy: 0.2593\n", + "Epoch 2/100\n", + "224/224 [==============================] - 11s 51ms/step - loss: 1.8594 - accuracy: 0.2112 - val_loss: 1.9707 - val_accuracy: 0.2612\n", + "Epoch 3/100\n", + "224/224 [==============================] - 12s 52ms/step - loss: 1.8381 - accuracy: 0.2267 - val_loss: 1.9679 - val_accuracy: 0.2664\n", + "Epoch 4/100\n", + "224/224 [==============================] - 12s 51ms/step - loss: 1.8361 - accuracy: 0.2291 - val_loss: 1.9646 - val_accuracy: 0.2522\n", + "Epoch 5/100\n", + "224/224 [==============================] - 12s 51ms/step - loss: 1.8256 - accuracy: 0.2393 - val_loss: 1.9623 - val_accuracy: 0.2596\n", + "Epoch 6/100\n", + "224/224 [==============================] - 11s 51ms/step - loss: 1.8248 - accuracy: 0.2319 - val_loss: 1.9667 - val_accuracy: 0.2527\n", + "Epoch 7/100\n", + "224/224 [==============================] - 11s 51ms/step - loss: 1.8238 - accuracy: 0.2372 - val_loss: 2.1228 - val_accuracy: 0.2643\n", + "Epoch 8/100\n", + "224/224 [==============================] - 11s 51ms/step - loss: 1.8182 - accuracy: 0.2442 - val_loss: 2.2228 - val_accuracy: 0.2623\n", + "Epoch 9/100\n", + "224/224 [==============================] - 11s 51ms/step - loss: 1.8167 - accuracy: 0.2473 - val_loss: 2.5336 - val_accuracy: 0.2621\n", + "Epoch 10/100\n", + "224/224 [==============================] - 12s 52ms/step - loss: 1.8209 - accuracy: 0.2408 - val_loss: 2.3624 - val_accuracy: 0.2407\n", + "Epoch 11/100\n", + "224/224 [==============================] - 11s 50ms/step - loss: 1.8088 - accuracy: 0.2428 - val_loss: 2.3629 - val_accuracy: 0.2270\n", + "Epoch 12/100\n", + "224/224 [==============================] - 11s 51ms/step - loss: 1.8118 - accuracy: 0.2464 - val_loss: 2.6603 - val_accuracy: 0.2505\n", + "Epoch 13/100\n", + "224/224 [==============================] - 11s 51ms/step - loss: 1.8092 - accuracy: 0.2394 - val_loss: 1.9891 - val_accuracy: 0.2673\n", + "Epoch 14/100\n", + "224/224 [==============================] - 11s 51ms/step - loss: 1.8068 - accuracy: 0.2415 - val_loss: 2.5597 - val_accuracy: 0.2404\n", + "Epoch 15/100\n", + "224/224 [==============================] - 12s 52ms/step - loss: 1.8027 - accuracy: 0.2520 - val_loss: 2.4137 - val_accuracy: 0.2571\n", + "Epoch 16/100\n", + "224/224 [==============================] - 12s 52ms/step - loss: 1.8010 - accuracy: 0.2498 - val_loss: 2.0892 - val_accuracy: 0.2574\n", + "Epoch 17/100\n", + "224/224 [==============================] - 12s 51ms/step - loss: 1.8042 - accuracy: 0.2522 - val_loss: 2.4665 - val_accuracy: 0.2407\n", + "Epoch 18/100\n", + "224/224 [==============================] - 12s 52ms/step - loss: 1.7946 - accuracy: 0.2566 - val_loss: 2.2104 - val_accuracy: 0.2489\n", + "Epoch 19/100\n", + "224/224 [==============================] - 12s 52ms/step - loss: 1.7936 - accuracy: 0.2599 - val_loss: 2.6890 - val_accuracy: 0.2407\n", + "Epoch 20/100\n", + "224/224 [==============================] - 12s 53ms/step - loss: 1.7927 - accuracy: 0.2587 - val_loss: 2.0322 - val_accuracy: 0.2695\n", + "Epoch 21/100\n", + "224/224 [==============================] - 14s 61ms/step - loss: 1.7899 - accuracy: 0.2565 - val_loss: 1.7930 - val_accuracy: 0.2887\n", + "Epoch 22/100\n", + "224/224 [==============================] - 13s 57ms/step - loss: 1.7826 - accuracy: 0.2582 - val_loss: 2.3420 - val_accuracy: 0.2651\n", + "Epoch 23/100\n", + "224/224 [==============================] - 13s 56ms/step - loss: 1.7818 - accuracy: 0.2585 - val_loss: 2.1888 - val_accuracy: 0.2700\n", + "Epoch 24/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.7712 - accuracy: 0.2614 - val_loss: 2.4069 - val_accuracy: 0.2588\n", + "Epoch 25/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.7735 - accuracy: 0.2663 - val_loss: 1.8094 - val_accuracy: 0.2717\n", + "Epoch 26/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.7682 - accuracy: 0.2629 - val_loss: 2.0858 - val_accuracy: 0.2818\n", + "Epoch 27/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.7643 - accuracy: 0.2704 - val_loss: 2.2582 - val_accuracy: 0.2486\n", + "Epoch 28/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.7653 - accuracy: 0.2678 - val_loss: 2.0693 - val_accuracy: 0.3067\n", + "Epoch 29/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.7586 - accuracy: 0.2709 - val_loss: 2.0454 - val_accuracy: 0.3015\n", + "Epoch 30/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.7586 - accuracy: 0.2673 - val_loss: 2.8943 - val_accuracy: 0.2785\n", + "Epoch 31/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.7501 - accuracy: 0.2757 - val_loss: 2.1618 - val_accuracy: 0.2777\n", + "Epoch 32/100\n", + "224/224 [==============================] - 13s 56ms/step - loss: 1.7432 - accuracy: 0.2830 - val_loss: 1.7757 - val_accuracy: 0.3152\n", + "Epoch 33/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.7509 - accuracy: 0.2807 - val_loss: 2.6545 - val_accuracy: 0.2873\n", + "Epoch 34/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.7423 - accuracy: 0.2813 - val_loss: 2.0416 - val_accuracy: 0.3163\n", + "Epoch 35/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.7447 - accuracy: 0.2793 - val_loss: 1.8738 - val_accuracy: 0.3166\n", + "Epoch 36/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.7353 - accuracy: 0.2802 - val_loss: 1.8782 - val_accuracy: 0.3207\n", + "Epoch 37/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.7418 - accuracy: 0.2817 - val_loss: 2.0726 - val_accuracy: 0.3100\n", + "Epoch 38/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.7433 - accuracy: 0.2845 - val_loss: 1.8875 - val_accuracy: 0.3265\n", + "Epoch 39/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.7245 - accuracy: 0.2869 - val_loss: 2.1752 - val_accuracy: 0.3166\n", + "Epoch 40/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.7243 - accuracy: 0.2874 - val_loss: 2.0050 - val_accuracy: 0.2950\n", + "Epoch 41/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.7228 - accuracy: 0.2915 - val_loss: 1.7682 - val_accuracy: 0.3309\n", + "Epoch 42/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.7149 - accuracy: 0.2964 - val_loss: 2.3325 - val_accuracy: 0.2944\n", + "Epoch 43/100\n", + "224/224 [==============================] - 13s 56ms/step - loss: 1.7137 - accuracy: 0.2951 - val_loss: 2.0370 - val_accuracy: 0.2346\n", + "Epoch 44/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.7198 - accuracy: 0.2891 - val_loss: 2.1537 - val_accuracy: 0.3251\n", + "Epoch 45/100\n", + "224/224 [==============================] - 12s 53ms/step - loss: 1.7108 - accuracy: 0.2978 - val_loss: 2.0362 - val_accuracy: 0.3229\n", + "Epoch 46/100\n", + "224/224 [==============================] - 12s 53ms/step - loss: 1.7112 - accuracy: 0.2921 - val_loss: 1.7233 - val_accuracy: 0.3300\n", + "Epoch 47/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6945 - accuracy: 0.2943 - val_loss: 1.6787 - val_accuracy: 0.3342\n", + "Epoch 48/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.7037 - accuracy: 0.2918 - val_loss: 2.0482 - val_accuracy: 0.3207\n", + "Epoch 49/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.7037 - accuracy: 0.2997 - val_loss: 2.0372 - val_accuracy: 0.3128\n", + "Epoch 50/100\n", + "224/224 [==============================] - 12s 53ms/step - loss: 1.6873 - accuracy: 0.3045 - val_loss: 1.7681 - val_accuracy: 0.3374\n", + "Epoch 51/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6962 - accuracy: 0.3027 - val_loss: 2.3695 - val_accuracy: 0.3136\n", + "Epoch 52/100\n", + "224/224 [==============================] - 12s 53ms/step - loss: 1.6795 - accuracy: 0.3016 - val_loss: 1.8403 - val_accuracy: 0.3331\n", + "Epoch 53/100\n", + "224/224 [==============================] - 13s 56ms/step - loss: 1.6979 - accuracy: 0.3035 - val_loss: 1.9909 - val_accuracy: 0.3385\n", + "Epoch 54/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.6830 - accuracy: 0.3126 - val_loss: 1.8664 - val_accuracy: 0.3522\n", + "Epoch 55/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6736 - accuracy: 0.3144 - val_loss: 1.7799 - val_accuracy: 0.3643\n", + "Epoch 56/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6712 - accuracy: 0.3193 - val_loss: 1.6807 - val_accuracy: 0.3544\n", + "Epoch 57/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6608 - accuracy: 0.3284 - val_loss: 2.0218 - val_accuracy: 0.3624\n", + "Epoch 58/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6456 - accuracy: 0.3361 - val_loss: 1.6542 - val_accuracy: 0.3684\n", + "Epoch 59/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.6526 - accuracy: 0.3417 - val_loss: 1.8824 - val_accuracy: 0.3536\n", + "Epoch 60/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6496 - accuracy: 0.3346 - val_loss: 1.9397 - val_accuracy: 0.3679\n", + "Epoch 61/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6415 - accuracy: 0.3356 - val_loss: 1.7873 - val_accuracy: 0.3731\n", + "Epoch 62/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6353 - accuracy: 0.3452 - val_loss: 1.6715 - val_accuracy: 0.3917\n", + "Epoch 63/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6369 - accuracy: 0.3484 - val_loss: 1.9562 - val_accuracy: 0.3668\n", + "Epoch 64/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6344 - accuracy: 0.3469 - val_loss: 1.7062 - val_accuracy: 0.4038\n", + "Epoch 65/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.6211 - accuracy: 0.3503 - val_loss: 1.8709 - val_accuracy: 0.3802\n", + "Epoch 66/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6167 - accuracy: 0.3547 - val_loss: 1.7288 - val_accuracy: 0.3884\n", + "Epoch 67/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6172 - accuracy: 0.3587 - val_loss: 1.5225 - val_accuracy: 0.4158\n", + "Epoch 68/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.6040 - accuracy: 0.3567 - val_loss: 2.1955 - val_accuracy: 0.3805\n", + "Epoch 69/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.6126 - accuracy: 0.3624 - val_loss: 1.9707 - val_accuracy: 0.4208\n", + "Epoch 70/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.5887 - accuracy: 0.3678 - val_loss: 1.7683 - val_accuracy: 0.4191\n", + "Epoch 71/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.5915 - accuracy: 0.3641 - val_loss: 1.8595 - val_accuracy: 0.4049\n", + "Epoch 72/100\n", + "224/224 [==============================] - 12s 55ms/step - loss: 1.5953 - accuracy: 0.3683 - val_loss: 2.2726 - val_accuracy: 0.4134\n", + "Epoch 73/100\n", + "224/224 [==============================] - 14s 64ms/step - loss: 1.5906 - accuracy: 0.3673 - val_loss: 1.5561 - val_accuracy: 0.4411\n", + "Epoch 74/100\n", + "224/224 [==============================] - 14s 63ms/step - loss: 1.5749 - accuracy: 0.3799 - val_loss: 1.7653 - val_accuracy: 0.4285\n", + "Epoch 75/100\n", + "224/224 [==============================] - 15s 66ms/step - loss: 1.5665 - accuracy: 0.3792 - val_loss: 1.6685 - val_accuracy: 0.4290\n", + "Epoch 76/100\n", + "224/224 [==============================] - 14s 64ms/step - loss: 1.5615 - accuracy: 0.3894 - val_loss: 1.9753 - val_accuracy: 0.4339\n", + "Epoch 77/100\n", + "224/224 [==============================] - 20s 87ms/step - loss: 1.5550 - accuracy: 0.3910 - val_loss: 1.6546 - val_accuracy: 0.4424\n", + "Epoch 78/100\n", + "224/224 [==============================] - 16s 72ms/step - loss: 1.5604 - accuracy: 0.3847 - val_loss: 1.8696 - val_accuracy: 0.4361\n", + "Epoch 79/100\n", + "224/224 [==============================] - 17s 75ms/step - loss: 1.5509 - accuracy: 0.3953 - val_loss: 5.4721 - val_accuracy: 0.3882\n", + "Epoch 80/100\n", + "224/224 [==============================] - 16s 72ms/step - loss: 1.5385 - accuracy: 0.3901 - val_loss: 1.5185 - val_accuracy: 0.4641\n", + "Epoch 81/100\n", + "224/224 [==============================] - 13s 60ms/step - loss: 1.5364 - accuracy: 0.3932 - val_loss: 1.8004 - val_accuracy: 0.4383\n", + "Epoch 82/100\n", + "224/224 [==============================] - 14s 62ms/step - loss: 1.5426 - accuracy: 0.3978 - val_loss: 2.1889 - val_accuracy: 0.4556\n", + "Epoch 83/100\n", + "224/224 [==============================] - 14s 62ms/step - loss: 1.5337 - accuracy: 0.3941 - val_loss: 1.5741 - val_accuracy: 0.4359\n", + "Epoch 84/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.5233 - accuracy: 0.4071 - val_loss: 3.2009 - val_accuracy: 0.4010\n", + "Epoch 85/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.5345 - accuracy: 0.3955 - val_loss: 1.4831 - val_accuracy: 0.4718\n", + "Epoch 86/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.5216 - accuracy: 0.4061 - val_loss: 2.5293 - val_accuracy: 0.4438\n", + "Epoch 87/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.5290 - accuracy: 0.4046 - val_loss: 1.6855 - val_accuracy: 0.4285\n", + "Epoch 88/100\n", + "224/224 [==============================] - 12s 54ms/step - loss: 1.5048 - accuracy: 0.4085 - val_loss: 1.5214 - val_accuracy: 0.4501\n", + "Epoch 89/100\n", + "224/224 [==============================] - 13s 56ms/step - loss: 1.5151 - accuracy: 0.4120 - val_loss: 1.8382 - val_accuracy: 0.4616\n", + "Epoch 90/100\n", + "224/224 [==============================] - 13s 57ms/step - loss: 1.5066 - accuracy: 0.4121 - val_loss: 1.4686 - val_accuracy: 0.4427\n", + "Epoch 91/100\n", + "224/224 [==============================] - 13s 60ms/step - loss: 1.5032 - accuracy: 0.4156 - val_loss: 1.4975 - val_accuracy: 0.4627\n", + "Epoch 92/100\n", + "224/224 [==============================] - 15s 68ms/step - loss: 1.4953 - accuracy: 0.4134 - val_loss: 1.6177 - val_accuracy: 0.4646\n", + "Epoch 93/100\n", + "224/224 [==============================] - 13s 58ms/step - loss: 1.4835 - accuracy: 0.4239 - val_loss: 1.7202 - val_accuracy: 0.4668\n", + "Epoch 94/100\n", + "224/224 [==============================] - 13s 57ms/step - loss: 1.4867 - accuracy: 0.4209 - val_loss: 1.5594 - val_accuracy: 0.4770\n", + "Epoch 95/100\n", + "224/224 [==============================] - 13s 59ms/step - loss: 1.4837 - accuracy: 0.4180 - val_loss: 1.4603 - val_accuracy: 0.4737\n", + "Epoch 96/100\n", + "224/224 [==============================] - 13s 57ms/step - loss: 1.4784 - accuracy: 0.4263 - val_loss: 2.2993 - val_accuracy: 0.4583\n", + "Epoch 97/100\n", + "224/224 [==============================] - 13s 57ms/step - loss: 1.4775 - accuracy: 0.4200 - val_loss: 1.4642 - val_accuracy: 0.4860\n", + "Epoch 98/100\n", + "224/224 [==============================] - 13s 57ms/step - loss: 1.4549 - accuracy: 0.4362 - val_loss: 1.3782 - val_accuracy: 0.4846\n", + "Epoch 99/100\n", + "224/224 [==============================] - 13s 57ms/step - loss: 1.4740 - accuracy: 0.4221 - val_loss: 1.4448 - val_accuracy: 0.4893\n", + "Epoch 100/100\n", + "224/224 [==============================] - 13s 57ms/step - loss: 1.4584 - accuracy: 0.4334 - val_loss: 1.6798 - val_accuracy: 0.4852\n" + ] + } + ], + "source": [ + "# Train the model\n", + "epochs = 100\n", + "history = model.fit(\n", + " train_gen,\n", + " steps_per_epoch=train_gen.samples // batch_size,\n", + " validation_data=val_gen,\n", + " validation_steps=val_gen.samples // batch_size,\n", + " epochs=epochs)\n", + "\n", + "model.save(\"cnnModel.h5\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "model2 = load_model('cnnModel.h5')" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "225/225 [==============================] - 9s 37ms/step - loss: 1.6961 - accuracy: 0.4638\n", + "Loss: 1.6960623264312744\n", + "Accuracy: 0.46377819776535034\n" + ] + } + ], + "source": [ + "scores = model2.evaluate(train_gen, batch_size=1024)\n", + "print(\"Loss: \" + str(scores[0]))\n", + "print(\"Accuracy: \" + str(scores[1]))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "115/115 [==============================] - 4s 35ms/step\n", + "Confusion Matrix\n", + "[[ 3 0 11 97 80 124 68]\n", + " [ 0 0 0 15 5 18 8]\n", + " [ 6 0 17 109 114 154 69]\n", + " [ 14 0 24 234 246 317 144]\n", + " [ 7 0 24 175 148 236 103]\n", + " [ 10 0 24 159 168 214 97]\n", + " [ 7 0 18 110 102 133 56]]\n", + "Classification Report\n", + " precision recall f1-score support\n", + "\n", + " Angry 0.06 0.01 0.01 383\n", + " Disgust 0.00 0.00 0.00 46\n", + " Fear 0.14 0.04 0.06 469\n", + " Happy 0.26 0.24 0.25 979\n", + " Sad 0.17 0.21 0.19 693\n", + " Surprise 0.18 0.32 0.23 672\n", + " Neutral 0.10 0.13 0.12 426\n", + "\n", + " accuracy 0.18 3668\n", + " macro avg 0.13 0.14 0.12 3668\n", + "weighted avg 0.17 0.18 0.17 3668\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\techn\\anaconda3\\envs\\gpu_fix\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, msg_start, len(result))\n", + "c:\\Users\\techn\\anaconda3\\envs\\gpu_fix\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, msg_start, len(result))\n", + "c:\\Users\\techn\\anaconda3\\envs\\gpu_fix\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, msg_start, len(result))\n" + ] + } + ], + "source": [ + "Y_pred = model.predict(val_gen)\n", + "y_pred = np.argmax(Y_pred, axis=1)\n", + "print('Confusion Matrix')\n", + "print(confusion_matrix(val_gen.classes, y_pred))\n", + "print('Classification Report')\n", + "target_names = ['Angry', 'Disgust', 'Fear', 'Happy', 'Sad', 'Surprise', 'Neutral']\n", + "print(classification_report(val_gen.classes, y_pred, target_names=target_names))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "gpu_fix", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/mobilenet.h5 b/mobilenet.h5 new file mode 100644 index 000000000..36f383b43 Binary files /dev/null and b/mobilenet.h5 differ diff --git a/packages.txt b/packages.txt new file mode 100644 index 000000000..a72c3b87c --- /dev/null +++ b/packages.txt @@ -0,0 +1 @@ +libgl1-mesa-glx \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..90ff1beea --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +tensorflow +scipy +pillow +streamlit +opencv-python-headless +numpy \ No newline at end of file