diff --git "a/DenseNet-4.4.25.ipynb" "b/DenseNet-4.4.25.ipynb" new file mode 100644--- /dev/null +++ "b/DenseNet-4.4.25.ipynb" @@ -0,0 +1,2063 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "a087caa4-de40-432f-a27a-911b3fe94b14", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting tensorflow[and-cuda]\n", + " Downloading tensorflow-2.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.1 kB)\n", + "Collecting absl-py>=1.0.0 (from tensorflow[and-cuda])\n", + " Downloading absl_py-2.2.2-py3-none-any.whl.metadata (2.6 kB)\n", + "Collecting astunparse>=1.6.0 (from tensorflow[and-cuda])\n", + " Downloading astunparse-1.6.3-py2.py3-none-any.whl.metadata (4.4 kB)\n", + "Collecting flatbuffers>=24.3.25 (from tensorflow[and-cuda])\n", + " Downloading flatbuffers-25.2.10-py2.py3-none-any.whl.metadata (875 bytes)\n", + "Collecting gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 (from tensorflow[and-cuda])\n", + " Downloading gast-0.6.0-py3-none-any.whl.metadata (1.3 kB)\n", + "Collecting google-pasta>=0.1.1 (from tensorflow[and-cuda])\n", + " Downloading google_pasta-0.2.0-py3-none-any.whl.metadata (814 bytes)\n", + "Collecting libclang>=13.0.0 (from tensorflow[and-cuda])\n", + " Downloading libclang-18.1.1-py2.py3-none-manylinux2010_x86_64.whl.metadata (5.2 kB)\n", + "Collecting opt-einsum>=2.3.2 (from tensorflow[and-cuda])\n", + " Downloading opt_einsum-3.4.0-py3-none-any.whl.metadata (6.3 kB)\n", + "Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from tensorflow[and-cuda]) (23.2)\n", + "Collecting protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0dev,>=3.20.3 (from tensorflow[and-cuda])\n", + " Downloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl.metadata (592 bytes)\n", + "Requirement already satisfied: requests<3,>=2.21.0 in /usr/local/lib/python3.10/dist-packages (from tensorflow[and-cuda]) (2.31.0)\n", + "Requirement already satisfied: setuptools in /usr/local/lib/python3.10/dist-packages (from tensorflow[and-cuda]) (68.2.2)\n", + "Requirement already satisfied: six>=1.12.0 in /usr/lib/python3/dist-packages (from tensorflow[and-cuda]) (1.16.0)\n", + "Collecting termcolor>=1.1.0 (from tensorflow[and-cuda])\n", + " Downloading termcolor-3.0.1-py3-none-any.whl.metadata (6.1 kB)\n", + "Requirement already satisfied: typing-extensions>=3.6.6 in /usr/local/lib/python3.10/dist-packages (from tensorflow[and-cuda]) (4.4.0)\n", + "Collecting wrapt>=1.11.0 (from tensorflow[and-cuda])\n", + " Downloading wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.4 kB)\n", + "Collecting grpcio<2.0,>=1.24.3 (from tensorflow[and-cuda])\n", + " Downloading grpcio-1.71.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.8 kB)\n", + "Collecting tensorboard~=2.19.0 (from tensorflow[and-cuda])\n", + " Downloading tensorboard-2.19.0-py3-none-any.whl.metadata (1.8 kB)\n", + "Collecting keras>=3.5.0 (from tensorflow[and-cuda])\n", + " Downloading keras-3.9.2-py3-none-any.whl.metadata (6.1 kB)\n", + "Collecting numpy<2.2.0,>=1.26.0 (from tensorflow[and-cuda])\n", + " Downloading numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.0/62.0 kB\u001b[0m \u001b[31m1.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting h5py>=3.11.0 (from tensorflow[and-cuda])\n", + " Downloading h5py-3.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.5 kB)\n", + "Collecting ml-dtypes<1.0.0,>=0.5.1 (from tensorflow[and-cuda])\n", + " Downloading ml_dtypes-0.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (21 kB)\n", + "Collecting tensorflow-io-gcs-filesystem>=0.23.1 (from tensorflow[and-cuda])\n", + " Downloading tensorflow_io_gcs_filesystem-0.37.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n", + "Collecting nvidia-cublas-cu12==12.5.3.2 (from tensorflow[and-cuda])\n", + " Downloading nvidia_cublas_cu12-12.5.3.2-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-cuda-cupti-cu12==12.5.82 (from tensorflow[and-cuda])\n", + " Downloading nvidia_cuda_cupti_cu12-12.5.82-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "Collecting nvidia-cuda-nvcc-cu12==12.5.82 (from tensorflow[and-cuda])\n", + " Downloading nvidia_cuda_nvcc_cu12-12.5.82-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-cuda-nvrtc-cu12==12.5.82 (from tensorflow[and-cuda])\n", + " Downloading nvidia_cuda_nvrtc_cu12-12.5.82-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-cuda-runtime-cu12==12.5.82 (from tensorflow[and-cuda])\n", + " Downloading nvidia_cuda_runtime_cu12-12.5.82-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-cudnn-cu12==9.3.0.75 (from tensorflow[and-cuda])\n", + " Downloading nvidia_cudnn_cu12-9.3.0.75-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "Collecting nvidia-cufft-cu12==11.2.3.61 (from tensorflow[and-cuda])\n", + " Downloading nvidia_cufft_cu12-11.2.3.61-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-curand-cu12==10.3.6.82 (from tensorflow[and-cuda])\n", + " Downloading nvidia_curand_cu12-10.3.6.82-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-cusolver-cu12==11.6.3.83 (from tensorflow[and-cuda])\n", + " Downloading nvidia_cusolver_cu12-11.6.3.83-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "Collecting nvidia-cusparse-cu12==12.5.1.3 (from tensorflow[and-cuda])\n", + " Downloading nvidia_cusparse_cu12-12.5.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "Collecting nvidia-nccl-cu12==2.23.4 (from tensorflow[and-cuda])\n", + " Downloading nvidia_nccl_cu12-2.23.4-py3-none-manylinux2014_x86_64.whl.metadata (1.8 kB)\n", + "Collecting nvidia-nvjitlink-cu12==12.5.82 (from tensorflow[and-cuda])\n", + " Downloading nvidia_nvjitlink_cu12-12.5.82-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "Requirement already satisfied: wheel<1.0,>=0.23.0 in /usr/local/lib/python3.10/dist-packages (from astunparse>=1.6.0->tensorflow[and-cuda]) (0.41.3)\n", + "Collecting rich (from keras>=3.5.0->tensorflow[and-cuda])\n", + " Downloading rich-14.0.0-py3-none-any.whl.metadata (18 kB)\n", + "Collecting namex (from keras>=3.5.0->tensorflow[and-cuda])\n", + " Downloading namex-0.0.8-py3-none-any.whl.metadata (246 bytes)\n", + "Collecting optree (from keras>=3.5.0->tensorflow[and-cuda])\n", + " Downloading optree-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (49 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m49.1/49.1 kB\u001b[0m \u001b[31m6.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.21.0->tensorflow[and-cuda]) (2.1.1)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.21.0->tensorflow[and-cuda]) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.21.0->tensorflow[and-cuda]) (1.26.13)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.21.0->tensorflow[and-cuda]) (2022.12.7)\n", + "Collecting markdown>=2.6.8 (from tensorboard~=2.19.0->tensorflow[and-cuda])\n", + " Downloading Markdown-3.7-py3-none-any.whl.metadata (7.0 kB)\n", + "Collecting tensorboard-data-server<0.8.0,>=0.7.0 (from tensorboard~=2.19.0->tensorflow[and-cuda])\n", + " Downloading tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl.metadata (1.1 kB)\n", + "Collecting werkzeug>=1.0.1 (from tensorboard~=2.19.0->tensorflow[and-cuda])\n", + " Downloading werkzeug-3.1.3-py3-none-any.whl.metadata (3.7 kB)\n", + "Requirement already satisfied: MarkupSafe>=2.1.1 in /usr/local/lib/python3.10/dist-packages (from werkzeug>=1.0.1->tensorboard~=2.19.0->tensorflow[and-cuda]) (2.1.2)\n", + "Collecting typing-extensions>=3.6.6 (from tensorflow[and-cuda])\n", + " Downloading typing_extensions-4.13.1-py3-none-any.whl.metadata (3.0 kB)\n", + "Collecting markdown-it-py>=2.2.0 (from rich->keras>=3.5.0->tensorflow[and-cuda])\n", + " Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich->keras>=3.5.0->tensorflow[and-cuda]) (2.16.1)\n", + "Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich->keras>=3.5.0->tensorflow[and-cuda])\n", + " Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", + "Downloading nvidia_cublas_cu12-12.5.3.2-py3-none-manylinux2014_x86_64.whl (363.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m363.3/363.3 MB\u001b[0m \u001b[31m15.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cuda_cupti_cu12-12.5.82-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━��━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m75.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m0:01\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cuda_nvcc_cu12-12.5.82-py3-none-manylinux2014_x86_64.whl (22.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m22.5/22.5 MB\u001b[0m \u001b[31m68.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cuda_nvrtc_cu12-12.5.82-py3-none-manylinux2014_x86_64.whl (24.9 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.9/24.9 MB\u001b[0m \u001b[31m54.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cuda_runtime_cu12-12.5.82-py3-none-manylinux2014_x86_64.whl (895 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m895.7/895.7 kB\u001b[0m \u001b[31m120.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cudnn_cu12-9.3.0.75-py3-none-manylinux2014_x86_64.whl (577.2 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m577.2/577.2 MB\u001b[0m \u001b[31m10.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cufft_cu12-11.2.3.61-py3-none-manylinux2014_x86_64.whl (192.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m192.5/192.5 MB\u001b[0m \u001b[31m24.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading nvidia_curand_cu12-10.3.6.82-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.3/56.3 MB\u001b[0m \u001b[31m51.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m0:01\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cusolver_cu12-11.6.3.83-py3-none-manylinux2014_x86_64.whl (130.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m130.3/130.3 MB\u001b[0m \u001b[31m33.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cusparse_cu12-12.5.1.3-py3-none-manylinux2014_x86_64.whl (217.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m217.6/217.6 MB\u001b[0m \u001b[31m22.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading nvidia_nccl_cu12-2.23.4-py3-none-manylinux2014_x86_64.whl (199.0 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m199.0/199.0 MB\u001b[0m \u001b[31m25.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading nvidia_nvjitlink_cu12-12.5.82-py3-none-manylinux2014_x86_64.whl (21.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.3/21.3 MB\u001b[0m \u001b[31m69.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0mm\n", + "\u001b[?25hDownloading absl_py-2.2.2-py3-none-any.whl (135 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m135.6/135.6 kB\u001b[0m \u001b[31m52.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading astunparse-1.6.3-py2.py3-none-any.whl (12 kB)\n", + "Downloading flatbuffers-25.2.10-py2.py3-none-any.whl (30 kB)\n", + "Downloading gast-0.6.0-py3-none-any.whl (21 kB)\n", + "Downloading google_pasta-0.2.0-py3-none-any.whl (57 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.5/57.5 kB\u001b[0m \u001b[31m13.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading grpcio-1.71.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.9/5.9 MB\u001b[0m \u001b[31m76.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading h5py-3.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.5/4.5 MB\u001b[0m \u001b[31m96.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0mta \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hDownloading keras-3.9.2-py3-none-any.whl (1.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m139.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading libclang-18.1.1-py2.py3-none-manylinux2010_x86_64.whl (24.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.5/24.5 MB\u001b[0m \u001b[31m70.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0mm\n", + "\u001b[?25hDownloading ml_dtypes-0.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.7/4.7 MB\u001b[0m \u001b[31m84.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0mta \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hDownloading numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m16.3/16.3 MB\u001b[0m \u001b[31m64.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0mm\n", + "\u001b[?25hDownloading opt_einsum-3.4.0-py3-none-any.whl (71 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m71.9/71.9 kB\u001b[0m \u001b[31m31.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl (319 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m319.7/319.7 kB\u001b[0m \u001b[31m93.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading tensorboard-2.19.0-py3-none-any.whl (5.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.5/5.5 MB\u001b[0m \u001b[31m81.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0mta \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hDownloading tensorflow_io_gcs_filesystem-0.37.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.1/5.1 MB\u001b[0m \u001b[31m96.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0mta \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hDownloading termcolor-3.0.1-py3-none-any.whl (7.2 kB)\n", + "Downloading wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (82 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m82.8/82.8 kB\u001b[0m \u001b[31m26.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading tensorflow-2.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (644.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m644.8/644.8 MB\u001b[0m \u001b[31m9.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading Markdown-3.7-py3-none-any.whl (106 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m106.3/106.3 kB\u001b[0m \u001b[31m42.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl (6.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.6/6.6 MB\u001b[0m \u001b[31m78.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading werkzeug-3.1.3-py3-none-any.whl (224 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m224.5/224.5 kB\u001b[0m \u001b[31m73.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading namex-0.0.8-py3-none-any.whl (5.8 kB)\n", + "Downloading optree-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (395 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m395.2/395.2 kB\u001b[0m \u001b[31m89.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading typing_extensions-4.13.1-py3-none-any.whl (45 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m45.7/45.7 kB\u001b[0m \u001b[31m22.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading rich-14.0.0-py3-none-any.whl (243 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m243.2/243.2 kB\u001b[0m \u001b[31m85.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m87.5/87.5 kB\u001b[0m \u001b[31m36.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", + "Installing collected packages: namex, libclang, flatbuffers, wrapt, werkzeug, typing-extensions, termcolor, tensorflow-io-gcs-filesystem, tensorboard-data-server, protobuf, opt-einsum, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-nvcc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, mdurl, markdown, grpcio, google-pasta, gast, astunparse, absl-py, tensorboard, optree, nvidia-cusparse-cu12, nvidia-cufft-cu12, nvidia-cudnn-cu12, ml-dtypes, markdown-it-py, h5py, rich, nvidia-cusolver-cu12, keras, tensorflow\n", + " Attempting uninstall: typing-extensions\n", + " Found existing installation: typing_extensions 4.4.0\n", + " Uninstalling typing_extensions-4.4.0:\n", + " Successfully uninstalled typing_extensions-4.4.0\n", + " Attempting uninstall: numpy\n", + " Found existing installation: numpy 1.24.1\n", + " Uninstalling numpy-1.24.1:\n", + " Successfully uninstalled numpy-1.24.1\n", + "Successfully installed absl-py-2.2.2 astunparse-1.6.3 flatbuffers-25.2.10 gast-0.6.0 google-pasta-0.2.0 grpcio-1.71.0 h5py-3.13.0 keras-3.9.2 libclang-18.1.1 markdown-3.7 markdown-it-py-3.0.0 mdurl-0.1.2 ml-dtypes-0.5.1 namex-0.0.8 numpy-2.1.3 nvidia-cublas-cu12-12.5.3.2 nvidia-cuda-cupti-cu12-12.5.82 nvidia-cuda-nvcc-cu12-12.5.82 nvidia-cuda-nvrtc-cu12-12.5.82 nvidia-cuda-runtime-cu12-12.5.82 nvidia-cudnn-cu12-9.3.0.75 nvidia-cufft-cu12-11.2.3.61 nvidia-curand-cu12-10.3.6.82 nvidia-cusolver-cu12-11.6.3.83 nvidia-cusparse-cu12-12.5.1.3 nvidia-nccl-cu12-2.23.4 nvidia-nvjitlink-cu12-12.5.82 opt-einsum-3.4.0 optree-0.14.1 protobuf-5.29.4 rich-14.0.0 tensorboard-2.19.0 tensorboard-data-server-0.7.2 tensorflow-2.19.0 tensorflow-io-gcs-filesystem-0.37.1 termcolor-3.0.1 typing-extensions-4.13.1 werkzeug-3.1.3 wrapt-1.17.2\n", + "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n", + "\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython -m pip install --upgrade pip\u001b[0m\n", + "Collecting scipy\n", + " Downloading scipy-1.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.0/62.0 kB\u001b[0m \u001b[31m1.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: numpy<2.5,>=1.23.5 in /usr/local/lib/python3.10/dist-packages (from scipy) (2.1.3)\n", + "Downloading scipy-1.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m37.6/37.6 MB\u001b[0m \u001b[31m65.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hInstalling collected packages: scipy\n", + "Successfully installed scipy-1.15.2\n", + "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n", + "\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython -m pip install --upgrade pip\u001b[0m\n", + "Collecting matplotlib\n", + " Downloading matplotlib-3.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (11 kB)\n", + "Collecting contourpy>=1.0.1 (from matplotlib)\n", + " Downloading contourpy-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.4 kB)\n", + "Collecting cycler>=0.10 (from matplotlib)\n", + " Downloading cycler-0.12.1-py3-none-any.whl.metadata (3.8 kB)\n", + "Collecting fonttools>=4.22.0 (from matplotlib)\n", + " Downloading fonttools-4.57.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (102 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m102.5/102.5 kB\u001b[0m \u001b[31m1.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hCollecting kiwisolver>=1.3.1 (from matplotlib)\n", + " Downloading kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (6.2 kB)\n", + "Requirement already satisfied: numpy>=1.23 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (2.1.3)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (23.2)\n", + "Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (9.3.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /usr/lib/python3/dist-packages (from matplotlib) (2.4.7)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (2.8.2)\n", + "Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n", + "Downloading matplotlib-3.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8.6/8.6 MB\u001b[0m \u001b[31m42.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hDownloading contourpy-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (324 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m325.0/325.0 kB\u001b[0m \u001b[31m67.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading cycler-0.12.1-py3-none-any.whl (8.3 kB)\n", + "Downloading fonttools-4.57.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.6/4.6 MB\u001b[0m \u001b[31m81.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0mta \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hDownloading kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m104.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: kiwisolver, fonttools, cycler, contourpy, matplotlib\n", + "Successfully installed contourpy-1.3.1 cycler-0.12.1 fonttools-4.57.0 kiwisolver-1.4.8 matplotlib-3.10.1\n", + "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n", + "\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython -m pip install --upgrade pip\u001b[0m\n", + "Collecting scikit-learn\n", + " Downloading scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (18 kB)\n", + "Requirement already satisfied: numpy>=1.19.5 in /usr/local/lib/python3.10/dist-packages (from scikit-learn) (2.1.3)\n", + "Requirement already satisfied: scipy>=1.6.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn) (1.15.2)\n", + "Collecting joblib>=1.2.0 (from scikit-learn)\n", + " Downloading joblib-1.4.2-py3-none-any.whl.metadata (5.4 kB)\n", + "Collecting threadpoolctl>=3.1.0 (from scikit-learn)\n", + " Downloading threadpoolctl-3.6.0-py3-none-any.whl.metadata (13 kB)\n", + "Downloading scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.5/13.5 MB\u001b[0m \u001b[31m78.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m0:01\u001b[0m\n", + "\u001b[?25hDownloading joblib-1.4.2-py3-none-any.whl (301 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m301.8/301.8 kB\u001b[0m \u001b[31m86.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading threadpoolctl-3.6.0-py3-none-any.whl (18 kB)\n", + "Installing collected packages: threadpoolctl, joblib, scikit-learn\n", + "Successfully installed joblib-1.4.2 scikit-learn-1.6.1 threadpoolctl-3.6.0\n", + "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n", + "\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython -m pip install --upgrade pip\u001b[0m\n" + ] + } + ], + "source": [ + "!pip install tensorflow[and-cuda]\n", + "!pip install scipy\n", + "!pip install matplotlib\n", + "!pip install scikit-learn" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d591ed6e-b080-47ca-80c1-f22701792b5e", + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow\n", + "import tensorflow.keras\n", + "from keras.applications import DenseNet121\n", + "from keras import layers, Sequential, optimizers\n", + "import numpy as np\n", + "from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "a3ccec69-674d-433a-bd86-6f4d4a29489e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]\n" + ] + } + ], + "source": [ + "print(tensorflow.config.list_physical_devices('GPU'))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "4539482d-71da-46d5-aa73-1761fa16cbf8", + "metadata": {}, + "outputs": [], + "source": [ + "import zipfile\n", + "zf = zipfile.ZipFile('/workspace/train.zip', 'r')\n", + "zf.extractall('/workspace/extractedData')\n", + "zf.close()\n", + "\n", + "zf = zipfile.ZipFile('/workspace/test.zip', 'r')\n", + "zf.extractall('/workspace/extractedData')\n", + "zf.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1785d90e-49d0-413e-b04d-84951560912b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 10129 images belonging to 8 classes.\n", + "Found 1600 images belonging to 8 classes.\n" + ] + } + ], + "source": [ + "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n", + "\n", + "dataGen = ImageDataGenerator(\n", + " rescale = 1./255\n", + ")\n", + "\n", + "train_data = dataGen.flow_from_directory(\n", + " '/workspace/extractedData/train/',\n", + " target_size = (224, 224),\n", + " batch_size = 32,\n", + " class_mode = 'categorical'\n", + ")\n", + "\n", + "\n", + "test_data = dataGen.flow_from_directory(\n", + " '/workspace/extractedData/test/',\n", + " target_size = (224, 224),\n", + " batch_size = 32,\n", + " class_mode = 'categorical'\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "4e406030-1d87-4773-b39b-65749a142a0c", + "metadata": {}, + "outputs": [], + "source": [ + "conv_base = DenseNet121(\n", + " include_top = False,\n", + " weights = 'imagenet',\n", + " input_shape = (224, 224, 3)\n", + ")\n", + "\n", + "conv_base.trainable = False\n", + "\n", + "denseNetModel = Sequential([\n", + " conv_base,\n", + " layers.GlobalAveragePooling2D(),\n", + " layers.BatchNormalization(), # Normalizes outputs for faster convergence\n", + " layers.Dropout(0.3), # Helps prevent overfitting\n", + " layers.Dense(128, activation='relu'), # A dense layer to learn combinations of features\n", + " layers.BatchNormalization(),\n", + " layers.Dropout(0.3),\n", + " layers.Dense(8, activation='softmax')\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "c4739d1d-a049-4be0-871c-1e28a4a5bde4", + "metadata": {}, + "outputs": [], + "source": [ + "denseNetModel.compile(\n", + " optimizer = optimizers.Adam(learning_rate=2e-4),\n", + " loss = 'categorical_crossentropy',\n", + " metrics = ['accuracy']\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "45c1a032-4c9a-4226-87b3-3152a0e68896", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/45\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", + "I0000 00:00:1743783081.929657 890 service.cc:152] XLA service 0x713db8022a30 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:\n", + "I0000 00:00:1743783081.929700 890 service.cc:160] StreamExecutor device (0): NVIDIA RTX A4500, Compute Capability 8.6\n", + "2025-04-04 16:11:22.370035: I tensorflow/compiler/mlir/tensorflow/utils/dump_mlir_util.cc:269] disabling MLIR crash reproducer, set env var `MLIR_CRASH_REPRODUCER_DIRECTORY` to enable.\n", + "I0000 00:00:1743783084.833956 890 cuda_dnn.cc:529] Loaded cuDNN version 90300\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m 1/317\u001b[0m \u001b[37m━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m2:12:12\u001b[0m 25s/step - accuracy: 0.0938 - loss: 3.4038" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "I0000 00:00:1743783098.474783 890 device_compiler.h:188] Compiled cluster using XLA! This line is logged at most once for the lifetime of the process.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m133s\u001b[0m 343ms/step - accuracy: 0.2189 - loss: 2.4574 - val_accuracy: 0.3706 - val_loss: 1.6467\n", + "Epoch 2/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m80s\u001b[0m 252ms/step - accuracy: 0.3580 - loss: 1.8043 - val_accuracy: 0.4131 - val_loss: 1.4993\n", + "Epoch 3/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m83s\u001b[0m 262ms/step - accuracy: 0.3839 - loss: 1.6299 - val_accuracy: 0.4331 - val_loss: 1.4247\n", + "Epoch 4/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m87s\u001b[0m 273ms/step - accuracy: 0.4108 - loss: 1.5463 - val_accuracy: 0.4475 - val_loss: 1.3838\n", + "Epoch 5/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m84s\u001b[0m 265ms/step - accuracy: 0.4489 - loss: 1.4444 - val_accuracy: 0.4569 - val_loss: 1.3593\n", + "Epoch 6/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m84s\u001b[0m 265ms/step - accuracy: 0.4580 - loss: 1.4103 - val_accuracy: 0.4600 - val_loss: 1.3367\n", + "Epoch 7/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m77s\u001b[0m 242ms/step - accuracy: 0.4605 - loss: 1.3939 - val_accuracy: 0.4606 - val_loss: 1.3221\n", + "Epoch 8/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m81s\u001b[0m 255ms/step - accuracy: 0.4857 - loss: 1.3295 - val_accuracy: 0.4781 - val_loss: 1.3076\n", + "Epoch 9/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m82s\u001b[0m 260ms/step - accuracy: 0.4932 - loss: 1.3136 - val_accuracy: 0.4756 - val_loss: 1.3025\n", + "Epoch 10/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m75s\u001b[0m 237ms/step - accuracy: 0.5055 - loss: 1.2807 - val_accuracy: 0.4737 - val_loss: 1.2966\n", + "Epoch 11/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m69s\u001b[0m 217ms/step - accuracy: 0.4998 - loss: 1.2773 - val_accuracy: 0.4719 - val_loss: 1.2902\n", + "Epoch 12/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 214ms/step - accuracy: 0.5242 - loss: 1.2279 - val_accuracy: 0.4775 - val_loss: 1.2871\n", + "Epoch 13/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 210ms/step - accuracy: 0.5119 - loss: 1.2504 - val_accuracy: 0.4888 - val_loss: 1.2772\n", + "Epoch 14/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m69s\u001b[0m 218ms/step - accuracy: 0.5245 - loss: 1.2331 - val_accuracy: 0.4869 - val_loss: 1.2712\n", + "Epoch 15/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m54s\u001b[0m 169ms/step - accuracy: 0.5340 - loss: 1.2051 - val_accuracy: 0.4931 - val_loss: 1.2717\n", + "Epoch 16/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m53s\u001b[0m 167ms/step - accuracy: 0.5336 - loss: 1.2065 - val_accuracy: 0.4988 - val_loss: 1.2663\n", + "Epoch 17/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m59s\u001b[0m 187ms/step - accuracy: 0.5397 - loss: 1.2046 - val_accuracy: 0.4956 - val_loss: 1.2659\n", + "Epoch 18/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m60s\u001b[0m 189ms/step - accuracy: 0.5341 - loss: 1.1980 - val_accuracy: 0.4963 - val_loss: 1.2614\n", + "Epoch 19/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m56s\u001b[0m 176ms/step - accuracy: 0.5403 - loss: 1.1908 - val_accuracy: 0.4888 - val_loss: 1.2596\n", + "Epoch 20/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m59s\u001b[0m 186ms/step - accuracy: 0.5576 - loss: 1.1639 - val_accuracy: 0.4981 - val_loss: 1.2567\n", + "Epoch 21/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m61s\u001b[0m 191ms/step - accuracy: 0.5585 - loss: 1.1643 - val_accuracy: 0.4950 - val_loss: 1.2584\n", + "Epoch 22/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m61s\u001b[0m 192ms/step - accuracy: 0.5631 - loss: 1.1446 - val_accuracy: 0.5006 - val_loss: 1.2550\n", + "Epoch 23/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m62s\u001b[0m 195ms/step - accuracy: 0.5627 - loss: 1.1369 - val_accuracy: 0.5006 - val_loss: 1.2555\n", + "Epoch 24/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m46s\u001b[0m 144ms/step - accuracy: 0.5550 - loss: 1.1368 - val_accuracy: 0.4981 - val_loss: 1.2518\n", + "Epoch 25/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m43s\u001b[0m 134ms/step - accuracy: 0.5647 - loss: 1.1411 - val_accuracy: 0.4913 - val_loss: 1.2547\n", + "Epoch 26/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m43s\u001b[0m 135ms/step - accuracy: 0.5695 - loss: 1.1183 - val_accuracy: 0.4963 - val_loss: 1.2495\n", + "Epoch 27/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m48s\u001b[0m 150ms/step - accuracy: 0.5723 - loss: 1.1138 - val_accuracy: 0.4969 - val_loss: 1.2493\n", + "Epoch 28/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m48s\u001b[0m 151ms/step - accuracy: 0.5757 - loss: 1.1162 - val_accuracy: 0.4938 - val_loss: 1.2480\n", + "Epoch 29/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m52s\u001b[0m 165ms/step - accuracy: 0.5784 - loss: 1.1085 - val_accuracy: 0.4969 - val_loss: 1.2465\n", + "Epoch 30/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m49s\u001b[0m 153ms/step - accuracy: 0.5808 - loss: 1.0997 - val_accuracy: 0.4888 - val_loss: 1.2486\n", + "Epoch 31/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m47s\u001b[0m 148ms/step - accuracy: 0.5805 - loss: 1.1029 - val_accuracy: 0.4919 - val_loss: 1.2489\n", + "Epoch 32/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m49s\u001b[0m 153ms/step - accuracy: 0.6018 - loss: 1.0631 - val_accuracy: 0.4900 - val_loss: 1.2475\n", + "Epoch 33/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m47s\u001b[0m 148ms/step - accuracy: 0.6012 - loss: 1.0619 - val_accuracy: 0.4956 - val_loss: 1.2434\n", + "Epoch 34/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 132ms/step - accuracy: 0.5784 - loss: 1.0873 - val_accuracy: 0.4931 - val_loss: 1.2502\n", + "Epoch 35/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m48s\u001b[0m 150ms/step - accuracy: 0.6024 - loss: 1.0666 - val_accuracy: 0.4944 - val_loss: 1.2493\n", + "Epoch 36/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 128ms/step - accuracy: 0.6013 - loss: 1.0655 - val_accuracy: 0.4981 - val_loss: 1.2418\n", + "Epoch 37/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m43s\u001b[0m 136ms/step - accuracy: 0.6039 - loss: 1.0400 - val_accuracy: 0.4963 - val_loss: 1.2456\n", + "Epoch 38/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m47s\u001b[0m 147ms/step - accuracy: 0.6109 - loss: 1.0330 - val_accuracy: 0.4938 - val_loss: 1.2478\n", + "Epoch 39/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m43s\u001b[0m 136ms/step - accuracy: 0.6087 - loss: 1.0323 - val_accuracy: 0.4894 - val_loss: 1.2458\n", + "Epoch 40/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m47s\u001b[0m 148ms/step - accuracy: 0.6010 - loss: 1.0413 - val_accuracy: 0.4869 - val_loss: 1.2462\n", + "Epoch 41/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 133ms/step - accuracy: 0.6065 - loss: 1.0374 - val_accuracy: 0.4944 - val_loss: 1.2424\n", + "Epoch 42/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m37s\u001b[0m 116ms/step - accuracy: 0.6133 - loss: 1.0312 - val_accuracy: 0.4950 - val_loss: 1.2468\n", + "Epoch 43/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 125ms/step - accuracy: 0.6248 - loss: 1.0029 - val_accuracy: 0.4981 - val_loss: 1.2444\n", + "Epoch 44/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 129ms/step - accuracy: 0.6226 - loss: 1.0150 - val_accuracy: 0.5031 - val_loss: 1.2475\n", + "Epoch 45/45\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 132ms/step - accuracy: 0.6155 - loss: 1.0012 - val_accuracy: 0.4888 - val_loss: 1.2481\n" + ] + } + ], + "source": [ + "denseNetModel_noDataAugment_fitHist = denseNetModel.fit(\n", + " train_data,\n", + " epochs=45,\n", + " validation_data = test_data\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "0953b7d7-ae3b-465d-bfd3-02a4d7aca0e5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.plot(denseNetModel_noDataAugment_fitHist.history['val_loss'], 'r-')\n", + "plt.plot(denseNetModel_noDataAugment_fitHist.history['loss'], 'b-')\n", + "plt.plot(denseNetModel_noDataAugment_fitHist.history['accuracy'], color='black')\n", + "plt.plot(denseNetModel_noDataAugment_fitHist.history['val_accuracy'], color='green')" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "7391277f-ca20-40dc-9224-3cc8c17967e0", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.10/dist-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[1m50/50\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 203ms/step\n" + ] + }, + { + "data": { + "image/png": "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rF271vx99He/I4QQdZgihKgVPvvsMwVQDhw4oFy8eFGxsbFRpk6dak7v06eP0qJFC/P00aNHFUCZNGmSxXaeffZZBVB+/fVX87zg4GAFULZs2WKx7I4dOxRAadmypVJcXGyef9999ykqlUoZMmSIxfLdunVTgoODLebl5+dXOJZBgwYpYWFhFvP69Omj9OnTxzwdGRmpAMpnn31m9XyYTCZl6NChiqOjo3Lq1ClFURQlJydHcXV1VSZPnmyxbGJiouLi4mIxv23btoqfn5+SmZlpnrdt2zYFqHAM13rvvfcUQPn++++vu1yZadOmKYCya9cu87ycnBwlNDRUCQkJUYxGo6IoV893eHi4UlRUVGF/J06cMM97+eWXFUBJSUmx2BegvPzyyxXyEBwcrIwbN8483aZNG+X222+/br7L9lHm71xTv//+u3lecnKyotVqlWeeeea6+y07jieeeEJJT09X7OzslC+++EJRFEXZtGmTolKplKioKKvnwNr1Nn/+fEWlUinR0dHmeU888YRi7Seu7LpzdnZWkpOTraZde03ed999ir29vXL+/Hnl7bffVgBl/fr1NzzG22+/XencubN5+s4771TuvPNORaPRKJs3b1YURVEOHz6sAMqGDRvMy117rxw4cKDSe6VPnz4KoHz++efmeUVFRYqvr68yatSoG+ZRURRl6NChSo8ePczTy5YtU2xsbCzOT2ZmpuLk5KR06dJFKSgosFjfZDIpiqIoBoNBCQ0NVYKDg5WMjAyry1g7vjLjxo2zuDev97cyGAwW95CiKEpGRobi4+OjTJw40Tzv119/VQCL79Jr85SZmanodDplxowZFulTp05VHBwclNzc3Arrljd27FgFUNzc3JSRI0cqCxYsUM6cOVNhudmzZyuAsm7dukrzsmjRIgVQVq1aZU4rLi5WunXrpjg6OirZ2dk3PDf9+/dXWrVqpRQWFlpsv3v37krjxo3N86ryHSGEqF+kqacQtVBYWBhjxoxh2bJlJCQkWF3mp59+AmD69OkW85955hmACs0MQ0NDK22yNHbsWGxtbc3TXbp0QVEUJk6caLFcly5diI2NxWAwmOeV7yeYlZVFamoqffr04dKlS2RlZd3oUCv16quv8uOPP7JixQqaN28OlNYmZGZmct9995Gammr+aDQaunTpYm7mlZCQwNGjRxk3bhwuLi7mbd56663mbV1PdnY2AE5OTlXK608//UTnzp3p2bOneZ6joyMPP/wwUVFR5uZXZSZMmGDRD6esFufSpUtV2l9VuLq6curUKS5cuFDldf7qNdW8eXNz3qG0WWrTpk3/0nG4ubkxePBgvvrqKwC+/PJLunfvbq5JuVb56y0vL4/U1FS6d++OoigcOXKkyvsdNWoUXl5eVVr2gw8+wMXFhdGjRzNr1izGjBlj0SexMr169eLw4cPk5eUBpTXJt912G23btmXXrl1AaS2gSqWyuHb+KkdHRx588EHztJ2dHZ07d67S3yEtLY2tW7dy3333meeNGjXK3CS5zM8//0xOTg4vvPBChX6QZc1ojxw5QmRkJNOmTavQN/WfDBti7W+l0WjM95DJZCI9PR2DwUDHjh05fPiwebm1a9eiUqnMTaet5cnFxYU77riDr776ytyk12g0smbNGkaMGHHDvo6fffYZH3zwAaGhoXz//fc8++yzhIeH079/f4sIzWvXrqVNmzYVWgCUz8tPP/2Er6+vxd/D1taWqVOnkpuby2+//Xbdc5Oens6vv/7K3XffTU5Ojvk7Mi0tjUGDBnHhwgVznv7Od4QQom6Tgp8QtdRLL72EwWCotK9fdHQ0arWaRo0aWcz39fXF1dWV6Ohoi/mhoaGV7qtBgwYW02WFpaCgoArzTSaTRYHujz/+YMCAATg4OODq6oqXlxcvvvgiwN8u+G3ZsoW5c+cyc+ZMRo0aZZ5f9oByyy234OXlZfHZtm2bOSBK2bE3bty4wrbLN3GtjLOzMwA5OTlVym90dLTV7YaHh1vkp8y159vNzQ0obbJXXV555RUyMzNp0qQJrVq14rnnnuP48ePXXeevXlPXHgeUHstfPY7777+fn3/+mZiYGNavX1+hiWF5MTExjB8/Hnd3dxwdHfHy8qJPnz7AX7vernc/XMvd3Z3333+f48eP4+Liwvvvv1+l9Xr16oXBYGDPnj2cO3eO5ORkevXqRe/evS0Kfs2bN8fd3b3K+blWYGBghYJVVf8Oa9asoaSkhHbt2hEREUFERATp6el06dLFIrrnxYsXAa47pExVlvk7KvtbrVy5ktatW5v7p3l5ebFp0yaL6+DixYv4+/vf8PyOHTuWmJgY89/ll19+ISkpqUoRXtVqNU888QSHDh0iNTWVDRs2MGTIEH799Vfuvfdei7zc6NxER0fTuHFj1GrLx7PKvkuuPTcREREoisKsWbMqfEeWFX7Lvif/zneEEKJukz5+QtRSYWFhPPjggyxbtowXXnih0uWq+ib9ehE8K+vHVtn8srfiFy9epH///jRr1oyFCxcSFBSEnZ0dP/30E++++26FPlNVERkZyQMPPMCtt97Ka6+9ZpFWtr0vvvgCX1/fCutWV4TKZs2aAXDixAlGjBhRLdss70bn9e8wGo0W07179+bixYts2LCBbdu28fHHH/Puu++ydOnSSsfOK1PVa6q6jmP48OFotVrGjRtHUVFRpUNXGI1Gbr31VtLT05kxYwbNmjXDwcGBuLg4xo8f/5eut78a0Xbr1q1AaeH88uXLVYq22rFjR3Q6Hb///jsNGjTA29ubJk2a0KtXLz788EOKiorYtWuX1Rqgv+Kf/B3KCnfWgpNAaS10WFjY38+cFSqVymrerr2Gy1j7W61atYrx48czYsQInnvuOby9vdFoNMyfP99cAP0rBg0ahI+PD6tWraJ3796sWrUKX19fBgwY8Je24+HhwfDhwxk+fDh9+/blt99+Izo6utIa7H/q2nNTdg88++yzlbbwKHux80++I4QQdZMU/ISoxV566SVWrVrFm2++WSEtODgYk8nEhQsXzG+DoTTQSGZm5k170Cjvhx9+oKioiI0bN1rU/liLrFcVBQUF3Hnnnbi6uvLVV19VeOvdsGFDoDToxvUeyMqO3VoTpnPnzt0wHz179sTNzY2vvvqKF1988YYBXoKDg61u9+zZsxb5qQ5ubm5kZmZazCsuLrbaJNjd3Z0JEyYwYcIEcnNz6d27N3PmzKn0oa6mrim9Xs+IESNYtWoVQ4YMwdPT0+pyJ06c4Pz586xcuZKxY8ea51uLQvhPmhZea8uWLXz88cc8//zzrF69mnHjxrFv374bvmgoa3K5a9cuGjRoYG4W26tXL4qKili9ejVJSUn07t37utupzmMpLzIykj///JMpU6aYa03LmEwmxowZw5dffslLL71kvvdOnjxZoUa4TPllrnd/urm5WW2Gem1t1vV89913hIWFsW7dOovzc22TzoYNG7J161bS09OvW+un0Wi4//77WbFiBW+++Sbr169n8uTJVQruVJmOHTvy22+/kZCQQHBwMA0bNuTkyZPXXSc4OJjjx49jMpksvv+q+l1SVki3tbWtUqH1r35HCCHq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ZGVlWZ/p8/LyYvbs2TVdPxEREREREfmHzjvwmzt3Lm+//Tb/+9//sLM7NcZP586d2bFjR41WTkRERERE/t1O9upZV5OtOO/A7/Dhw3To0OGM5SaTifz8/BqplIiIiIiIiNSc8w78oqOj2bZt2xnLlyxZQosWLWqiTiIiIiIiIgAYDXU72Ypz6tXzdBMnTuTee++lqKiI8vJyNmzYwKeffsqMGTN45513aqOOIiIiIiIi8g+cd+B322234ezszBNPPEFBQQE33HADISEhzJkzh9GjR9dGHUVEREREROQfOO/AD2DMmDGMGTOGgoIC8vLyCAgIqOl6iYiIiIiI1GknK7bUucsFBX4AKSkp7Nu3D6h4Qfz9/WusUiIiIiIiIlJzzrtzl9zcXG666SZCQkLo06cPffr0ISQkhBtvvJHs7OzaqKOIiIiIiPxLGep4shXnHfjddtttrF+/nh9++IGsrCyysrL4/vvv2bRpE3feeWdt1FFERERERET+gfNu6vn999/z888/c8kll1iXDRkyhLfffpuhQ4fWaOVERERERETknzvvwM/X1xdPT88zlnt6euLt7V0jlRIREREREQEwGgwY66iTlbo6bm0476aeTzzxBBMnTiQpKcm6LCkpiYcffpgnn3yyRisnIiIiIiIi/9w5Zfw6dOhQqSvTAwcOEBERQUREBABxcXGYTCZSU1P1nJ+IiIiIiNQYg6Fiqqtj24pzCvxGjBhRy9UQERERERGR2nJOgd+UKVNqux4iIiIiIiJSSy54AHcREREREZHaZjAYKj12drGPbSvOO/CzWCzMmjWLzz//nLi4OIqLiyuVZ2Rk1FjlRERERERE5J877149n376aV555RVGjRpFdnY2EydO5Oqrr8ZoNDJ16tRaqKKIiIiIiIj8E+cd+H388ce8/fbbPPTQQ9jb23P99dfzzjvv8NRTT7Fu3braqKOIiIiIiPxLnezVs64mW3HegV9SUhJt2rQBwM3NjezsbACuuOIKfvjhh5qtnYiIiIiIiPxj5x34hYWFkZiYCEDjxo355ZdfANi4cSMmk6lmayciIiIiIv9qRoOhTidbcd6B31VXXcWyZcsAuO+++3jyySdp0qQJN998M//9739rvIIiIiIiIiLyz5x3r57PP/+89d+jRo0iMjKSNWvW0KRJE4YPH16jlRMREREREZF/7rwzfn/VvXt3Jk6cSLdu3Xjuuedqok4iIiIiIiKAOnepKf848DspMTGRJ598sqZ2JyIiIiIiIjXkvJt6ioiIiIiIXCwGgwFDHaXe6uq4taHGMn4iIiIiIiJSPynwExERERERsXHn3NRz4sSJZy1PTU39x5WRszuYmIO9k6Wuq9HghbVtWddVsAlFltK6roLNWBqbWddVsBnpuea6roLNGN0hqK6rYBPyzPreriluJru6rkKDZ1/aMHM+RuouW9UwX7GqnXPgt3Xr1r9dp3fv3v+oMiIiIiIiIlLzzjnw+/3332uzHiIiIiIiIlJL1KuniIiIiIjUW+rVs2bYUrNVERERERERqYIyfiIiIiIiUm8ZDGCso8SbDSX8lPETERERERGxdQr8REREREREbNwFBX4rV67kxhtvpEePHiQkJACwYMECVq1aVaOVExERERGRfzejoW4nW3Hegd9XX33FkCFDcHZ2ZuvWrZjNFYPlZmdn89xzz9V4BUVEREREROSfOe/Ab9q0abzxxhu8/fbbODg4WJf36tWLLVu21GjlRERERETk3+3kcA51NdmK8w789u3bR+/evc9Y7unpSVZWVk3USURERERERGrQeQd+QUFBxMbGnrF81apVNGrUqEYqJSIiIiIiIjXnvAO/22+/nQceeID169djMBg4fvw4H3/8MZMmTeLuu++ujTqKiIiIiMi/lDp3qRnnPYD7Y489RllZGQMGDKCgoIDevXtjMpmYNGkS9913X23UUURERERERP6B8874GQwG/ve//5GRkcHOnTtZt24dqampPPvss7VRPxERERER+RczGOp2uhDz588nKioKJycnunXrxoYNG6pdd9euXVxzzTVERUVhMBiYPXv2GevMmDGDLl264O7uTkBAACNGjGDfvn3nVacLHsDd0dGRli1b0rVrV9zc3C50NyIiIiIiIjZj4cKFTJw4kSlTprBlyxbatWvHkCFDSElJqXL9goICGjVqxPPPP09QUFCV66xYsYJ7772XdevWsXTpUkpKShg8eDD5+fnnXK/zburZr1+/s3Zr+ttvv53vLkVERERERGzCK6+8wu233864ceMAeOONN/jhhx947733eOyxx85Yv0uXLnTp0gWgynKAJUuWVJr/4IMPCAgIYPPmzVWOuFCV8w782rdvX2m+pKSEbdu2sXPnTm655Zbz3Z2IiIiIiEi1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Pm0J9k5VbyPnLimp6mancn5euql9XVfBZiyNbXg9rtZX6TbUU2hdG90hqK6rYBPWxdfOzdt/IzdTw3/uv64V5ecyfURHsrOz8fDwqOvq/K2cnBw8PT15cvFWnFzd66QORfm5PHtlhwbzmp2NTTf1bNu2baX54OBgUlIqxk379ddfGTBgAKGhobi7u3PTTTeRnp5OQcGp4QPs7e3p0qWLdb558+Z4eXmxZ88e67KIiAhr0AfQo0cPysrK2Levooe1sWPHEhsby7p164CKgPK6666rNugDePzxx8nOzrZOpzcvFREREREROV82Hfg5OFTuPclgMFBWVsaRI0e44ooraNu2LV999RWbN29m/vz5ABQX1+y4MwEBAQwfPpz333+f5ORkfvrpJ/773/+edRuTyYSHh0elSURERERE5ELZ9DN+1dm8eTNlZWW8/PLLGE/0Ivn555+fsV5paSmbNm2ia9euAOzbt4+srCxatGhhXScuLo7jx48TElIxCOe6deswGo00a9bMus5tt93G9ddfT1hYGI0bN6ZXr8rPIoiIiIiISNXqspMVW+rcxaYzftWJiYmhpKSEuXPncujQIRYsWMAbb7xxxnoODg7cd999rF+/ns2bNzN27Fi6d+9uDQQBnJycuOWWW9i+fTsrV67k/vvv57rrriMo6NSzEUOGDMHDw4Np06Yxbty4i3KOIiIiIiIiJ/0rA7927drxyiuv8MILL9C6dWs+/vhjZsyYccZ6Li4uPProo9xwww306tULNzc3Fi5cWGmdmJgYrr76aoYNG8bgwYNp27ZtpZ5BAYxGI2PHjsVisXDzzTfX6rmJiIiIiNgSDedQM2y2qefy5cvPWPbNN99Y//3ggw/y4IMPViq/6aabztjm6quv5uqrrz7rse6++27uvvvus66TkJDAsGHDCA5umF1Hi4iIiIhIw2WzgV99kZ2dzY4dO/jkk0/49ttv67o6IiIiIiLyL6TAr5ZdeeWVbNiwgbvuuotBgwbVdXVERERERBoUg8GAwVA3bS7r6ri14V/5jN+5GDt2LFlZWWddZ+rUqWzbtu2s6yxfvpyCggJmzZpVc5UTERERERE5Dwr8REREREREbJyaeoqIiIiISL2lcfxqhjJ+IiIiIiIiNk4ZPxERERERqbcMhoqpro5tK5TxExERERERsXEK/ERERERERGycmnqKiIiIiEi9ZTQYMNZRm8u6Om5tUMZPRERERETExinjJyIiIiIi9ZaGc6gZyviJiIiIiIjYOAV+IiIiIiIiNk5NPUVEREREpP6qw3H8UFNPERERERERaSgU+ImIiIiIiNg4NfUUEREREZF6y4gBYx21uayr49YGZfxERERERERsnDJ+IiIiIiJSbxnqsHOXOutUphYo4yciIiIiImLjFPiJiIiIiIjYODX1FBERERGRestoqJjq6ti2Qhk/ERERERERG6eMn4iIiIiI1FtGgwFjHfWyUlfHrQ3K+ImIiIiIiNg4BX4iIiIiIiI2Tk09RURERESk3tI4fjVDGT8REREREREbp4yfiIiIiIjUW0bqsHMXbCflp4yfiIiIiIiIjVPgJyIiIiIiYuPU1FNEREREROotde5SM5TxExERERERsXEK/ERERERERGycmno2IPf1i8bFzb2uq9HgPbxgW11XQaSSPw9n1HUVbEZSUm5dV8FmjO4QVNdVsAltg13rugo249sdqXVdhQavpDCvrqtwQYzUXbbKlrJktnQuIiIiIiIiUgVl/EREREREpN4yGAwY6qiXlbo6bm1Qxk9ERERERMTGKfATERERERGxcWrqKSIiIiIi9ZbhxFRXx7YVyviJiIiIiIjYOGX8RERERESk3jIaDBjrqJOVujpubVDGT0RERERExMYp8BMREREREbFxCvxERERERKReM9TRdKHmz59PVFQUTk5OdOvWjQ0bNlS77q5du7jmmmuIiorCYDAwe/bsf7zPqijwExERERERqSELFy5k4sSJTJkyhS1bttCuXTuGDBlCSkpKlesXFBTQqFEjnn/+eYKCgmpkn1VR4CciIiIiIlJDXnnlFW6//XbGjRtHy5YteeONN3BxceG9996rcv0uXbrw0ksvMXr0aEwmU43ssyoK/EREREREpN4yGOp2AsjJyak0mc3mKutaXFzM5s2bGThwoHWZ0Whk4MCBrF279oLOv6b2qcBPRERERETkLMLDw/H09LROM2bMqHK9tLQ0LBYLgYGBlZYHBgaSlJR0QceuqX1qHD8REREREam3DAYDhjoaT+/kcePj4/Hw8LAur65JZn2mwE9EREREROQsPDw8KgV+1fHz88POzo7k5ORKy5OTk6vtuOVi7VNNPUVERERERGqAo6MjnTp1YtmyZdZlZWVlLFu2jB49etTpPpXx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RERERMTGKfATERERERGxcWrqKSIiIiIi9ZaBuutkxYZaeirjJyIiIiIiYuuU8RMRERERkXrLaKiY6urYtkIZPxERERERERunwE9ERERERMTGqamniIiIiIjUW4YTf+rq2LZCGT8REREREREbp8BPRERERETExqmpp4iIiIiI1FsGQ8VUV8e2Fcr4iYiIiIiI2Dhl/EREREREpN4ynJjq6ti2Qhk/ERERERERG6fAT0RERERExMapqaeIiIiIiNRbRgwY66iXFaMNNfZUxk9ERERERMTGKePXgJjs7HGy03/ZP+Xk5FDXVbAJQ1sG13UVbMZd81bXdRVsxjVDW9Z1FWyGvm9qxpGswrqugs1YPPvduq5Cg1duKa7rKlwQde5SM5TxExERERERsXEK/ERERERERGyc2nGIiIiIiEj9pbaeNUIZPxERERERERunjJ+IiIiIiNRbhhN/6urYtkIZPxERERERkRo0f/58oqKicHJyolu3bmzYsOGs63/xxRc0b94cJycn2rRpw48//lipPC8vj/HjxxMWFoazszMtW7bkjTfeOK86KfATERERERGpIQsXLmTixIlMmTKFLVu20K5dO4YMGUJKSkqV669Zs4brr7+eW2+9la1btzJixAhGjBjBzp07retMnDiRJUuW8NFHH7Fnzx4mTJjA+PHj+fbbb8+5Xgr8RERERESk/jKAoY6mC2np+corr3D77bczbtw4a2bOxcWF9957r8r158yZw9ChQ3n44Ydp0aIFzz77LB07dmTevHnWddasWcMtt9xC3759iYqK4o477qBdu3Z/m0k8nQI/ERERERGRs8jJyak0mc3mKtcrLi5m8+bNDBw40LrMaDQycOBA1q5dW+U2a9eurbQ+wJAhQyqt37NnT7799lsSEhIoLy/n999/Z//+/QwePPicz0GBn4iIiIiIyFmEh4fj6elpnWbMmFHlemlpaVgsFgIDAystDwwMJCkpqcptkpKS/nb9uXPn0rJlS8LCwnB0dGTo0KHMnz+f3r17n/M5qFdPERERERGpt+rDMH7x8fF4eHhYl5tMpotaj7lz57Ju3Tq+/fZbIiMj+eOPP7j33nsJCQk5I1tYHQV+IiIiIiIiZ+Hh4VEp8KuOn58fdnZ2JCcnV1qenJxMUFBQldsEBQWddf3CwkImT57M119/zeWXXw5A27Zt2bZtGzNnzjznwE9NPUVEREREpP4y1PF0HhwdHenUqRPLli2zLisrK2PZsmX06NGjym169OhRaX2ApUuXWtcvKSmhpKQEo7Fy6GZnZ0dZWdk5100ZPxERERERkRoyceJEbrnlFjp37kzXrl2ZPXs2+fn5jBs3DoCbb76Z0NBQ63OCDzzwAH369OHll1/m8ssv57PPPmPTpk289dZbQEW2sU+fPjz88MM4OzsTGRnJihUr+PDDD3nllVfOuV4K/ERERERERGrIqFGjSE1N5amnniIpKYn27duzZMkSawcucXFxlbJ3PXv25JNPPuGJJ55g8uTJNGnShG+++YbWrVtb1/nss894/PHHGTNmDBkZGURGRjJ9+nTuuuuuc66XAj8REREREam3DCf+1NWxL8T48eMZP358lWXLly8/Y9m1117LtddeW+3+goKCeP/99y+oLifpGT8REREREREbp4yfiIiIiIjUWwZDxVRXx7YVyviJiIiIiIjYOAV+IiIiIiIiNk5NPUVEREREpN66gOH0avTYtkIZPxERERERERunwE9ERERERMTGqamniIiIiIjUX2rrWSOU8RMREREREbFxyviJiIiIiEi9ZTjxp66ObSuU8RMREREREbFxCvxERERERERsnJp6ioiIiIhIvWUwVEx1dWxboYyfiIiIiIiIjVPGT0RERERE6i2N5lAzFPhJJQX5eXw493nWLvuRrIw0GjdvzZ2PTadZmw7VbvPnhtW89dJTHI3dh39QCNffOZFBI0Zby3/7/kvenzWNosJ8Bo0YzR2PPGstS06I4393XMechUtxdXOv1XOrTZ0ivRh7SSQtQzwI8DDxwCfb+W1PaqV1ov1deHBwEzpHeWNnNHAoJY8HP/uTpGxztfsd3CqA8QMaE+LlRFxGIbN+PsDKA+nW8lt6RTDukigA3lt5hA/XxFnL2oR58MQVzbnhrY1Yyspr9oTryEsvPs9T/3uce+97gJmvzK52va++/IJnpj7J0SNHiIlpwrQZLzD0smHW8lmvzGTWzBcBmPjwo0x48CFr2Yb165lw3z38sWY99vYN9yOyexM/7hnclLaR3gR5OTP2tTUs2XbcWp701sgqt3vmyz957Zf9VZZNGt6SScNbVlp2ICmHS5/6xTo/9dq2jOoZRYG5lOmLdrBoQ7y1bHinUK7tHsnN89f8k1O76GJ8XRjY1JdwLye8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fvwYxYtnNic5cyZn++5XGRoaan338UREREREb0Xxz0tTn60lmPj9i8DAQAQEBKBZs2YoWrQoAgMD8fz5c7i7u8PV1RWbNm2Cj48PYmNj4efnp/Y8UJMmTVCuXDn06tUL8+fPR2xsLMaPH6/Bb0NERERERIURm3r+CwsLCxw7dgytWrVCuXLlMGHCBCxcuBAtW7bE+vXrERUVBS8vL/To0QNDhw5F0aIvH6bW0dHBrl27kJSUhOrVq6Nfv36YOXOmBr8NEREREREVRqzx+xfu7u7Yv39/rvOqVq2Kc+fUe6br1KmT2vty5crh+HH1MYfYnw4RERER0dtR/POnqc/WFqzxIyIiIiIi0nKs8SMiIiIionxLoch8aeqztQVr/IiIiIiIiLQcEz8iIiIiIiItx6aeRERERESUb3EYv7zBGj8iIiIiIiItx8SPiIiIiIhIy7GpJxERERER5V9s65knWONHRERERESk5VjjR0RERERE+Zbinz9Nfba2YI0fERERERGRlmPiR0REREREpOXY1JOIiIiIiPIthSLzpanP1has8SMiIiIiItJyrPEjIiIiIqJ8i6M55A3W+BEREREREWk5Jn5ERERERERajk09iYiIiIgo/2JbzzzBGj8iIiIiIiItxxo/IiIiIiLKtxT//Gnqs7UFa/yIiIiIiIi0HBM/IiIiIiIiLcemnkRERERElH8pAAU7d/nPWONHRERERESk5Zj4ERERERERaTk29SQiIiIionyLw/jlDdb4ERERERERaTnW+BERERERUf7FKr88wRo/IiIiIiIiLcfEj4iIiIiISMuxqScREREREeVbin/+NPXZ2oI1fkRERERERFqONX5ERERERJRvKRSZL019trZgjR8REREREZGWY+JHRERERESk5djUswCZuCMYuoammg6jwKvgYqPpELTCkZvPNR2C1hjSpYqmQ9AaZayNNB2C1tgW/ETTIWiFyg48b+cVl0/aaTqEAk+ZkoDrwes0HcY7K4jD+K1cuRLz58/HkydP4OnpieXLl6N69eqvLb99+3ZMnDgRoaGhcHV1xdy5c9GqVSu1MtevX8eYMWNw9OhRpKenw8PDAzt27ECpUqXeKibW+BEREREREeWRX375BSNGjMDkyZNx8eJFeHp6onnz5nj27Fmu5U+dOoWuXbuib9++uHTpEtq1a4d27drh77//VpW5e/cu6tSpg/Lly+PIkSO4cuUKJk6cCCOjt7/hycSPiIiIiIgojyxatAj9+/dHnz594OHhgTVr1sDExAQbNmzItfzSpUvRokUL+Pn5wd3dHdOnT4eXlxdWrFihKjN+/Hi0atUK8+bNQ9WqVVG2bFm0adMGRYsWfeu4mPgREREREVH+pdDw6x2kpqbiwoULaNKkiWqajo4OmjRpgtOnT+e6zOnTp9XKA0Dz5s1V5TMyMvD777+jXLlyaN68OYoWLYoaNWrA39//nWJj4kdERERERPQGsbGxaq+UlJRcy0VERECpVKJYsWJq04sVK4YnT3J/dvrJkydvLP/s2TPEx8djzpw5aNGiBQ4ePIj27dujQ4cOOHr06Ft/B3buQkRERERE+Zbinz9NfTYAlCxZUm365MmTMWXKlI8SQ0ZGBgCgbdu2GD58OACgSpUqOHXqFNasWYP69eu/1XqY+BEREREREb1BWFgYLCwsVO8NDQ1zLWdrawtdXV08ffpUbfrTp09hb2+f6zL29vZvLG9raws9PT14eHiolXF3d8eJEyfe+juwqScREREREdEbWFhYqL1el/gZGBjA29sbAQEBqmkZGRkICAiAr69vrsv4+vqqlQeAQ4cOqcobGBigWrVquHnzplqZW7duwcnJ6a2/A2v8iIiIiIgo31IAUGhoIL/3+dgRI0agV69e8PHxQfXq1bFkyRIkJCSgT58+AICePXvC0dERs2fPBgAMGzYM9evXx8KFC9G6dWts3boV58+fx9q1a1Xr9PPzw2effYZ69eqhYcOG2L9/P3777TccOXLkreNi4kdERERERJRHPvvsMzx//hyTJk3CkydPUKVKFezfv1/VgcuDBw+go/Oy4WWtWrWwZcsWTJgwAePGjYOrqyv8/f1RsWJFVZn27dtjzZo1mD17NoYOHQo3Nzfs2LEDderUeeu4mPgREREREVG+9R6jKuTpZ7+PIUOGYMiQIbnOy62WrnPnzujcufMb1/nFF1/giy++eM+I+IwfERERERGR1mPiR0REREREpOXY1JOIiIiIiPIthUKDnbtoqo3pB8AaPyIiIiIiIi3HGj8iIiIiIsrHCmL3LvkPa/yIiIiIiIi0HBM/IiIiIiIiLcemnkRERERElG+xc5e8wRo/IiIiIiIiLcfEj4iIiIiISMuxqScREREREeVb7NMzb7DGj4iIiIiISMuxxo+IiIiIiPItdu6SN1jjR0REREREpOWY+BEREREREWk5NvUkIiIiIqJ8S/HPn6Y+W1uwxo+IiIiIiEjLscaPiIiIiIjyL47nkCdY40dERERERKTlmPgRERERERFpOTb1LMS8nSzRu44TPBwsUNTCEMO2BOHw9edqZUrbmWB4M1f4OFtBV0eBe8/iMXzrFTyJSXnteptVKIohjcvCwdIID14kYfGB2zh+O1I1v1ftUuhTxxkAsOF4KH489UA1r1IJC0z4pDz+b+05KDMkb7/wB1S+mCk+rVAMpW1MYG2ijwWH7+F8WIxqfidPe/iWtoKNiT7SMwQhkUn45dIj3IlIfO06O3nao1OV4mrTwmOSMdL/uup9Dx9H1HexRkp6BrZceISTIVGqeTWcLFGvrDXmH76Xh9/040tMiMePy+fgdMA+RL+IQNnyFTHw25lwq1T1tctcOXsSa+dPwv07N2Fn74CuA0egabvPVfMP7/0VGxfPQHJSApq2+xwDRk9XzXsa/gDjB3TB0l8OwdTM/IN+tw+plKURajpZobiFIcwN9bAt6DFuPU9QzXezM4V3iSKwNzeEiYEu1p15gKfxqW9cZ+Xi5mhToZjatHRlBub89XIfq1nKEr7OlgCAU6HRCHwQrZrnYGGIluXtsOHcQ0jB+Xnj+sUz+P3H7xBy/QqiI55h+IJ18GnYQjVfRLBjzUL8tetnJMTHoJxnNXwxdhbsS5V+43oPbvsev//4HWIin6OUqzt6jZ6GshVf7tc/LZqKY79th6GxCT4fMha1W7VXzQs8tBfHf9+BUUs25v0X/kDK2ZmgRXk7OFsbw9JYH8uP38el8FjV/LYVi6J6qSKwNjFAeobg/osk7LzyBPdeJL1xvY1crNHC3Q5FjPQQFp2MzRceISTbMp9VKY7apS2RqszAr0FPceZ+tGqeT0kL1HK2wrLj9/P8+35IjkWM4F2iCIqaGcLMUA+/XX2Cu5EvzydlbUxQ2cECRc0MYayvi80XHuJ5wpt/3wDgamsKX2crWBjpITopHSfuRSI06uW29CpRBD4lLAEA58OicTH85XnO3twQDV1ssfVSOArQz5vXQgUEW3rmDdb4FWLGBrq49SQeM/feyHV+CStj/NjPByHPE/DFhgvouOIMvjsagtT0jNeu07NkEcztXBE7LzxC59WBOHz9GZb+nydcipoCAMoVM8PgRmUxelswxmwPxtdNysK1WOY8XR0FJrZxx7TfbhS4A52Rni7uRyVhY2BYrvMfx6ZgY+BDjN5zA1P238bz+BSMa+oCc8M333sJi0rCwF+CVa8pf9xSzfMqYYHaZaww69AdbL7wCANrlYK5oS4AwFhfB59XLY4Nr4mnIFk6aTgunT6KUbNXYvWuI/Cq1QDj+ndCxNPHuZZ/8vA+Jg3uBs/qtbHy18No12MglkwejgsnDwMAYqIisXTyCPQbNQUzvtuGw3t3IPDIQdXyK2aMQZ9vJhTopA8A9HV18Cw+BftvPM91voGuDsKik3D4TmSu818nOV2JxcdCVK/lJ19eMBc1M0D9stbYFfwUu4KfokFZa9iZGgDIHAC3lXtR7LvxvEAlfQCQkpSEUuXc0XvMjFzn7/1hNQ5s3Yg+42Zh2g+/wdDYGHOGdEdqSvJr13n64B5sXjQdHQZ8gxmb96FUOQ/MGdIDMS8iAAAXjx3Cqf278e3Kzeg6dBzWzfBDXNQLAEBiXCy2rZr32njyK0M9HYRFJ+On849ynf8kLgWbLzzCpD9uYfafdxGRkIoRDUqrjmu5qVayCD6rWhx7/n6GqQfuICw6WW0ZTwdz1HQqgkVHQrH98hP0ruYIM4OXx8kOlezx04Xc48nP9HUUeJ6Qir/uROQ+X1cHj2KScSLkxVuvs7iFIVq6F8XVJ3HYfCEcdyMS8GkFe9iY6AMAbE0N4OtkhX03nuKPG09Ry9lKNU8BoJGrLQ7fjihQSR/AayEqXFjjV4iduB2JE7dff9E3tGlZHL8VicUH76imPYx6853X7r4lcfJOJL7/52JwRcA91Cxrg641SmL6bzdQ2s4Et57G4+w/NVO3nsSjtK0pbj9NQO86TrgQGoWr2e4AFxSXw2Nx+Q1xZ6+JA4BN58PRqJwtnKyM8PeT+NcupxRBTHJ6rvMcixjh2pN43ItMwr3IJPSs5gg7M0PEpSSim7cjDt2KQGRC2vt9oXwiJTkJJ/7ci8nLfkQlH18AQPfBoxF49CB+/+V79Bo6Nscyv2/7AfaOpdDfbxoAoFTZcrh6MRC7fvwO3rUb4cnD+zA1M0f9lu0AAJ7VaiPs3i3UaNAMR/bthJ6ePmo3/eSjfccP5W5koloNwKuCn8QBAIoYveNpQICEVGWus2xMDPA0PlVVQ/AsPhW2pvp4npAKXycrPIhKwuPY198hz6+q1G6IKrUb5jpPRLB/y3q06/s1fBo0BwB8NXUJBjXzwoUjB+DbvG2uy/3x0zo0bN8V9dt8BgD4YtxsXD4RgKO7f0GbPoMRHnIH7t41UcbDE2U8PLFp4VQ8e/QA5lbW+HnZLDTp1AO2xR0/zBf+QIIfxyP48euPd4H3Y9Teb730GPXKWqOEpRGuP03IdZnm5W1x7G4UTvxzjP3xXDgqFzdH3TLW2Hf9OYpbGOLGswSERiUhNCoJn3sVh62ZAeJfJKGzpz3+uhOJF4kF7ziZ9X1e58azzO1s8S83F7Or6lAEoS8SceFh5v+H0/ejUMrKGJ4ORXD4TgSsjPURkZCKh9GZNzQiElJhbWKAyMQ0+JS0RHhMMp7GF7zfN6+FqDBhjR/lSqEA6pWzxf3IRKzpWRVHxtTD5gHV0Mjd7o3LeZa0xJm76ncYT92JhGepIgCAW0/j4WxjAvsihihexAjOtia4/SweJayM0a5qcSz/8+4H+075ha6OAo3L2SIhNR33/+XkYW9uiFWdK2JpBw8MqesEG1N91bz7UUkoY2MCUwNdlLY2hoGuDp7GpcCtqClK2xjjj+u51/QUJEqlEhlKJfQNDdWmGxga4erFwFyXuRF0HlVq1lOb5l27Ia4HnQcAOJQqg+TkJNy5Hoy4mCjcunoJpd08EBcTjR+Xz8GgcbM/zJfREga6Ovi6thOG1nFCZ0972P5TowcAz+JTYGOiDwtDPRQx0oO1iT6exafCylgPnsXNceTuu9UuFgTPwx8gOvIZKtSoq5pmYm6BshWr4PaVi7kuk56WipAbwahYvY5qmo6ODipWr4vbwRcAAE6u7gi5dgUJsdEIuX4FqSnJsC/pjJuXziL0RjCaf/7Fh/1iGqaro0D9stZITFUiLCr3mlNdHQWcrIxx7enLZFIAXHsaj7I2JgCAsOhkOFsbw0RfB05WRjDQ1cGzuBS42prAycoYf77hgr+wsbcwQli0+jnpflQSiltkHn8jElJhZawPc0NdmBvqwfKfRLCIkR48ipnhVOjb1y4WFLwWyj8UCs2+tAVr/ChX1qYGMDXUwxd1nbHiz7tYfPA26rjaYPHnldF34wWcD43OdTlbMwNEvvKcUGR8KmzNMi8OQ54nYumfd7C2txcAYMmhOwh5noh1vati8cE7qO1qg68alkF6hmDu7zdxIduzGAWdVwkLDK3nDAM9HUQnpWHmwbuIS8m95gQA7kQkYvXJB3gcmwxLY3108rTHlBbl4Lf7OpLTM3DlURxO3HuBma3dkKrMwOqT95GcnoG+NUti9Yn7aOZmi+bl7RCXko51p8NUd2kLEhNTM7h7+uDnNYtQqkw5WNrY4ei+nbgRdB7FX/P8VFTEM1jZqJ+ULW3skBgfh5TkJJgXscTImcuxcNwQpCQnofGnXeBduxEWT/wGn/5fXzwJf4ApX/eAMj0d3Qb5oW6zTz/GVy0QIhPT8Nv1Z3gWlwJDPR3UdLJC72qO+O70A8SlKBGZmIa/7kSim5cDAOCvO5GITExDt6oOCLgTiTI2JqhXxhoZAhy8+RwPCuA++aroyMwbLEWsbdWmF7G2Q3Tks1yXiYt+gQylEkVe2U8tbGzxKDSzVqFyrQao3aoDJvb4BPqGRvhyyiIYGptgw+xx+HLqIvz56yYc/GUjzCyt0W/8HJQo6/YBvt3H5+lgjoG+JWGgp4OYpHQsOBKC+NfUMJsb6EJXR4HYV1pFxCanq5KVq0/iceZ+NCY2c0GaUrD+zEOkKAU9fByxPjAMDV1s0MTVBnEp6fjhXDgeFcAa6bxiaqCLxFe2dWKqEib/NI2NSkrDydAXaF8p89nzk6EvEJWUhg6V7HEi5AWcrExQ08kKGSI4ejcS4TEF//fNayHSNkz83sOUKVPg7++Py5cvazqUD0bnn7sbR248x6bTmQ8c33wSD89SluhcrcRrD3ZvY/u5cGw/F65636ZKcSSkKBH0IAZ7hvmi65qzKFbECPO6VEKLRSeQptSONu5Xn8RjzG83YG6oh8blbPFNfWdM2Hcrx0VLluxNRx9EJePO80Ss6FQBvs6W+OtO5p3EX4Oe4NegJ6pyHT3t8ffjOChF0L6yPfx234BXSQsMquOEcXtvftgv+IGMmr0Siyd9g+6NKkNHVxcu7pVRv2V73Ll25b3XWbtJa9Ru0lr1/sq5Uwi5dQ1fjZuFvq1qYMy872BtWxTDujZHJe+asLR5893dwiI8JlntYu5hzGN86VsKXo5FcPRe5j55MTwWF7Ptu5WLmyNFmYHwmGR85VsK688+hIWRHtpXsseKE6HQkp/3B9Fx4Ah0HDhC9X7H2sWoWKMOdPX04b9+Geb8cgiXjv+J1ZOGY+bmfRqMNO9cfxqPKQfuwMxQF/XLWuOrWqUw49CdN94k+ze7/36G3X+/TMLbVCiKa0/jocwAPvWww6T9t+HpYIF+NUtiWrbmfJRT8OM4BD+OU713L2aGVKXgcWwKelUrgZ8vhsPMUA8tyxfFxrMPCvzvm9dC+Yfinz9Nfba2YFPP9zBq1CgEBARoOowPKioxDWnKDNx9pv5cRcjzBBQvYvTa5SLiU2FjZqA2zcbMABGv6S3Q0kQfXzUsjdm/30Slkha4H5mIBy+ScC4kCnq6Cjjbmvz3L5NPpKRn4GlcKu5EJOK7Uw+gFEFDF5u3Xj4xTYnHsckoZmGY63wHC0PUKWOFXy49hkcxc1x/Go+4lHScCY1GGRsTGOkVzJ+7Q6nSmP/9buw6G4JNf17G0q0HoExPh30Jp1zLW9kWRVSkejPX6MjnMDEzh6GRcY7yqakpWDljDIZOXoDHD0KgVCpRuVotlCjtAkensrgRnHtzPQIyBHgSlwprE/1c5xvr66BuaWscuPkcDhaGiExMQ1RSGu5HJUFHoYC1iUGuyxUkWTcFsjplyRLz4jksbYrmuoy5pTV0dHUR88p+GhsZgSK2ud9keBRyByf37UTnr/xw7fxplK9aAxZWNqjR9FOE3ghGUsLrn50rSFKVgmfxqbgXmYSNZ8ORIYK6ZaxzLRuXqoQyQ2DxynOqFkZ6iEnK/YaavbkhfJ0tsSv4KcoXNcWt5wmIS1Hi7INoOFsbF9jjZF5IyFa7l8Ukl1rALEZ6OqhZygpH7kTA3twQUYlpiE5Ox8OYZOgoFLA0zv24UJDwWoi0TaE8wqWm/nuXxrkREaSnp8PMzAw2Nm9/wV4QpSsFV8NjcxxsnGxM8PgNzTeCwqJR45WTtG9ZawQ9iMm1/OiW5bDpVBiexqZAR6GAnu7LXVJPRwEdbWpY/QodhQL6um///Qz1dFDM3BDRiblf0PTzLYlN58KRkp4BHZ3M518AQPefbVjQt6WRiSms7YohLiYaF079hZqNWuRarrynD4ICj6tNu3T6KNw9fXItv/W7xfCp0xAuHpWhzMiAMv3l9lWmpyFD+f41DdpOgcyePF9XG9OsnC0Cw6IRl6KEjkKh2ieBzDvpOgV7lwQA2DmWgqVNUVw9e0I1LTE+Dnf/vgzXyl65LqOnb4DS5Svh6rmTqmkZGRn4+9wJuFbyzlFeRLB+1rfoPmISjExMIRlKKNMzOyTJ+m9GhnbupwoFXnucVGYI7kclwf2f3hCBzH3SvZjZazs26lXNAVsvPUZKegYUimzHyX/+W8APk//Jk9hklLRUvzlWytL4tR0y1S9rg4vhMYhPVUKhAHRy/L4L/sbktRBpmwKT+P3666+oVKkSjI2NYWNjgyZNmiAhIQENGjTAN998o1a2Xbt26N27t+q9s7Mzpk+fjp49e8LCwgIDBgxAaGgoFAoFtm7dilq1asHIyAgVK1bE0aNHVcsdOXIECoUCf/zxB7y9vWFoaIgTJ05gypQpqFKlilq56tWrw9TUFJaWlqhduzbu33/Zxfnu3bvh5eUFIyMjlClTBlOnTkV6eu4X7x+TsYEu3OzN4GZvBgBwtDSGm70Z7Itk1ihtPHEfLSoWQ0dvB5S0NkbXGiVQ380WW7MNETCzYwUMa1pW9f6n02Go7WqDnrVKobStCb5qWAYVHCzwcy7DCviWtYaTjQl+Pps572p4LErbmqCOqw06+ThCmSEIfcM4d/mJoZ4OnKyM4WSVedIsam4AJytj2Jjqw1Avc2gFF1sT2Jrqo7S1MQbWKgUrE3218aQmNHNB8/IvnxPq7uMA92JmsDM1QDk7U4xsWBoZIjl6CAWARq42iEtOx8WHmU3sbj5LQEV7c7jYmqCVhx3CopOQmFYwLwwvnDyM8ycO48nD+7h46gi+/aI9SpR2RbN2XQEAGxfPwIKxg1XlW3fphccP72P9wqkIu3cbe7duwLEDu9G+58Ac675/9yaO7fdHj8FjAAAlS7tAR0cHB3ZsxtmjhxAWcgflso2rVpDo6ypQzMwAxf6562xprIdiZgaqXv6M9HRQzMxA1TmLjWlmWdNsd/zbVCiKhmVf3uSqW9oKZayNYWmsB3tzQ7SrWAxFjPRw+VHOi5nS1sawNjFQjWf5KDYZNib6KGtjgqqOFhDJfGawIEhOTEDozasIvXkVAPD8URhCb15FxONwKBQKtPi/vvBfvxwXjh7Eg9vXsWbSN7C0Kwbvf3r5BIBZX36Og798r3rfsnt//LXrZxz7bTvCQ25j4+xxSElKQv02XXJ8/l+7foa5lQ286jUFAJTz9MHVc6dwO/gi/tj8PziWKQdT8yIfdiPkAUM9HZS0NEJJy8yaEltTfZS0NIK1iT4MdBXoULkYytgYw8ZEH05WRuhT3RFWxvo4l+1ieVTD0mjk+nKfPHAjAvXLWqOWsyWKWxiih48DDPV0cOJezuNkvTJWiEtRIuhRZlPFOxGJKF/UDGVsjNHMzRbhMclISnt9F/35ib6OAnamBqrhUiyM9GFnaqAaxsJQTwd2pgaq2ngrk8z5Jvovf9/N3OxQ29lK9f7Soxg4WZnAy7EIrIz1UdPJCsXMDRGUy++7lKUxrIz1EfQo85zzNC4F1sb6cLYyRkV7cwiAF0kF4/fNa6ECQqHhl5YoEM/4PX78GF27dsW8efPQvn17xMXF4fjx45B3GAxqwYIFmDRpEiZPnqw23c/PD0uWLIGHhwcWLVqETz/9FCEhIWo1et9++y0WLFiAMmXKwMrKCkeOHFHNS09PR7t27dC/f3/8/PPPSE1NxdmzZ6H45+7M8ePH0bNnTyxbtgx169bF3bt3MWDAAADIEUuWlJQUpKS8vMMWG/thuvSt4GCBjX1f3l0e3aocAGD3xUeYsOsaDl9/jmm/3UC/es74trUbQiMSMWJrMC5lOwkXL2IEyTbOTFBYDL7d/jeGNCmLYU1dcD8yEcO2BOHOK80kDPV0MPYTN/j9Eqwa0+tpbApm/34T09t7IFWZgfE7ryLlDePk5CdlbUwwqYWr6n3PaiUAAEfvROJ/p8PgUMQII1ysYW6oh7gUJe5FJGDKH7fVOlwpZm6gNq6ftYkBvq7nDHNDXcQmp+PmswRM3HcLcSnqNw2KGOmhfeVimLTv5Rh/dyMSsffqM4xpXBaxyelYlW2stYImIS4OG5fMQMTTxzAvYok6TT9Br6HjoKefeUHzIuIpnj1++ZyEfQknTFu5Gd/Nmwj/n9bBtlhxfDN1MbxrN1Jbr4hg2ZSR6O83DUYmmTUGhkbGGDFjGVbN/BZpqSkYNG42bIsV/3hfNg85WBihh/fL7v6blctsQhj0KBa/XXuGcnamaoOxd6hkDwA4du8Fjv3zvF4RI321MfeM9HXR2r0oTA31kJymxOO4FHx//iEiXhk2RE9HgRZudtgZ/PL507gUJQ7cjMCnHkWhzBDsufoU6QVkjKp7165g5sCXCdlPizKHCqn7SSd8OXUxPun1FVKSErF+5rdIjItFuSrVMGb5JhgYvmwK9vThfcRFv+zlz7dZG8RFvcCvaxYiJvI5nMp5YMzyTTk6fImJfI7dG5ZjysZdqmllK1ZFq+4DsGBYL1hY2eLLqYs+1FfPU87WxhjTqIzqfdd/OgE6ERKFH8+Fo7i5IWrXdoKZoS4SUpUIiUzC7IB7ah2uFDUzUBvX71xYDMyN9NCuUjHVAO6Lj4Qg9pXjpIWhHj6pUBSzDr3sLTHkRRIO3IzAN/WcEZucjvWBDz/UV89zxcwN0cnTQfW+/j83aK49icPBW89R1sYEzdxeNjVu5Z75Wz9zPwpn7mcmxRaGesg+6N7j2BTsv/EMvs5WqFXaGtFJafjt6pMcN2h0dRRo4GKDP66/fG4yPlWJv+5GoqmbHZQZggM3nxWYMeh4LUSFiULeJXvSkIsXL8Lb2xuhoaFwclJ/rqdBgwaoUqUKlixZoprWrl07WFpa4vvvvweQWeNXtWpV7Nr18sQZGhqK0qVLY86cORgzJvNuf3p6OkqXLo2vv/4ao0ePxpEjR9CwYUP4+/ujbduXYzFl79zlxYsXsLGxwZEjR1C/fv0csTdp0gSNGzfG2LEvxxv76aefMHr0aDx6lPugsVOmTMHUqVNzTHf384euoWkuS9C7qPAOz9XR6/X2KaHpELTG+ce5N/+hd1fG+vXP3dC7+fNWzlozeneVHXjezivrD93TdAgFnjIlAdfnt0NMTAwsLCw0Hc6/io2NRZEiRXAvPBLmGoo3LjYWZRxtCsw2e5MC0dTT09MTjRs3RqVKldC5c2esW7cOUVHvdkLy8cn9+R5fX1/Vv/X09ODj44Pr16+/1bIAYG1tjd69e6N58+b49NNPsXTpUjx+/Fg1PygoCNOmTYOZmZnq1b9/fzx+/BiJiblX3Y8dOxYxMTGqV1hYzqYBREREREREb6tAJH66uro4dOgQ/vjjD3h4eGD58uVwc3NDSEgIdHR0cjT5TEvL2a7c1PT977j927IbN27E6dOnUatWLfzyyy8oV64czpw5AwCIj4/H1KlTcfnyZdUrODgYt2/fhpFR7nemDQ0NYWFhofYiIiIiIiJ6XwUi8QMAhUKB2rVrY+rUqbh06RIMDAywa9cu2NnZqdWwKZVK/P3332+93qwEDchs6nnhwgW4u7u/c3xVq1bF2LFjcerUKVSsWBFbtmwBAHh5eeHmzZtwcXHJ8dLRKTCbn4iIiIhIIxQKzb60RYHo3CUwMBABAQFo1qwZihYtisDAQDx//hzu7u4wNTXFiBEj8Pvvv6Ns2bJYtGgRoqOj33rdK1euhKurK9zd3bF48WJERUXhiy++eOvlQ0JCsHbtWrRp0wYODg64efMmbt++jZ49ewIAJk2ahE8++QSlSpVCp06doKOjg6CgIPz999+YMWPGu24KIiIiIiKid1YgEj8LCwscO3YMS5YsQWxsLJycnLBw4UK0bNkSaWlpCAoKQs+ePaGnp4fhw4ejYcOGb73uOXPmYM6cObh8+TJcXFywZ88e2Nra/vuC/zAxMcGNGzfwww8/IDIyEsWLF8fgwYMxcGBm1/HNmzfH3r17MW3aNMydOxf6+vooX748+vXr987bgYiIiIio8FFAobFxFbSnyq9A9Or5IWT16nnp0iW1Mfnyo6wejdirZ95gr555g7165h326pl32Ktn3mGvnnmDvXrmHfbq+d8V1F49Qx690Fi8sbGxKO1gXWC22ZvwITMiIiIiIiItVyCaehIRERERUeGkyU5W2LmLFnB2ds4xDAQREREREZE2YlNPIiIiIiIiLcfEj4iIiIiISMsx8SMiIiIiItJyhfYZPyIiIiIiyv/YuUveYI0fERERERGRlmPiR0REREREpOXY1JOIiIiIiPItxT9/mvpsbcEaPyIiIiIiIi3HGj8iIiIiIsq32LlL3mCNHxERERERkZZj4kdERERERKTl2NSTiIiIiIjyLcU/L019trZgjR8REREREZGWY+JHRERERESk5djUk4iIiIiI8i+29cwTrPEjIiIiIiLScqzxIyIiIiKifEvxz5+mPltbsMaPiIiIiIhIyzHxIyIiIiIi0nJs6klERERERPmWQpH50tRnawvW+BEREREREWk51vgREREREVG+xdEc8gZr/IiIiIiIiLQcEz8iIiIiIiItx6aeRERERESUf7GtZ55gjR8REREREZGWY40fERERERHlW4p//jT12dqCNX5ERERERER5aOXKlXB2doaRkRFq1KiBs2fPvrH89u3bUb58eRgZGaFSpUrYt2/fa8t++eWXUCgUWLJkyTvFxMSPiIiIiIgoj/zyyy8YMWIEJk+ejIsXL8LT0xPNmzfHs2fPci1/6tQpdO3aFX379sWlS5fQrl07tGvXDn///XeOsrt27cKZM2fg4ODwznEx8SMiIiIionxLodDs610tWrQI/fv3R58+feDh4YE1a9bAxMQEGzZsyLX80qVL0aJFC/j5+cHd3R3Tp0+Hl5cXVqxYoVYuPDwcX3/9NTZv3gx9ff13jouJHxERERERUR5ITU3FhQsX0KRJE9U0HR0dNGnS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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "y_true = test_data.classes\n", + "y_pred_prob = denseNetModel.predict(test_data, steps=len(test_data))\n", + "\n", + "y_pred = np.argmax(y_pred_prob, axis=1)\n", + "\n", + "cm = confusion_matrix(y_true, y_pred)\n", + "\n", + "\n", + "\n", + "# Normalize the confusion matrix by row (i.e. true label)\n", + "cm_norm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n", + "\n", + "# Create a plot\n", + "plt.figure(figsize=(10, 8))\n", + "plt.imshow(cm_norm, interpolation='nearest', cmap=plt.cm.Blues)\n", + "plt.title('Normalized Confusion Matrix with Accuracy Scores')\n", + "plt.colorbar()\n", + "\n", + "# Define tick marks and labels (using class names from your generator)\n", + "tick_marks = np.arange(len(test_data.class_indices))\n", + "class_labels = list(test_data.class_indices.keys())\n", + "plt.xticks(tick_marks, class_labels, rotation=45)\n", + "plt.yticks(tick_marks, class_labels)\n", + "\n", + "# Add text annotations in each cell: show the normalized value as a percentage.\n", + "thresh = cm_norm.max() / 2.0\n", + "for i in range(cm_norm.shape[0]):\n", + " for j in range(cm_norm.shape[1]):\n", + " plt.text(j, i, f'{cm_norm[i, j]*100:.1f}%', \n", + " horizontalalignment=\"center\",\n", + " color=\"white\" if cm_norm[i, j] > thresh else \"black\")\n", + "\n", + "plt.ylabel('True Label')\n", + "plt.xlabel('Predicted Label')\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2684696a-e86d-4cfe-9c25-ead0e24b30ea", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7cf2883f-1c5f-469b-ba86-4967e275fb80", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "432ef0ae-5a7b-4e7c-acf1-dac4aba53a3f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "044b7021-7baa-4aa9-bac2-60b9322a87ba", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting huggingface_hub\n", + " Downloading huggingface_hub-0.30.1-py3-none-any.whl.metadata (13 kB)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from huggingface_hub) (3.9.0)\n", + "Collecting fsspec>=2023.5.0 (from huggingface_hub)\n", + " Downloading fsspec-2025.3.2-py3-none-any.whl.metadata (11 kB)\n", + "Requirement already satisfied: packaging>=20.9 in /usr/local/lib/python3.10/dist-packages (from huggingface_hub) (23.2)\n", + "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from huggingface_hub) (6.0.1)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from huggingface_hub) (2.31.0)\n", + "Collecting tqdm>=4.42.1 (from huggingface_hub)\n", + " Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.7/57.7 kB\u001b[0m \u001b[31m1.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface_hub) (4.13.1)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->huggingface_hub) (2.1.1)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->huggingface_hub) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->huggingface_hub) (1.26.13)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->huggingface_hub) (2022.12.7)\n", + "Downloading huggingface_hub-0.30.1-py3-none-any.whl (481 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m481.2/481.2 kB\u001b[0m \u001b[31m7.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hDownloading fsspec-2025.3.2-py3-none-any.whl (194 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m194.4/194.4 kB\u001b[0m \u001b[31m49.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m78.5/78.5 kB\u001b[0m \u001b[31m37.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: tqdm, fsspec, huggingface_hub\n", + " Attempting uninstall: fsspec\n", + " Found existing installation: fsspec 2023.4.0\n", + " Uninstalling fsspec-2023.4.0:\n", + " Successfully uninstalled fsspec-2023.4.0\n", + "Successfully installed fsspec-2025.3.2 huggingface_hub-0.30.1 tqdm-4.67.1\n", + "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n", + "\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython -m pip install --upgrade pip\u001b[0m\n" + ] + } + ], + "source": [ + "!pip install huggingface_hub" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c7e57afb-e0b7-4cca-b289-dd17a0248db2", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "983c3825-e6d9-4859-bb1c-abd0a99e4aa8", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "31a89963105c4644ba7e108a64ae9146", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(HTML(value='
Model: \"sequential_2\"\n", + "\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_2\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ densenet121 (Functional)        │ (None, 7, 7, 1024)     │     7,037,504 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ global_average_pooling2d_2      │ (None, 1024)           │             0 │\n",
+       "│ (GlobalAveragePooling2D)        │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_4           │ (None, 1024)           │         4,096 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_4 (Dropout)             │ (None, 1024)           │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_4 (Dense)                 │ (None, 128)            │       131,200 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_5           │ (None, 128)            │           512 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_5 (Dropout)             │ (None, 128)            │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_5 (Dense)                 │ (None, 8)              │         1,032 │\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", + "│ densenet121 (\u001b[38;5;33mFunctional\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;34m7,037,504\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ global_average_pooling2d_2 │ (\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", + "│ batch_normalization_4 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m4,096\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_4 (\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_4 (\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", + "│ batch_normalization_5 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_5 (\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_5 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m) │ \u001b[38;5;34m1,032\u001b[0m │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 7,443,418 (28.39 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m7,443,418\u001b[0m (28.39 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 134,536 (525.53 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m134,536\u001b[0m (525.53 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 7,039,808 (26.85 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m7,039,808\u001b[0m (26.85 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Optimizer params: 269,074 (1.03 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Optimizer params: \u001b[0m\u001b[38;5;34m269,074\u001b[0m (1.03 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "denseNetModel.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "11c8b51f-a4d8-4061-8ce6-9390c47ec885", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for layer in denseNetModel.layers:\n", + " if layer.name == \"densenet121\":\n", + " for l in layer.layers:\n", + " if l.name.startswith(\"conv5_\"):\n", + " print(l)\n", + " l.trainable=True" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "e462dc38-e929-4d3a-baa9-97c269825b50", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_2\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_2\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ densenet121 (Functional)        │ (None, 7, 7, 1024)     │     7,037,504 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ global_average_pooling2d_2      │ (None, 1024)           │             0 │\n",
+       "│ (GlobalAveragePooling2D)        │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_4           │ (None, 1024)           │         4,096 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_4 (Dropout)             │ (None, 1024)           │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_4 (Dense)                 │ (None, 128)            │       131,200 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_5           │ (None, 128)            │           512 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_5 (Dropout)             │ (None, 128)            │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_5 (Dense)                 │ (None, 8)              │         1,032 │\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", + "│ densenet121 (\u001b[38;5;33mFunctional\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;34m7,037,504\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ global_average_pooling2d_2 │ (\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", + "│ batch_normalization_4 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m4,096\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_4 (\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_4 (\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", + "│ batch_normalization_5 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_5 (\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_5 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m) │ \u001b[38;5;34m1,032\u001b[0m │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 7,443,418 (28.39 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m7,443,418\u001b[0m (28.39 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 2,292,616 (8.75 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m2,292,616\u001b[0m (8.75 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 4,881,728 (18.62 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m4,881,728\u001b[0m (18.62 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Optimizer params: 269,074 (1.03 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Optimizer params: \u001b[0m\u001b[38;5;34m269,074\u001b[0m (1.03 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "denseNetModel.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "8477aac8-cb92-4273-9669-23a997860e34", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.10/dist-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": [ + "Epoch 1/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m271s\u001b[0m 722ms/step - accuracy: 0.1363 - loss: 2.8922 - val_accuracy: 0.1437 - val_loss: 64.6381\n", + "Epoch 2/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m190s\u001b[0m 601ms/step - accuracy: 0.1422 - loss: 2.7341 - val_accuracy: 0.1356 - val_loss: 208.2642\n", + "Epoch 3/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m188s\u001b[0m 593ms/step - accuracy: 0.1491 - loss: 2.6180 - val_accuracy: 0.1306 - val_loss: 246.9921\n", + "Epoch 4/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m209s\u001b[0m 660ms/step - accuracy: 0.1545 - loss: 2.5654 - val_accuracy: 0.1294 - val_loss: 243.6077\n", + "Epoch 5/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m191s\u001b[0m 604ms/step - accuracy: 0.1646 - loss: 2.4992 - val_accuracy: 0.1312 - val_loss: 253.8091\n", + "Epoch 6/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m190s\u001b[0m 599ms/step - accuracy: 0.1531 - loss: 2.5091 - val_accuracy: 0.1294 - val_loss: 250.4355\n", + "Epoch 7/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m186s\u001b[0m 587ms/step - accuracy: 0.1691 - loss: 2.4586 - val_accuracy: 0.1406 - val_loss: 235.1360\n", + "Epoch 8/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m179s\u001b[0m 563ms/step - accuracy: 0.1695 - loss: 2.4533 - val_accuracy: 0.1363 - val_loss: 222.4384\n", + "Epoch 9/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m183s\u001b[0m 578ms/step - accuracy: 0.1735 - loss: 2.4251 - val_accuracy: 0.1287 - val_loss: 220.6841\n", + "Epoch 10/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m187s\u001b[0m 591ms/step - accuracy: 0.1774 - loss: 2.4184 - val_accuracy: 0.1262 - val_loss: 226.7226\n", + "Epoch 11/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m189s\u001b[0m 597ms/step - accuracy: 0.1723 - loss: 2.3866 - val_accuracy: 0.1388 - val_loss: 223.7783\n", + "Epoch 12/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m188s\u001b[0m 591ms/step - accuracy: 0.1812 - loss: 2.3605 - val_accuracy: 0.1400 - val_loss: 225.7059\n", + "Epoch 13/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m179s\u001b[0m 564ms/step - accuracy: 0.1751 - loss: 2.3654 - val_accuracy: 0.1450 - val_loss: 221.1069\n", + "Epoch 14/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m177s\u001b[0m 558ms/step - accuracy: 0.1742 - loss: 2.3470 - val_accuracy: 0.1494 - val_loss: 205.9371\n", + "Epoch 15/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━���\u001b[0m\u001b[37m\u001b[0m \u001b[1m167s\u001b[0m 525ms/step - accuracy: 0.1725 - loss: 2.3235 - val_accuracy: 0.1475 - val_loss: 207.9428\n", + "Epoch 16/30\n", + "\u001b[1m123/317\u001b[0m \u001b[32m━━━━━━━\u001b[0m\u001b[37m━━━━━━━━━━━━━\u001b[0m \u001b[1m1:33\u001b[0m 480ms/step - accuracy: 0.1813 - loss: 2.2628" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[36], line 7\u001b[0m\n\u001b[1;32m 1\u001b[0m denseNetModel\u001b[38;5;241m.\u001b[39mcompile(\n\u001b[1;32m 2\u001b[0m loss\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcategorical_crossentropy\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 3\u001b[0m optimizer \u001b[38;5;241m=\u001b[39m tensorflow\u001b[38;5;241m.\u001b[39mkeras\u001b[38;5;241m.\u001b[39moptimizers\u001b[38;5;241m.\u001b[39mAdam(learning_rate\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1e-5\u001b[39m),\n\u001b[1;32m 4\u001b[0m metrics\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124maccuracy\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 5\u001b[0m )\n\u001b[0;32m----> 7\u001b[0m conv5UnfreezeHist_denseNet \u001b[38;5;241m=\u001b[39m \u001b[43mdenseNetModel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 8\u001b[0m \u001b[43m \u001b[49m\u001b[43mtrain_data\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[43m \u001b[49m\u001b[43mepochs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 10\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalidation_data\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtest_data\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 11\u001b[0m \u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[43mcheckpoint\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 12\u001b[0m \u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/keras/src/utils/traceback_utils.py:117\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 115\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 116\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 117\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 118\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 119\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", + "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/keras/src/backend/tensorflow/trainer.py:371\u001b[0m, in \u001b[0;36mTensorFlowTrainer.fit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq)\u001b[0m\n\u001b[1;32m 369\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m step, iterator \u001b[38;5;129;01min\u001b[39;00m epoch_iterator:\n\u001b[1;32m 370\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_begin(step)\n\u001b[0;32m--> 371\u001b[0m logs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrain_function\u001b[49m\u001b[43m(\u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 372\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_end(step, logs)\n\u001b[1;32m 373\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstop_training:\n", + "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/keras/src/backend/tensorflow/trainer.py:219\u001b[0m, in \u001b[0;36mTensorFlowTrainer._make_function..function\u001b[0;34m(iterator)\u001b[0m\n\u001b[1;32m 215\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfunction\u001b[39m(iterator):\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\n\u001b[1;32m 217\u001b[0m iterator, (tf\u001b[38;5;241m.\u001b[39mdata\u001b[38;5;241m.\u001b[39mIterator, tf\u001b[38;5;241m.\u001b[39mdistribute\u001b[38;5;241m.\u001b[39mDistributedIterator)\n\u001b[1;32m 218\u001b[0m ):\n\u001b[0;32m--> 219\u001b[0m opt_outputs \u001b[38;5;241m=\u001b[39m \u001b[43mmulti_step_on_iterator\u001b[49m\u001b[43m(\u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 220\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m opt_outputs\u001b[38;5;241m.\u001b[39mhas_value():\n\u001b[1;32m 221\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m\n", + "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/util/traceback_utils.py:150\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 148\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 150\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 151\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 152\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", + "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:833\u001b[0m, in \u001b[0;36mFunction.__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 830\u001b[0m compiler \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mxla\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnonXla\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 832\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m OptionalXlaContext(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile):\n\u001b[0;32m--> 833\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 835\u001b[0m new_tracing_count \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexperimental_get_tracing_count()\n\u001b[1;32m 836\u001b[0m without_tracing \u001b[38;5;241m=\u001b[39m (tracing_count \u001b[38;5;241m==\u001b[39m new_tracing_count)\n", + "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:878\u001b[0m, in \u001b[0;36mFunction._call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 875\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock\u001b[38;5;241m.\u001b[39mrelease()\n\u001b[1;32m 876\u001b[0m \u001b[38;5;66;03m# In this case we have not created variables on the first call. So we can\u001b[39;00m\n\u001b[1;32m 877\u001b[0m \u001b[38;5;66;03m# run the first trace but we should fail if variables are created.\u001b[39;00m\n\u001b[0;32m--> 878\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[43mtracing_compilation\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_function\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 879\u001b[0m \u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwds\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_variable_creation_config\u001b[49m\n\u001b[1;32m 880\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 881\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_created_variables:\n\u001b[1;32m 882\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCreating variables on a non-first call to a function\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 883\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m decorated with tf.function.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/polymorphic_function/tracing_compilation.py:139\u001b[0m, in \u001b[0;36mcall_function\u001b[0;34m(args, kwargs, tracing_options)\u001b[0m\n\u001b[1;32m 137\u001b[0m bound_args \u001b[38;5;241m=\u001b[39m function\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39mbind(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 138\u001b[0m flat_inputs \u001b[38;5;241m=\u001b[39m function\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39munpack_inputs(bound_args)\n\u001b[0;32m--> 139\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_flat\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# pylint: disable=protected-access\u001b[39;49;00m\n\u001b[1;32m 140\u001b[0m \u001b[43m \u001b[49m\u001b[43mflat_inputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcaptured_inputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfunction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcaptured_inputs\u001b[49m\n\u001b[1;32m 141\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/polymorphic_function/concrete_function.py:1322\u001b[0m, in \u001b[0;36mConcreteFunction._call_flat\u001b[0;34m(self, tensor_inputs, captured_inputs)\u001b[0m\n\u001b[1;32m 1318\u001b[0m possible_gradient_type \u001b[38;5;241m=\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPossibleTapeGradientTypes(args)\n\u001b[1;32m 1319\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (possible_gradient_type \u001b[38;5;241m==\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPOSSIBLE_GRADIENT_TYPES_NONE\n\u001b[1;32m 1320\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m executing_eagerly):\n\u001b[1;32m 1321\u001b[0m \u001b[38;5;66;03m# No tape is watching; skip to running the function.\u001b[39;00m\n\u001b[0;32m-> 1322\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_inference_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_preflattened\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1323\u001b[0m forward_backward \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_select_forward_and_backward_functions(\n\u001b[1;32m 1324\u001b[0m args,\n\u001b[1;32m 1325\u001b[0m possible_gradient_type,\n\u001b[1;32m 1326\u001b[0m executing_eagerly)\n\u001b[1;32m 1327\u001b[0m forward_function, args_with_tangents \u001b[38;5;241m=\u001b[39m forward_backward\u001b[38;5;241m.\u001b[39mforward()\n", + "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/polymorphic_function/atomic_function.py:216\u001b[0m, in \u001b[0;36mAtomicFunction.call_preflattened\u001b[0;34m(self, args)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcall_preflattened\u001b[39m(\u001b[38;5;28mself\u001b[39m, args: Sequence[core\u001b[38;5;241m.\u001b[39mTensor]) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[1;32m 215\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Calls with flattened tensor inputs and returns the structured output.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 216\u001b[0m flat_outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_flat\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 217\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39mpack_output(flat_outputs)\n", + "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/polymorphic_function/atomic_function.py:251\u001b[0m, in \u001b[0;36mAtomicFunction.call_flat\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m record\u001b[38;5;241m.\u001b[39mstop_recording():\n\u001b[1;32m 250\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_bound_context\u001b[38;5;241m.\u001b[39mexecuting_eagerly():\n\u001b[0;32m--> 251\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_bound_context\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_function\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 252\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 253\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mlist\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 254\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunction_type\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mflat_outputs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 255\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 256\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 257\u001b[0m outputs \u001b[38;5;241m=\u001b[39m make_call_op_in_graph(\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 259\u001b[0m \u001b[38;5;28mlist\u001b[39m(args),\n\u001b[1;32m 260\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_bound_context\u001b[38;5;241m.\u001b[39mfunction_call_options\u001b[38;5;241m.\u001b[39mas_attrs(),\n\u001b[1;32m 261\u001b[0m )\n", + "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/context.py:1688\u001b[0m, in \u001b[0;36mContext.call_function\u001b[0;34m(self, name, tensor_inputs, num_outputs)\u001b[0m\n\u001b[1;32m 1686\u001b[0m cancellation_context \u001b[38;5;241m=\u001b[39m cancellation\u001b[38;5;241m.\u001b[39mcontext()\n\u001b[1;32m 1687\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cancellation_context \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m-> 1688\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[43mexecute\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1689\u001b[0m \u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mutf-8\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1690\u001b[0m \u001b[43m \u001b[49m\u001b[43mnum_outputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnum_outputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1691\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtensor_inputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1692\u001b[0m \u001b[43m \u001b[49m\u001b[43mattrs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattrs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1693\u001b[0m \u001b[43m \u001b[49m\u001b[43mctx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1694\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1695\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1696\u001b[0m outputs \u001b[38;5;241m=\u001b[39m execute\u001b[38;5;241m.\u001b[39mexecute_with_cancellation(\n\u001b[1;32m 1697\u001b[0m name\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[1;32m 1698\u001b[0m num_outputs\u001b[38;5;241m=\u001b[39mnum_outputs,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1702\u001b[0m cancellation_manager\u001b[38;5;241m=\u001b[39mcancellation_context,\n\u001b[1;32m 1703\u001b[0m )\n", + "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/tensorflow/python/eager/execute.py:53\u001b[0m, in \u001b[0;36mquick_execute\u001b[0;34m(op_name, num_outputs, inputs, attrs, ctx, name)\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 52\u001b[0m ctx\u001b[38;5;241m.\u001b[39mensure_initialized()\n\u001b[0;32m---> 53\u001b[0m tensors \u001b[38;5;241m=\u001b[39m \u001b[43mpywrap_tfe\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mTFE_Py_Execute\u001b[49m\u001b[43m(\u001b[49m\u001b[43mctx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_handle\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdevice_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mop_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 54\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mattrs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnum_outputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m core\u001b[38;5;241m.\u001b[39m_NotOkStatusException \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 56\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "denseNetModel.compile(\n", + " loss='categorical_crossentropy',\n", + " optimizer = tensorflow.keras.optimizers.Adam(learning_rate=1e-5),\n", + " metrics=['accuracy']\n", + ")\n", + "\n", + "conv5UnfreezeHist_denseNet = denseNetModel.fit(\n", + " train_data,\n", + " epochs=30,\n", + " validation_data=test_data,\n", + " callbacks=[checkpoint]\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "639bfc5d-70d7-46d8-88e2-cc75d5eb7e80", + "metadata": {}, + "source": [ + "*******************************************************************************************************\n", + "********************************************************************************************************\n", + "\n", + "Ok, This was a mistake, \n", + "\n", + "Keeping all the layers Frozen for DenseNet and only the last Layer UnFrozen, is a Disaster for DenseNet.\n", + "\n", + "Lets try again, but with all layers Unfrozen.\n", + "\n", + "\n", + "\n", + "Restarting the entire kernel.\n", + "*******************************************************************************************************\n", + "********************************************************************************************************\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "0d9a4bba-b2de-441a-93de-a4bba51f5dc0", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-04-04 20:30:00.006566: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:467] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", + "E0000 00:00:1743798600.027965 14115 cuda_dnn.cc:8579] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "E0000 00:00:1743798600.034624 14115 cuda_blas.cc:1407] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "W0000 00:00:1743798600.052314 14115 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", + "W0000 00:00:1743798600.052335 14115 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", + "W0000 00:00:1743798600.052338 14115 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", + "W0000 00:00:1743798600.052340 14115 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", + "2025-04-04 20:30:00.057633: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d8097048de4940cfabf21267f28865fd", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Fetching 2 files: 0%| | 0/2 [00:00 device: 0, name: NVIDIA RTX A4500, pci bus id: 0000:c1:00.0, compute capability: 8.6\n" + ] + } + ], + "source": [ + "import huggingface_hub\n", + "import tensorflow\n", + "\n", + "from huggingface_hub import snapshot_download\n", + "\n", + "modelDir = snapshot_download(repo_id=\"madhavsinghabcde/denseNetModel_noDataAugment_firstTrain_epochs45_lr2e-5\", repo_type=\"model\")\n", + "\n", + "denseNet_loaded_topTrained = tensorflow.keras.models.load_model(modelDir+'/denseNetModel_noDataAugment_firstTrain_epochs45_lr2e-5.keras')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "83ac4847-cf62-490e-bd39-5e71e015dadd", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.10/dist-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", + "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", + "I0000 00:00:1743798664.464368 14318 service.cc:152] XLA service 0x741248005190 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:\n", + "I0000 00:00:1743798664.464403 14318 service.cc:160] StreamExecutor device (0): NVIDIA RTX A4500, Compute Capability 8.6\n", + "2025-04-04 20:31:04.667506: I tensorflow/compiler/mlir/tensorflow/utils/dump_mlir_util.cc:269] disabling MLIR crash reproducer, set env var `MLIR_CRASH_REPRODUCER_DIRECTORY` to enable.\n", + "I0000 00:00:1743798665.839760 14318 cuda_dnn.cc:529] Loaded cuDNN version 90300\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m 1/50\u001b[0m \u001b[37m━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m13:34\u001b[0m 17s/step - accuracy: 0.5312 - loss: 1.1420" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "I0000 00:00:1743798677.011643 14318 device_compiler.h:188] Compiled cluster using XLA! This line is logged at most once for the lifetime of the process.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m50/50\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 209ms/step - accuracy: 0.4931 - loss: 1.2294\n" + ] + }, + { + "data": { + "text/plain": [ + "[1.2481088638305664, 0.48875001072883606]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "denseNet_loaded_topTrained.evaluate(test_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "03a1ef02-366e-48c8-9683-df651bbf9389", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_2\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_2\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ densenet121 (Functional)        │ (None, 7, 7, 1024)     │     7,037,504 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ global_average_pooling2d_2      │ (None, 1024)           │             0 │\n",
+       "│ (GlobalAveragePooling2D)        │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_4           │ (None, 1024)           │         4,096 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_4 (Dropout)             │ (None, 1024)           │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_4 (Dense)                 │ (None, 128)            │       131,200 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_5           │ (None, 128)            │           512 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_5 (Dropout)             │ (None, 128)            │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_5 (Dense)                 │ (None, 8)              │         1,032 │\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", + "│ densenet121 (\u001b[38;5;33mFunctional\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;34m7,037,504\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ global_average_pooling2d_2 │ (\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", + "│ batch_normalization_4 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m4,096\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_4 (\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_4 (\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", + "│ batch_normalization_5 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_5 (\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_5 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m) │ \u001b[38;5;34m1,032\u001b[0m │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 7,443,418 (28.39 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m7,443,418\u001b[0m (28.39 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 134,536 (525.53 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m134,536\u001b[0m (525.53 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 7,039,808 (26.85 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m7,039,808\u001b[0m (26.85 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Optimizer params: 269,074 (1.03 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Optimizer params: \u001b[0m\u001b[38;5;34m269,074\u001b[0m (1.03 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "denseNet_loaded_topTrained.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "d73d3ba3-6f57-4c70-a437-c6b01d941e03", + "metadata": {}, + "outputs": [], + "source": [ + "for layer in denseNet_loaded_topTrained.layers:\n", + " if layer.name==\"densenet121\":\n", + " layer.trainable = True\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "9fcbd2cc-9811-4ee3-8011-8841d4da0efb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_2\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_2\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ densenet121 (Functional)        │ (None, 7, 7, 1024)     │     7,037,504 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ global_average_pooling2d_2      │ (None, 1024)           │             0 │\n",
+       "│ (GlobalAveragePooling2D)        │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_4           │ (None, 1024)           │         4,096 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_4 (Dropout)             │ (None, 1024)           │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_4 (Dense)                 │ (None, 128)            │       131,200 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ batch_normalization_5           │ (None, 128)            │           512 │\n",
+       "│ (BatchNormalization)            │                        │               │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_5 (Dropout)             │ (None, 128)            │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_5 (Dense)                 │ (None, 8)              │         1,032 │\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", + "│ densenet121 (\u001b[38;5;33mFunctional\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;34m7,037,504\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ global_average_pooling2d_2 │ (\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", + "│ batch_normalization_4 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m4,096\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_4 (\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_4 (\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", + "│ batch_normalization_5 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n", + "│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_5 (\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_5 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m) │ \u001b[38;5;34m1,032\u001b[0m │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 7,443,418 (28.39 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m7,443,418\u001b[0m (28.39 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 7,088,392 (27.04 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m7,088,392\u001b[0m (27.04 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 85,952 (335.75 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m85,952\u001b[0m (335.75 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Optimizer params: 269,074 (1.03 MB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Optimizer params: \u001b[0m\u001b[38;5;34m269,074\u001b[0m (1.03 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "denseNet_loaded_topTrained.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "8641adbb-9e0b-4e40-981b-e4a2a958610d", + "metadata": {}, + "outputs": [], + "source": [ + "denseNet_loaded_topTrained.compile(\n", + " optimizer=tensorflow.keras.optimizers.Adam(learning_rate=1e-5),\n", + " loss=['categorical_crossentropy'],\n", + " metrics=['accuracy']\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "b107f375-a8ea-4f8d-9ca0-ac7707020c36", + "metadata": {}, + "outputs": [], + "source": [ + "from keras.callbacks import ModelCheckpoint\n", + "import os\n", + "\n", + "#os.mkdir('/workspace/denseNetModels/checkPointedModel_allLayersUnfrozen/')\n", + "model_filepath = \"/workspace/denseNetModels/checkPointedModel_allLayersUnfrozen/checkPointedModel_allLayersUnfrozen.keras\"\n", + "\n", + "denseNet_allLayerUnfrozen_Checkpoint = ModelCheckpoint(\n", + " filepath=model_filepath,\n", + " monitor='val_accuracy',\n", + " mode='max',\n", + " save_best_only=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "ffe55adc-e3e6-4609-baed-f00a7428c1f8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m334s\u001b[0m 622ms/step - accuracy: 0.3946 - loss: 1.6052 - val_accuracy: 0.4900 - val_loss: 1.3143\n", + "Epoch 2/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m76s\u001b[0m 240ms/step - accuracy: 0.5070 - loss: 1.3056 - val_accuracy: 0.5238 - val_loss: 1.2470\n", + "Epoch 3/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m54s\u001b[0m 171ms/step - accuracy: 0.5554 - loss: 1.1692 - val_accuracy: 0.5406 - val_loss: 1.1942\n", + "Epoch 4/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m56s\u001b[0m 177ms/step - accuracy: 0.5896 - loss: 1.0543 - val_accuracy: 0.5462 - val_loss: 1.1633\n", + "Epoch 5/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m55s\u001b[0m 174ms/step - accuracy: 0.6240 - loss: 0.9845 - val_accuracy: 0.5587 - val_loss: 1.1443\n", + "Epoch 6/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m56s\u001b[0m 176ms/step - accuracy: 0.6659 - loss: 0.8923 - val_accuracy: 0.5738 - val_loss: 1.1221\n", + "Epoch 7/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m49s\u001b[0m 155ms/step - accuracy: 0.6909 - loss: 0.8396 - val_accuracy: 0.5769 - val_loss: 1.1134\n", + "Epoch 8/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m50s\u001b[0m 159ms/step - accuracy: 0.7234 - loss: 0.7543 - val_accuracy: 0.5638 - val_loss: 1.1237\n", + "Epoch 9/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 122ms/step - accuracy: 0.7530 - loss: 0.7022 - val_accuracy: 0.5744 - val_loss: 1.0961\n", + "Epoch 10/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m43s\u001b[0m 136ms/step - accuracy: 0.7664 - loss: 0.6486 - val_accuracy: 0.5769 - val_loss: 1.0935\n", + "Epoch 11/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m51s\u001b[0m 161ms/step - accuracy: 0.8049 - loss: 0.5949 - val_accuracy: 0.5869 - val_loss: 1.0877\n", + "Epoch 12/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m51s\u001b[0m 160ms/step - accuracy: 0.8079 - loss: 0.5638 - val_accuracy: 0.5800 - val_loss: 1.0910\n", + "Epoch 13/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m57s\u001b[0m 180ms/step - accuracy: 0.8391 - loss: 0.5076 - val_accuracy: 0.5881 - val_loss: 1.0944\n", + "Epoch 14/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 133ms/step - accuracy: 0.8668 - loss: 0.4418 - val_accuracy: 0.5838 - val_loss: 1.0925\n", + "Epoch 15/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m37s\u001b[0m 118ms/step - accuracy: 0.8779 - loss: 0.4195 - val_accuracy: 0.5869 - val_loss: 1.1038\n", + "Epoch 16/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 123ms/step - accuracy: 0.8927 - loss: 0.3787 - val_accuracy: 0.5831 - val_loss: 1.0989\n", + "Epoch 17/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━���━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m38s\u001b[0m 119ms/step - accuracy: 0.9032 - loss: 0.3444 - val_accuracy: 0.5856 - val_loss: 1.1194\n", + "Epoch 18/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 133ms/step - accuracy: 0.9246 - loss: 0.2949 - val_accuracy: 0.5944 - val_loss: 1.1165\n", + "Epoch 19/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 122ms/step - accuracy: 0.9417 - loss: 0.2616 - val_accuracy: 0.5881 - val_loss: 1.1351\n", + "Epoch 20/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m43s\u001b[0m 136ms/step - accuracy: 0.9444 - loss: 0.2391 - val_accuracy: 0.5819 - val_loss: 1.1405\n", + "Epoch 21/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 130ms/step - accuracy: 0.9603 - loss: 0.2035 - val_accuracy: 0.5888 - val_loss: 1.1580\n", + "Epoch 22/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m49s\u001b[0m 154ms/step - accuracy: 0.9644 - loss: 0.1824 - val_accuracy: 0.5950 - val_loss: 1.1571\n", + "Epoch 23/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 130ms/step - accuracy: 0.9736 - loss: 0.1608 - val_accuracy: 0.5962 - val_loss: 1.1818\n", + "Epoch 24/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m44s\u001b[0m 138ms/step - accuracy: 0.9788 - loss: 0.1435 - val_accuracy: 0.5931 - val_loss: 1.2030\n", + "Epoch 25/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 132ms/step - accuracy: 0.9814 - loss: 0.1250 - val_accuracy: 0.5931 - val_loss: 1.2185\n", + "Epoch 26/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m46s\u001b[0m 144ms/step - accuracy: 0.9880 - loss: 0.1056 - val_accuracy: 0.5938 - val_loss: 1.2291\n", + "Epoch 27/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 133ms/step - accuracy: 0.9885 - loss: 0.0973 - val_accuracy: 0.5975 - val_loss: 1.2529\n", + "Epoch 28/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 123ms/step - accuracy: 0.9902 - loss: 0.0866 - val_accuracy: 0.5925 - val_loss: 1.2626\n", + "Epoch 29/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m44s\u001b[0m 139ms/step - accuracy: 0.9908 - loss: 0.0751 - val_accuracy: 0.5981 - val_loss: 1.2830\n", + "Epoch 30/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 128ms/step - accuracy: 0.9940 - loss: 0.0694 - val_accuracy: 0.5969 - val_loss: 1.3053\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "denseNet_loaded_topTrained.fit(\n", + " train_data,\n", + " epochs=30,\n", + " validation_data=test_data,\n", + " callbacks=[denseNet_allLayerUnfrozen_Checkpoint]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "562d338f-5441-47d8-acd8-3d64241d7182", + "metadata": {}, + "outputs": [], + "source": [ + "model_filepath = \"/workspace/denseNetModels/checkPointedModel_allLayersUnfrozen_second/checkPointedModel_allLayersUnfrozen_second.keras\"\n", + "\n", + "denseNet_allLayerUnfrozen_Checkpoint_second = ModelCheckpoint(\n", + " filepath=model_filepath,\n", + " monitor='val_accuracy',\n", + " mode='max',\n", + " save_best_only=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "62418379-8852-46c8-b7c5-eb3b4d288d14", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m71s\u001b[0m 224ms/step - accuracy: 0.9931 - loss: 0.0604 - val_accuracy: 0.5969 - val_loss: 1.3298\n", + "Epoch 2/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 127ms/step - accuracy: 0.9949 - loss: 0.0562 - val_accuracy: 0.5975 - val_loss: 1.3336\n", + "Epoch 3/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m44s\u001b[0m 138ms/step - accuracy: 0.9962 - loss: 0.0483 - val_accuracy: 0.5925 - val_loss: 1.3625\n", + "Epoch 4/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 124ms/step - accuracy: 0.9954 - loss: 0.0461 - val_accuracy: 0.5869 - val_loss: 1.3808\n", + "Epoch 5/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m43s\u001b[0m 136ms/step - accuracy: 0.9945 - loss: 0.0442 - val_accuracy: 0.5987 - val_loss: 1.3882\n", + "Epoch 6/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 130ms/step - accuracy: 0.9967 - loss: 0.0410 - val_accuracy: 0.5975 - val_loss: 1.3993\n", + "Epoch 7/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m38s\u001b[0m 120ms/step - accuracy: 0.9970 - loss: 0.0327 - val_accuracy: 0.5962 - val_loss: 1.3968\n", + "Epoch 8/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 128ms/step - accuracy: 0.9980 - loss: 0.0290 - val_accuracy: 0.5869 - val_loss: 1.4033\n", + "Epoch 9/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 134ms/step - accuracy: 0.9961 - loss: 0.0321 - val_accuracy: 0.5969 - val_loss: 1.4275\n", + "Epoch 10/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 123ms/step - accuracy: 0.9984 - loss: 0.0254 - val_accuracy: 0.5900 - val_loss: 1.4658\n", + "Epoch 11/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 126ms/step - accuracy: 0.9977 - loss: 0.0259 - val_accuracy: 0.5906 - val_loss: 1.4940\n", + "Epoch 12/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 133ms/step - accuracy: 0.9967 - loss: 0.0248 - val_accuracy: 0.5956 - val_loss: 1.4771\n", + "Epoch 13/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 127ms/step - accuracy: 0.9985 - loss: 0.0206 - val_accuracy: 0.5838 - val_loss: 1.4811\n", + "Epoch 14/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m43s\u001b[0m 136ms/step - accuracy: 0.9989 - loss: 0.0181 - val_accuracy: 0.5931 - val_loss: 1.5343\n", + "Epoch 15/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m44s\u001b[0m 139ms/step - accuracy: 0.9974 - loss: 0.0216 - val_accuracy: 0.5925 - val_loss: 1.5350\n", + "Epoch 16/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 130ms/step - accuracy: 0.9975 - loss: 0.0203 - val_accuracy: 0.5925 - val_loss: 1.5358\n", + "Epoch 17/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m46s\u001b[0m 144ms/step - accuracy: 0.9986 - loss: 0.0166 - val_accuracy: 0.5844 - val_loss: 1.5607\n", + "Epoch 18/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 122ms/step - accuracy: 0.9974 - loss: 0.0189 - val_accuracy: 0.5875 - val_loss: 1.5654\n", + "Epoch 19/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 128ms/step - accuracy: 0.9974 - loss: 0.0164 - val_accuracy: 0.5919 - val_loss: 1.5808\n", + "Epoch 20/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 124ms/step - accuracy: 0.9968 - loss: 0.0191 - val_accuracy: 0.6012 - val_loss: 1.5863\n", + "Epoch 21/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m43s\u001b[0m 135ms/step - accuracy: 0.9976 - loss: 0.0156 - val_accuracy: 0.6000 - val_loss: 1.5744\n", + "Epoch 22/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m49s\u001b[0m 153ms/step - accuracy: 0.9984 - loss: 0.0137 - val_accuracy: 0.5938 - val_loss: 1.6057\n", + "Epoch 23/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 122ms/step - accuracy: 0.9980 - loss: 0.0144 - val_accuracy: 0.6000 - val_loss: 1.6080\n", + "Epoch 24/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 124ms/step - accuracy: 0.9983 - loss: 0.0139 - val_accuracy: 0.5994 - val_loss: 1.6406\n", + "Epoch 25/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 122ms/step - accuracy: 0.9971 - loss: 0.0144 - val_accuracy: 0.5894 - val_loss: 1.6653\n", + "Epoch 26/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m37s\u001b[0m 117ms/step - accuracy: 0.9981 - loss: 0.0132 - val_accuracy: 0.5938 - val_loss: 1.6528\n", + "Epoch 27/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m43s\u001b[0m 134ms/step - accuracy: 0.9976 - loss: 0.0131 - val_accuracy: 0.5962 - val_loss: 1.6552\n", + "Epoch 28/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 128ms/step - accuracy: 0.9971 - loss: 0.0140 - val_accuracy: 0.5938 - val_loss: 1.6532\n", + "Epoch 29/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 131ms/step - accuracy: 0.9981 - loss: 0.0125 - val_accuracy: 0.6025 - val_loss: 1.6630\n", + "Epoch 30/30\n", + "\u001b[1m317/317\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m43s\u001b[0m 136ms/step - accuracy: 0.9988 - loss: 0.0105 - val_accuracy: 0.6006 - val_loss: 1.6525\n" + ] + } + ], + "source": [ + "secondTrainAllLayersUnfrozen_denseNetHist = denseNet_loaded_topTrained.fit(\n", + " train_data,\n", + " epochs=30,\n", + " validation_data=test_data,\n", + " callbacks=[denseNet_allLayerUnfrozen_Checkpoint_second]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "efe3fdfe-b55e-4dfd-b159-32438691bf21", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a76133fb20484d3aacab9023cc53b82c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "checkPointedModel_allLayersUnfrozen.keras: 0%| | 0.00/87.2M [00:00