Commit b43ec6af authored by Tharindu Udayanga Rajapakse's avatar Tharindu Udayanga Rajapakse 🎱

Resnet50 Code

parent f9899dc4
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "4c390a48",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Defaulting to user installation because normal site-packages is not writeable\n",
"Requirement already satisfied: tensorflow in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (2.13.0)\n",
"Requirement already satisfied: tensorflow-intel==2.13.0 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow) (2.13.0)\n",
"Requirement already satisfied: opt-einsum>=2.3.2 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (3.3.0)\n",
"Requirement already satisfied: grpcio<2.0,>=1.24.3 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (1.56.2)\n",
"Requirement already satisfied: astunparse>=1.6.0 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (1.6.3)\n",
"Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (4.23.4)\n",
"Requirement already satisfied: packaging in c:\\programdata\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (21.3)\n",
"Requirement already satisfied: tensorflow-estimator<2.14,>=2.13.0 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (2.13.0)\n",
"Requirement already satisfied: absl-py>=1.0.0 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (1.4.0)\n",
"Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (0.31.0)\n",
"Requirement already satisfied: libclang>=13.0.0 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (16.0.6)\n",
"Requirement already satisfied: gast<=0.4.0,>=0.2.1 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (0.4.0)\n",
"Requirement already satisfied: google-pasta>=0.1.1 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (0.2.0)\n",
"Requirement already satisfied: typing-extensions<4.6.0,>=3.6.6 in c:\\programdata\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (4.1.1)\n",
"Requirement already satisfied: six>=1.12.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (1.16.0)\n",
"Requirement already satisfied: flatbuffers>=23.1.21 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (23.5.26)\n",
"Requirement already satisfied: keras<2.14,>=2.13.1 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (2.13.1)\n",
"Requirement already satisfied: setuptools in c:\\programdata\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (61.2.0)\n",
"Requirement already satisfied: tensorboard<2.14,>=2.13 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (2.13.0)\n",
"Requirement already satisfied: numpy<=1.24.3,>=1.22 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (1.24.3)\n",
"Requirement already satisfied: wrapt>=1.11.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (1.12.1)\n",
"Requirement already satisfied: h5py>=2.9.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (3.6.0)\n",
"Requirement already satisfied: termcolor>=1.1.0 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.13.0->tensorflow) (2.3.0)\n",
"Requirement already satisfied: wheel<1.0,>=0.23.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from astunparse>=1.6.0->tensorflow-intel==2.13.0->tensorflow) (0.37.1)\n",
"Requirement already satisfied: requests<3,>=2.21.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (2.27.1)\n",
"Requirement already satisfied: markdown>=2.6.8 in c:\\programdata\\anaconda3\\lib\\site-packages (from tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (3.3.4)\n",
"Requirement already satisfied: werkzeug>=1.0.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (2.0.3)\n",
"Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (0.7.1)\n",
"Requirement already satisfied: google-auth<3,>=1.6.3 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (2.22.0)\n",
"Requirement already satisfied: google-auth-oauthlib<1.1,>=0.5 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (1.0.0)\n",
"Requirement already satisfied: cachetools<6.0,>=2.0.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (4.2.2)\n",
"Requirement already satisfied: rsa<5,>=3.1.4 in c:\\programdata\\anaconda3\\lib\\site-packages (from google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (4.7.2)\n",
"Requirement already satisfied: urllib3<2.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (1.26.9)\n",
"Requirement already satisfied: pyasn1-modules>=0.2.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (0.2.8)\n",
"Requirement already satisfied: requests-oauthlib>=0.7.0 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from google-auth-oauthlib<1.1,>=0.5->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (1.3.1)\n",
"Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in c:\\programdata\\anaconda3\\lib\\site-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (0.4.8)\n",
"Requirement already satisfied: charset-normalizer~=2.0.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (2.0.4)\n",
"Requirement already satisfied: certifi>=2017.4.17 in c:\\programdata\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (2021.10.8)\n",
"Requirement already satisfied: idna<4,>=2.5 in c:\\programdata\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (3.3)\n",
"Requirement already satisfied: oauthlib>=3.0.0 in c:\\users\\test\\appdata\\roaming\\python\\python39\\site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<1.1,>=0.5->tensorboard<2.14,>=2.13->tensorflow-intel==2.13.0->tensorflow) (3.2.2)\n",
"Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in c:\\programdata\\anaconda3\\lib\\site-packages (from packaging->tensorflow-intel==2.13.0->tensorflow) (3.0.4)\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install tensorflow"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "871a47ae",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\scipy\\__init__.py:146: UserWarning: A NumPy version >=1.16.5 and <1.23.0 is required for this version of SciPy (detected version 1.24.3\n",
" warnings.warn(f\"A NumPy version >={np_minversion} and <{np_maxversion}\"\n"
]
}
],
"source": [
"import tensorflow as tf\n",
"from tensorflow.keras.models import Sequential\n",
"from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout\n",
"from tensorflow.keras.preprocessing.image import ImageDataGenerator\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "c0a08793",
"metadata": {},
"outputs": [],
"source": [
"# Define image dimensions and other parameters\n",
"IMG_HEIGHT = 150\n",
"IMG_WIDTH = 150\n",
"batch_size = 32\n",
"epochs = 20"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "5dfc9cad",
"metadata": {},
"outputs": [],
"source": [
"# Create a Sequential model\n",
"model_cnn = Sequential([\n",
" Conv2D(32, (3, 3), activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)),\n",
" MaxPooling2D(2, 2),\n",
" Conv2D(64, (3, 3), activation='relu'),\n",
" MaxPooling2D(2, 2),\n",
" Conv2D(128, (3, 3), activation='relu'),\n",
" MaxPooling2D(2, 2),\n",
" Flatten(),\n",
" Dense(512, activation='relu'),\n",
" Dropout(0.5),\n",
" Dense(1, activation='sigmoid')\n",
"])"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "fc7de4a1",
"metadata": {},
"outputs": [],
"source": [
"# Compile the model\n",
"model_cnn.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "527257b8",
"metadata": {},
"outputs": [],
"source": [
"# Data augmentation for training\n",
"image_gen_train = ImageDataGenerator(\n",
" rescale=1./255,\n",
" rotation_range=20,\n",
" width_shift_range=0.2,\n",
" height_shift_range=0.2,\n",
" shear_range=0.2,\n",
" zoom_range=0.2,\n",
" horizontal_flip=True,\n",
" fill_mode='nearest'\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "aa4c79bc",
"metadata": {},
"outputs": [],
"source": [
"# Load and preprocess your dataset directories\n",
"train_dir = 'GrownIngrownMushroomDataset2/Train'\n",
"validation_dir = 'GrownIngrownMushroomDataset2/Test'"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "57581764",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 687 images belonging to 2 classes.\n",
"Found 298 images belonging to 2 classes.\n"
]
}
],
"source": [
"# Create data generators\n",
"train_data_gen = image_gen_train.flow_from_directory(\n",
" batch_size=batch_size,\n",
" directory=train_dir,\n",
" shuffle=True,\n",
" target_size=(IMG_HEIGHT, IMG_WIDTH),\n",
" class_mode='binary'\n",
")\n",
"val_data_gen = image_gen_train.flow_from_directory(\n",
" batch_size=batch_size,\n",
" directory=validation_dir,\n",
" target_size=(IMG_HEIGHT, IMG_WIDTH),\n",
" class_mode='binary'\n",
")\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "a14d4ad6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/20\n",
"22/22 [==============================] - 65s 3s/step - loss: 0.8730 - accuracy: 0.5226 - val_loss: 0.6905 - val_accuracy: 0.7047\n",
"Epoch 2/20\n",
"22/22 [==============================] - 68s 3s/step - loss: 0.6326 - accuracy: 0.6652 - val_loss: 0.6347 - val_accuracy: 0.5872\n",
"Epoch 3/20\n",
"22/22 [==============================] - 64s 3s/step - loss: 0.4356 - accuracy: 0.7918 - val_loss: 0.4502 - val_accuracy: 0.7450\n",
"Epoch 4/20\n",
"22/22 [==============================] - 63s 3s/step - loss: 0.4641 - accuracy: 0.7525 - val_loss: 0.3474 - val_accuracy: 0.8356\n",
"Epoch 5/20\n",
"22/22 [==============================] - 62s 3s/step - loss: 0.3286 - accuracy: 0.8544 - val_loss: 0.2296 - val_accuracy: 0.9094\n",
"Epoch 6/20\n",
"22/22 [==============================] - 65s 3s/step - loss: 0.4136 - accuracy: 0.8079 - val_loss: 0.2324 - val_accuracy: 0.9295\n",
"Epoch 7/20\n",
"22/22 [==============================] - 66s 3s/step - loss: 0.2318 - accuracy: 0.9214 - val_loss: 0.9628 - val_accuracy: 0.7215\n",
"Epoch 8/20\n",
"22/22 [==============================] - 63s 3s/step - loss: 0.2896 - accuracy: 0.8777 - val_loss: 0.1479 - val_accuracy: 0.9664\n",
"Epoch 9/20\n",
"22/22 [==============================] - 62s 3s/step - loss: 0.1557 - accuracy: 0.9403 - val_loss: 0.1098 - val_accuracy: 0.9631\n",
"Epoch 10/20\n",
"22/22 [==============================] - 62s 3s/step - loss: 0.1030 - accuracy: 0.9636 - val_loss: 0.0757 - val_accuracy: 0.9664\n",
"Epoch 11/20\n",
"22/22 [==============================] - 62s 3s/step - loss: 0.1765 - accuracy: 0.9301 - val_loss: 0.1065 - val_accuracy: 0.9631\n",
"Epoch 12/20\n",
"22/22 [==============================] - 62s 3s/step - loss: 0.1134 - accuracy: 0.9549 - val_loss: 0.0813 - val_accuracy: 0.9732\n",
"Epoch 13/20\n",
"22/22 [==============================] - 62s 3s/step - loss: 0.1864 - accuracy: 0.9214 - val_loss: 0.1721 - val_accuracy: 0.9396\n",
"Epoch 14/20\n",
"22/22 [==============================] - 64s 3s/step - loss: 0.1155 - accuracy: 0.9505 - val_loss: 0.0931 - val_accuracy: 0.9597\n",
"Epoch 15/20\n",
"22/22 [==============================] - 64s 3s/step - loss: 0.1927 - accuracy: 0.9272 - val_loss: 0.1038 - val_accuracy: 0.9564\n",
"Epoch 16/20\n",
"22/22 [==============================] - 63s 3s/step - loss: 0.0846 - accuracy: 0.9738 - val_loss: 0.1298 - val_accuracy: 0.9530\n",
"Epoch 17/20\n",
"22/22 [==============================] - 62s 3s/step - loss: 0.1062 - accuracy: 0.9592 - val_loss: 0.0790 - val_accuracy: 0.9698\n",
"Epoch 18/20\n",
"22/22 [==============================] - 62s 3s/step - loss: 0.0507 - accuracy: 0.9869 - val_loss: 0.1005 - val_accuracy: 0.9597\n",
"Epoch 19/20\n",
"22/22 [==============================] - 62s 3s/step - loss: 0.0760 - accuracy: 0.9738 - val_loss: 0.0682 - val_accuracy: 0.9732\n",
"Epoch 20/20\n",
"22/22 [==============================] - 62s 3s/step - loss: 0.1332 - accuracy: 0.9476 - val_loss: 0.1213 - val_accuracy: 0.9463\n"
]
}
],
"source": [
"# Train the CNN model\n",
"history_cnn = model_cnn.fit(\n",
" train_data_gen,\n",
" epochs=epochs,\n",
" validation_data=val_data_gen\n",
")\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "84bf800d",
"metadata": {},
"outputs": [],
"source": [
"# Load the saved model\n",
"model_cnn = tf.keras.models.load_model('model_grown_status_cnn.h5')"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "24974252",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1/1 [==============================] - 0s 100ms/step\n",
"Accuracy: 0.96875\n",
"F1 Score: 0.967741935483871\n",
"Precision: 1.0\n",
"Recall: 0.9375\n"
]
}
],
"source": [
"import numpy as np\n",
"from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score\n",
"\n",
"# Assuming you have the test data\n",
"x_test, y_test = val_data_gen.next()\n",
"\n",
"# Predict on the test data\n",
"y_pred = model_cnn.predict(x_test)\n",
"y_pred = np.round(y_pred) # Convert probabilities to binary (0 or 1)\n",
"\n",
"# Calculate metrics\n",
"accuracy = accuracy_score(y_test, y_pred)\n",
"f1 = f1_score(y_test, y_pred)\n",
"precision = precision_score(y_test, y_pred)\n",
"recall = recall_score(y_test, y_pred)\n",
"\n",
"print(f\"Accuracy: {accuracy}\")\n",
"print(f\"F1 Score: {f1}\")\n",
"print(f\"Precision: {precision}\")\n",
"print(f\"Recall: {recall}\")\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "9dfc4ec3",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Retrieve accuracy values from training history\n",
"accuracy = history_cnn.history['accuracy']\n",
"val_accuracy = history_cnn.history['val_accuracy']\n",
"\n",
"# Create a line plot\n",
"plt.plot(range(1, epochs + 1), accuracy, label='Training Accuracy')\n",
"plt.plot(range(1, epochs + 1), val_accuracy, label='Validation Accuracy')\n",
"\n",
"# Add labels and title\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Accuracy')\n",
"plt.title('Training and Validation Accuracy')\n",
"plt.legend()\n",
"\n",
"# Show the plot\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "0b82b2d0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10/10 [==============================] - 13s 1s/step\n"
]
},
{
"data": {
"image/png": "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oFevXtTW1nLMMcfw0EMP0bp1650ac+TIkZx66ql89rOfLVo/evRoWrduzZe+9KWd2s6OKNv3VHYH/p6K2cfbrvA9lf3333/zt9cvueQS+vXrxw033LC5ftOmTVRUVDRXeI3alb6nYmZmBU455RSWLFnCs88+y9/+7d9y8cUX06tXLzZt2sQ3v/nNzY+j/9nPfra5z49+9CN69epF7969GTEiezDJ5Zdfzn/9138BMGLECHr06MFxxx3HjTfeCMB3vvMdbr/9diB7vMtJJ53Ecccdx/nnn88777wDwKBBg7jpppvo378/Rx11FM8//3wu++gHSprZnmHyCHhjbr5jHtoLzvphSU1ra2uZPHkygwcPBmDGjBnZD3R168aYMWNo06YNM2fOZOPGjXzmM5/hjDPOYOHChUycOJHp06fTunVrVq9evcWYq1evZsKECSxcuBBJvPvuu1tt90tf+hJ33303AwcOZOTIkXz3u9/d/FsrtbW1zJgxg8cff5zvfve7PPXUUzt1OMAzFTOzsqr7PZXKykqOOOIIvvrVrwLQv39/unXLfsVxypQpPPzww/Tp04cTTzyRVatWsXjxYp566im+/OUvb74G07Zt2y3GPvDAA2nZsiVXXHEFjz322FbXatasWcO7777LwIEDAbjssst47rnnNtdfcMEFAPTr149ly5blsr+eqZjZnqHEGUXeGvo9lfqPo7/77rs588wtn4P7xBNPkL51UdTee+/NjBkzmDZtGuPHj+eee+7h6aefLjm2fffdF8huJqitrS2537Z4pmJm1szOPPNM7rvvPj766CMAXnnlFd577z3OOOMMxo4dy/vvvw+w1emv9evXs2bNGs4++2zuvPPOrZJXmzZtOPjggzdfL/n5z3++edZSLp6pmJk1syuuuIJly5Zx/PHHExF06NCBiRMnMnjwYKqrq6msrGSfffbh7LPP5gc/+MHmfuvWrWPo0KF88MEHRAQ/+clPthr7oYceYvjw4bz//vsceeSRPPDAA2XdF99S7FuKzT62doVbind3vqXYzMyajZOKmZnlxknFzMxy46RiZma5cVIxM7PcOKmYmVlunFTMzMqooqKCPn36cOyxx3LOOecUfT7XzujatStvv/02kD0Rubk5qZiZlVHdY1pefvll2rZty6hRo5o7pLJyUjEzayIDBgzgz3/+MwCvvvoqgwcP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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from sklearn.metrics import f1_score, precision_score, recall_score\n",
"\n",
"# Retrieve true labels\n",
"y_true = val_data_gen.classes[:len(val_data_gen) * batch_size]\n",
"\n",
"# Get predicted probabilities\n",
"y_pred_probs = model_cnn.predict(val_data_gen)\n",
"\n",
"# Convert probabilities to binary predictions\n",
"y_pred = np.round(y_pred_probs)\n",
"\n",
"# Calculate F1 score, precision, and recall for each epoch\n",
"f1_scores = [f1_score(y_true, y_pred)] # Initial value\n",
"precision_scores = [precision_score(y_true, y_pred)]\n",
"recall_scores = [recall_score(y_true, y_pred)]\n",
"\n",
"for epoch in range(1, epochs):\n",
" y_pred = np.round(y_pred_probs)\n",
" f1_scores.append(f1_score(y_true, y_pred))\n",
" precision_scores.append(precision_score(y_true, y_pred))\n",
" recall_scores.append(recall_score(y_true, y_pred))\n",
"\n",
"# Create a line plot\n",
"plt.plot(range(1, epochs + 1), f1_scores, label='F1 Score')\n",
"plt.plot(range(1, epochs + 1), precision_scores, label='Precision')\n",
"plt.plot(range(1, epochs + 1), recall_scores, label='Recall')\n",
"\n",
"# Add labels and title\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Score')\n",
"plt.title('F1 Score, Precision, and Recall')\n",
"plt.legend()\n",
"\n",
"# Show the plot\n",
"plt.show()\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "35d31978",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Retrieve loss values from training history\n",
"loss = history_cnn.history['loss']\n",
"val_loss = history_cnn.history['val_loss']\n",
"\n",
"# Create a line plot\n",
"plt.plot(range(1, epochs + 1), loss, label='Training Loss')\n",
"plt.plot(range(1, epochs + 1), val_loss, label='Validation Loss')\n",
"\n",
"# Add labels and title\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Loss')\n",
"plt.title('Training and Validation Loss')\n",
"plt.legend()\n",
"\n",
"# Show the plot\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "c2470de2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"TensorFlow version: 2.13.0\n"
]
}
],
"source": [
"import tensorflow as tf\n",
"print(\"TensorFlow version:\", tf.__version__)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7817785d",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment