625 lines (624 with data), 109.4 kB
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "e3bcc037",
"metadata": {},
"outputs": [],
"source": [
"# Importing necessary libraries\n",
"import os\n",
"import random\n",
"import shutil\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"from keras.applications import VGG16, VGG19, ResNet50, InceptionV3, Xception\n",
"from keras.models import Model\n",
"from keras.layers import Dense, GlobalAveragePooling2D\n",
"from keras.optimizers import Adam\n",
"from keras.callbacks import ModelCheckpoint\n",
"from sklearn.metrics import classification_report, confusion_matrix\n",
"\n",
"# Setting random seed for reproducibility\n",
"np.random.seed(42)\n",
"random.seed(42)\n",
"\n",
"# Define constants\n",
"NUM_CLASSES = 2\n",
"IMG_SIZE = (224, 224)\n",
"BATCH_SIZE = 32\n",
"TRAIN_DIR = 'train'\n",
"VAL_DIR = 'val'\n",
"TEST_DIR = 'test'\n",
"TRAIN_SPLIT = 0.7\n",
"VAL_SPLIT = 0.1\n",
"TEST_SPLIT = 0.2\n",
"test_samples = 280"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "600bf2ab",
"metadata": {},
"outputs": [],
"source": [
"# Define the base directory where the image data is located\n",
"BASE_DIR = r\"C:\\Users\\mohit\\Downloads\\DIP Assignment 2\\Data\""
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "419b4b73",
"metadata": {},
"outputs": [],
"source": [
"# Set the paths for training, validation, and test data\n",
"TRAIN_DIR = os.path.join(BASE_DIR, 'train')\n",
"VAL_DIR = os.path.join(BASE_DIR, 'val')\n",
"TEST_DIR = os.path.join(BASE_DIR, 'test')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "75424196",
"metadata": {},
"outputs": [],
"source": [
"# Load and preprocess the data\n",
"train_datagen = ImageDataGenerator(rescale=1./255,shear_range=0.2,zoom_range=0.2,horizontal_flip=True)\n",
"val_datagen = ImageDataGenerator(rescale=1./255)\n",
"test_datagen = ImageDataGenerator(rescale=1./255)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "8df1f339",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 980 images belonging to 2 classes.\n",
"Found 140 images belonging to 2 classes.\n",
"Found 280 images belonging to 2 classes.\n"
]
}
],
"source": [
"train_generator = train_datagen.flow_from_directory(TRAIN_DIR,target_size=IMG_SIZE,batch_size=BATCH_SIZE,class_mode='categorical')\n",
"\n",
"val_generator = val_datagen.flow_from_directory(VAL_DIR,target_size=IMG_SIZE,batch_size=BATCH_SIZE,class_mode='categorical')\n",
"\n",
"test_generator = test_datagen.flow_from_directory(TEST_DIR,target_size=IMG_SIZE,batch_size=BATCH_SIZE,class_mode='categorical',shuffle=False)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "270e1c8d",
"metadata": {},
"outputs": [],
"source": [
"# Define function for creating transfer learning models\n",
"def create_transfer_model(base_model, num_classes):\n",
" x = base_model.output\n",
" x = GlobalAveragePooling2D()(x)\n",
" x = Dense(1024, activation='relu')(x)\n",
" predictions = Dense(num_classes, activation='softmax')(x)\n",
" model = Model(inputs=base_model.input, outputs=predictions)\n",
" return model"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "5a75f109",
"metadata": {},
"outputs": [],
"source": [
"# Define InceptionV3 model\n",
"inceptionv3_base = InceptionV3(include_top=False, weights='imagenet', input_shape=(IMG_SIZE[0], IMG_SIZE[1], 3))\n",
"inceptionv3_model = create_transfer_model(inceptionv3_base, NUM_CLASSES)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "d45d9c3d",
"metadata": {},
"outputs": [],
"source": [
"# Compile the models\n",
"optimizer = Adam(learning_rate=0.0001)\n",
"inceptionv3_model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "f4dc7514",
"metadata": {},
"outputs": [],
"source": [
"# Define checkpoint callback to save the best model during training\n",
"checkpoint = ModelCheckpoint('best_model.h5', monitor='val_loss', save_best_only=True)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "b48453ef",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\mohit\\AppData\\Local\\Temp\\ipykernel_34676\\918017655.py:2: UserWarning: `Model.fit_generator` is deprecated and will be removed in a future version. Please use `Model.fit`, which supports generators.\n",
" inceptionv3_history = inceptionv3_model.fit_generator(train_generator, steps_per_epoch=train_generator.n // train_generator.batch_size, epochs=10, validation_data=val_generator, validation_steps=val_generator.n // val_generator.batch_size, callbacks=[checkpoint])\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/10\n",
"30/30 [==============================] - 110s 4s/step - loss: 0.1248 - accuracy: 0.9420 - val_loss: 0.0394 - val_accuracy: 0.9922\n",
"Epoch 2/10\n",
"30/30 [==============================] - 112s 4s/step - loss: 0.0094 - accuracy: 0.9979 - val_loss: 0.0310 - val_accuracy: 0.9922\n",
"Epoch 3/10\n",
"30/30 [==============================] - 112s 4s/step - loss: 0.0092 - accuracy: 0.9968 - val_loss: 0.0544 - val_accuracy: 0.9922\n",
"Epoch 4/10\n",
"30/30 [==============================] - 112s 4s/step - loss: 0.0117 - accuracy: 0.9979 - val_loss: 6.0826e-04 - val_accuracy: 1.0000\n",
"Epoch 5/10\n",
"30/30 [==============================] - 111s 4s/step - loss: 0.0068 - accuracy: 0.9979 - val_loss: 0.0132 - val_accuracy: 0.9922\n",
"Epoch 6/10\n",
"30/30 [==============================] - 111s 4s/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 0.0223 - val_accuracy: 0.9844\n",
"Epoch 7/10\n",
"30/30 [==============================] - 113s 4s/step - loss: 0.0056 - accuracy: 0.9968 - val_loss: 7.1364e-04 - val_accuracy: 1.0000\n",
"Epoch 8/10\n",
"30/30 [==============================] - 113s 4s/step - loss: 0.0047 - accuracy: 0.9968 - val_loss: 0.0220 - val_accuracy: 0.9844\n",
"Epoch 9/10\n",
"30/30 [==============================] - 112s 4s/step - loss: 0.0020 - accuracy: 1.0000 - val_loss: 0.0742 - val_accuracy: 0.9844\n",
"Epoch 10/10\n",
"30/30 [==============================] - 111s 4s/step - loss: 0.0023 - accuracy: 0.9989 - val_loss: 0.0065 - val_accuracy: 1.0000\n"
]
}
],
"source": [
"# Train the models\n",
"inceptionv3_history = inceptionv3_model.fit_generator(train_generator, steps_per_epoch=train_generator.n // train_generator.batch_size, epochs=10, validation_data=val_generator, validation_steps=val_generator.n // val_generator.batch_size, callbacks=[checkpoint])"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "8f5baba9",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\mohit\\AppData\\Local\\Temp\\ipykernel_34676\\1195483549.py:1: UserWarning: `Model.evaluate_generator` is deprecated and will be removed in a future version. Please use `Model.evaluate`, which supports generators.\n",
" inceptionv3_scores = inceptionv3_model.evaluate_generator(test_generator, steps=test_samples // BATCH_SIZE)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"inceptionv3 Test Loss: 0.0008152585942298174\n",
"inceptionv3 Test Accuracy: 1.0\n"
]
}
],
"source": [
"inceptionv3_scores = inceptionv3_model.evaluate_generator(test_generator, steps=test_samples // BATCH_SIZE)\n",
"print(\"inceptionv3 Test Loss:\", inceptionv3_scores[0])\n",
"print(\"inceptionv3 Test Accuracy:\", inceptionv3_scores[1])"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "7df5c53e",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\mohit\\AppData\\Local\\Temp\\ipykernel_34676\\2714831293.py:8: UserWarning: `Model.predict_generator` is deprecated and will be removed in a future version. Please use `Model.predict`, which supports generators.\n",
" inceptionv3_predictions = inceptionv3_model.predict_generator(test_generator, steps=num_prediction_steps, verbose=1)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"9/9 [==============================] - 6s 613ms/step\n"
]
}
],
"source": [
"# Get the number of test samples\n",
"num_test_samples = test_generator.n\n",
"\n",
"# Calculate the number of steps for prediction\n",
"num_prediction_steps = num_test_samples // test_generator.batch_size + 1\n",
"\n",
"# Generate predictions for all test samples\n",
"inceptionv3_predictions = inceptionv3_model.predict_generator(test_generator, steps=num_prediction_steps, verbose=1)\n",
"\n",
"# Convert predictions to class labels\n",
"inceptionv3_predicted_labels = np.argmax(inceptionv3_predictions, axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "1ffe9165",
"metadata": {},
"outputs": [],
"source": [
"# Get true class labels\n",
"true_labels = test_generator.classes"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "766021ef",
"metadata": {},
"outputs": [],
"source": [
"# Calculate classification report\n",
"inceptionv3_report = classification_report(true_labels, inceptionv3_predicted_labels)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "b22bdaff",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"inception Classification Report:\n",
" precision recall f1-score support\n",
"\n",
" 0 1.00 1.00 1.00 140\n",
" 1 1.00 1.00 1.00 140\n",
"\n",
" accuracy 1.00 280\n",
" macro avg 1.00 1.00 1.00 280\n",
"weighted avg 1.00 1.00 1.00 280\n",
"\n"
]
}
],
"source": [
"print(\"inception Classification Report:\")\n",
"print(inceptionv3_report)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "88de02a8",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\mohit\\AppData\\Local\\Temp\\ipykernel_34676\\1195483549.py:1: UserWarning: `Model.evaluate_generator` is deprecated and will be removed in a future version. Please use `Model.evaluate`, which supports generators.\n",
" inceptionv3_scores = inceptionv3_model.evaluate_generator(test_generator, steps=test_samples // BATCH_SIZE)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"inceptionv3 Test Loss: 0.0008152585942298174\n",
"inceptionv3 Test Accuracy: 1.0\n"
]
}
],
"source": [
"inceptionv3_scores = inceptionv3_model.evaluate_generator(test_generator, steps=test_samples // BATCH_SIZE)\n",
"print(\"inceptionv3 Test Loss:\", inceptionv3_scores[0])\n",
"print(\"inceptionv3 Test Accuracy:\", inceptionv3_scores[1])"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "bdd825d8",
"metadata": {},
"outputs": [],
"source": [
"from PIL import Image\n",
"\n",
"# Load the image\n",
"image = Image.open(r\"C:\\Users\\mohit\\Downloads\\DIP Assignment 2\\Data\\test\\pneumonia\\person518_bacteria_2197.jpeg\")"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "702f8d80",
"metadata": {},
"outputs": [],
"source": [
"from keras.applications.vgg16 import preprocess_input\n",
"\n",
"# Resize the image to match the input size of VGG16 model\n",
"image = image.resize((224, 224))\n",
"\n",
"# Convert the image to numpy array\n",
"image_array = np.array(image)\n",
"\n",
"# Preprocess the image to match the preprocessing applied during training\n",
"image_preprocessed = preprocess_input(image_array)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "2ac99cba",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:Model was constructed with shape (None, 224, 224, 3) for input KerasTensor(type_spec=TensorSpec(shape=(None, 224, 224, 3), dtype=tf.float32, name='input_1'), name='input_1', description=\"created by layer 'input_1'\"), but it was called on an input with incompatible shape (None, 224, 224).\n"
]
},
{
"ename": "ValueError",
"evalue": "in user code:\n\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2137, in predict_function *\n return step_function(self, iterator)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2123, in step_function **\n outputs = model.distribute_strategy.run(run_step, args=(data,))\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2111, in run_step **\n outputs = model.predict_step(data)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2079, in predict_step\n return self(x, training=False)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\utils\\traceback_utils.py\", line 70, in error_handler\n raise e.with_traceback(filtered_tb) from None\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\input_spec.py\", line 250, in assert_input_compatibility\n raise ValueError(\n\n ValueError: Exception encountered when calling layer 'model' (type Functional).\n \n Input 0 of layer \"conv2d\" is incompatible with the layer: expected min_ndim=4, found ndim=3. Full shape received: (None, 224, 224)\n \n Call arguments received by layer 'model' (type Functional):\n • inputs=tf.Tensor(shape=(None, 224, 224), dtype=float32)\n • training=False\n • mask=None\n",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_34676\\4279913315.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# Make predictions using the trained models\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0minceptionv3_prediction\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0minceptionv3_model\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexpand_dims\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimage_preprocessed\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;31m# Convert the predictions to class labels\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0minceptionv3_predicted_label\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0margmax\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minceptionv3_prediction\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\keras\\utils\\traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 68\u001b[0m \u001b[1;31m# To get the full stack trace, call:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[1;31m# `tf.debugging.disable_traceback_filtering()`\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 70\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwith_traceback\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfiltered_tb\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 71\u001b[0m \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 72\u001b[0m \u001b[1;32mdel\u001b[0m \u001b[0mfiltered_tb\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\u001b[0m in \u001b[0;36mtf__predict_function\u001b[1;34m(iterator)\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 14\u001b[0m \u001b[0mdo_return\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 15\u001b[1;33m \u001b[0mretval_\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mag__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconverted_call\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mld\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstep_function\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mld\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mag__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mld\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0miterator\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfscope\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 16\u001b[0m \u001b[1;32mexcept\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 17\u001b[0m \u001b[0mdo_return\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mFalse\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mValueError\u001b[0m: in user code:\n\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2137, in predict_function *\n return step_function(self, iterator)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2123, in step_function **\n outputs = model.distribute_strategy.run(run_step, args=(data,))\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2111, in run_step **\n outputs = model.predict_step(data)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2079, in predict_step\n return self(x, training=False)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\utils\\traceback_utils.py\", line 70, in error_handler\n raise e.with_traceback(filtered_tb) from None\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\input_spec.py\", line 250, in assert_input_compatibility\n raise ValueError(\n\n ValueError: Exception encountered when calling layer 'model' (type Functional).\n \n Input 0 of layer \"conv2d\" is incompatible with the layer: expected min_ndim=4, found ndim=3. Full shape received: (None, 224, 224)\n \n Call arguments received by layer 'model' (type Functional):\n • inputs=tf.Tensor(shape=(None, 224, 224), dtype=float32)\n • training=False\n • mask=None\n"
]
}
],
"source": [
"# Make predictions using the trained models\n",
"inceptionv3_prediction = inceptionv3_model.predict(np.expand_dims(image_preprocessed, axis=0))\n",
"\n",
"# Convert the predictions to class labels\n",
"inceptionv3_predicted_label = np.argmax(inceptionv3_prediction, axis=1)\n",
"\n",
"# Print the predicted class labels\n",
"print(\"InceptionV3 predicted class label:\", inceptionv3_predicted_label)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "5354615d",
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "in user code:\n\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2137, in predict_function *\n return step_function(self, iterator)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2123, in step_function **\n outputs = model.distribute_strategy.run(run_step, args=(data,))\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2111, in run_step **\n outputs = model.predict_step(data)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2079, in predict_step\n return self(x, training=False)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\utils\\traceback_utils.py\", line 70, in error_handler\n raise e.with_traceback(filtered_tb) from None\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\input_spec.py\", line 295, in assert_input_compatibility\n raise ValueError(\n\n ValueError: Input 0 of layer \"model\" is incompatible with the layer: expected shape=(None, 224, 224, 3), found shape=(32, 224, 3)\n",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_34676\\1589453046.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 22\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 23\u001b[0m \u001b[1;31m# Make predictions using the trained models\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 24\u001b[1;33m \u001b[0minceptionv3_prediction\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0minceptionv3_model\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimage_preprocessed\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 25\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 26\u001b[0m \u001b[1;31m# Convert the predictions to class labels\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\keras\\utils\\traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 68\u001b[0m \u001b[1;31m# To get the full stack trace, call:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[1;31m# `tf.debugging.disable_traceback_filtering()`\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 70\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwith_traceback\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfiltered_tb\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 71\u001b[0m \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 72\u001b[0m \u001b[1;32mdel\u001b[0m \u001b[0mfiltered_tb\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\u001b[0m in \u001b[0;36mtf__predict_function\u001b[1;34m(iterator)\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 14\u001b[0m \u001b[0mdo_return\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 15\u001b[1;33m \u001b[0mretval_\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mag__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconverted_call\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mld\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstep_function\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mld\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mag__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mld\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0miterator\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfscope\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 16\u001b[0m \u001b[1;32mexcept\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 17\u001b[0m \u001b[0mdo_return\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mFalse\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mValueError\u001b[0m: in user code:\n\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2137, in predict_function *\n return step_function(self, iterator)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2123, in step_function **\n outputs = model.distribute_strategy.run(run_step, args=(data,))\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2111, in run_step **\n outputs = model.predict_step(data)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2079, in predict_step\n return self(x, training=False)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\utils\\traceback_utils.py\", line 70, in error_handler\n raise e.with_traceback(filtered_tb) from None\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\input_spec.py\", line 295, in assert_input_compatibility\n raise ValueError(\n\n ValueError: Input 0 of layer \"model\" is incompatible with the layer: expected shape=(None, 224, 224, 3), found shape=(32, 224, 3)\n"
]
}
],
"source": [
"from PIL import Image\n",
"import numpy as np\n",
"from keras.applications.vgg16 import preprocess_input\n",
"\n",
"# Load the image\n",
"image = Image.open(r\"C:\\Users\\mohit\\Downloads\\DIP Assignment 2\\Data\\test\\pneumonia\\person518_bacteria_2197.jpeg\")\n",
"\n",
"# Resize the image to match the input size of VGG16 model\n",
"image = image.resize((224, 224))\n",
"\n",
"# Convert the image to numpy array\n",
"image_array = np.array(image)\n",
"\n",
"# Add channel dimension to the image array\n",
"image_array = np.expand_dims(image_array, axis=-1)\n",
"\n",
"# Repeat the channel dimension 3 times to match the expected input shape of (None, 224, 224, 3)\n",
"image_array = np.repeat(image_array, 3, axis=-1)\n",
"\n",
"# Preprocess the image to match the preprocessing applied during training\n",
"image_preprocessed = preprocess_input(image_array)\n",
"\n",
"# Make predictions using the trained models\n",
"inceptionv3_prediction = inceptionv3_model.predict(image_preprocessed)\n",
"\n",
"# Convert the predictions to class labels\n",
"inceptionv3_predicted_label = np.argmax(inceptionv3_prediction, axis=1)\n",
"\n",
"# Print the predicted class labels\n",
"print(\"InceptionV3 predicted class label:\", inceptionv3_predicted_label)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "d6a45ad4",
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "in user code:\n\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2137, in predict_function *\n return step_function(self, iterator)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2123, in step_function **\n outputs = model.distribute_strategy.run(run_step, args=(data,))\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2111, in run_step **\n outputs = model.predict_step(data)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2079, in predict_step\n return self(x, training=False)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\utils\\traceback_utils.py\", line 70, in error_handler\n raise e.with_traceback(filtered_tb) from None\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\input_spec.py\", line 295, in assert_input_compatibility\n raise ValueError(\n\n ValueError: Input 0 of layer \"model\" is incompatible with the layer: expected shape=(None, 224, 224, 3), found shape=(None, 167, 224, 3)\n",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_34676\\4017855229.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 21\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 22\u001b[0m \u001b[1;31m# Make predictions using the trained models\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 23\u001b[1;33m \u001b[0minceptionv3_prediction\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0minceptionv3_model\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mimage_preprocessed\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 24\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 25\u001b[0m \u001b[1;31m# Convert the predictions to class labels\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\keras\\utils\\traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 68\u001b[0m \u001b[1;31m# To get the full stack trace, call:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[1;31m# `tf.debugging.disable_traceback_filtering()`\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 70\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwith_traceback\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfiltered_tb\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 71\u001b[0m \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 72\u001b[0m \u001b[1;32mdel\u001b[0m \u001b[0mfiltered_tb\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\u001b[0m in \u001b[0;36mtf__predict_function\u001b[1;34m(iterator)\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 14\u001b[0m \u001b[0mdo_return\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 15\u001b[1;33m \u001b[0mretval_\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mag__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconverted_call\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mld\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstep_function\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mld\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mag__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mld\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0miterator\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfscope\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 16\u001b[0m \u001b[1;32mexcept\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 17\u001b[0m \u001b[0mdo_return\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mFalse\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mValueError\u001b[0m: in user code:\n\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2137, in predict_function *\n return step_function(self, iterator)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2123, in step_function **\n outputs = model.distribute_strategy.run(run_step, args=(data,))\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2111, in run_step **\n outputs = model.predict_step(data)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\training.py\", line 2079, in predict_step\n return self(x, training=False)\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\utils\\traceback_utils.py\", line 70, in error_handler\n raise e.with_traceback(filtered_tb) from None\n File \"C:\\Users\\mohit\\anaconda3\\lib\\site-packages\\keras\\engine\\input_spec.py\", line 295, in assert_input_compatibility\n raise ValueError(\n\n ValueError: Input 0 of layer \"model\" is incompatible with the layer: expected shape=(None, 224, 224, 3), found shape=(None, 167, 224, 3)\n"
]
}
],
"source": [
"from PIL import Image\n",
"import numpy as np\n",
"from keras.applications.vgg16 import preprocess_input\n",
"\n",
"# Load the image\n",
"image = Image.open(r\"C:\\Users\\mohit\\Downloads\\DIP Assignment 2\\Data\\test\\pneumonia\\person518_bacteria_2197.jpeg\") # Replace \"test_image.jpg\" with the path to your test image\n",
"\n",
"# Resize the image while maintaining its aspect ratio\n",
"image.thumbnail((224, 224))\n",
"\n",
"# Convert the image to numpy array\n",
"image_array = np.array(image)\n",
"\n",
"# Check if the image has 3 channels (RGB)\n",
"if image_array.shape[-1] != 3:\n",
" # Convert grayscale image to RGB by stacking the array along the channel axis 3 times\n",
" image_array = np.stack((image_array,) * 3, axis=-1)\n",
"\n",
"# Preprocess the image to match the preprocessing applied during training\n",
"image_preprocessed = preprocess_input(image_array)\n",
"\n",
"# Make predictions using the trained models\n",
"inceptionv3_prediction = inceptionv3_model.predict(np.array([image_preprocessed]))\n",
"\n",
"# Convert the predictions to class labels\n",
"inceptionv3_predicted_label = np.argmax(inceptionv3_prediction, axis=1)\n",
"\n",
"# Print the predicted class labels\n",
"print(\"InceptionV3 predicted class label:\", inceptionv3_predicted_label)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "d58cf476",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/5\n",
"30/30 [==============================] - 96s 3s/step - loss: 0.0055 - accuracy: 0.9979\n",
"Epoch 2/5\n",
"30/30 [==============================] - 107s 4s/step - loss: 0.0020 - accuracy: 0.9989\n",
"Epoch 3/5\n",
"30/30 [==============================] - 109s 4s/step - loss: 0.0011 - accuracy: 1.0000\n",
"Epoch 4/5\n",
"30/30 [==============================] - 111s 4s/step - loss: 0.0012 - accuracy: 1.0000\n",
"Epoch 5/5\n",
"30/30 [==============================] - 108s 4s/step - loss: 0.0059 - accuracy: 0.9979\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Train the VGG16 model and obtain the training history\n",
"inceptionv3_history = inceptionv3_model.fit(train_generator, steps_per_epoch=train_generator.n // train_generator.batch_size, epochs=5)\n",
"\n",
"# Plot the training loss curve\n",
"plt.plot(inceptionv3_history.history['loss'])\n",
"plt.title('inception Training Loss')\n",
"plt.xlabel('Epoch')\n",
"plt.ylabel('Loss')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "8a3211d3",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlIAAAHFCAYAAAA5VBcVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABqO0lEQVR4nO3deVxU5f4H8M8wDAy7C7sLmwgigormnjsqaGpmu1ft103LSkxzN7dyyaVbmXrLpcVKM5fMnXJPcxdQ3DeQRQTZZGfm+f0BzHUClUHgzPJ5v17zunF4Zub7zPHCl/M5zzkyIYQAEREREenMTOoCiIiIiAwVGykiIiKiKmIjRURERFRFbKSIiIiIqoiNFBEREVEVsZEiIiIiqiI2UkRERERVxEaKiIiIqIrYSBERERFVERspIgl8++23kMlkuHXrltSlVFpiYiJmzZqFc+fOlfverFmzIJPJarWesvd80qNbt25P/V4ymQyzZs2q0nO7detWLTU8rdatW0Mmk2Hx4sVSl0JkVGS8RQxR7bt37x6uX7+OVq1awdLSUupyKuXUqVNo27Yt1q5dixEjRmh9786dO7hz5w7at29fa/WUvWeZpKQkPP/883jvvffw6quvarbb29sjICDgqd7r77//RsOGDdGwYUOdnxsbGwsAT13D0zh37hxatWoFAPD398fFixclq4XI2JhLXQCRKXJycoKTk5PUZVSbqjYZ1fmeZUf3Gjdu/NiGrqioCDKZDObmlf/x9zQNopQNVJlVq1YBAMLDw7Fjxw4cPXoUHTt2lLiq8oQQyM/Ph5WVldSlEFUaoz0iCVQU7XXr1g2BgYE4efIkunTpAmtra3h7e2PBggVQq9Vaz8/IyMD48ePh7e0NS0tLODs7IywsDJcuXdKMKSwsxMcffwx/f39YWlrCyckJI0eOxL1797Rey9PTE/3798eWLVsQFBQEpVIJb29vfPHFF5oxBw4cQNu2bQEAI0eO1MRmZXFXRdGeWq3Gp59+qnl/Z2dn/Otf/9I6iqTrvHV14MAByGQy/PDDDxg/fjwaNGgAS0tLXLt2Dffu3cM777yDgIAA2NrawtnZGT169MDhw4fLvc4/o72y/bd//368/fbbcHR0RP369fH8888jMTGx3PwejvZu3bqlidiWLl0KLy8v2NraokOHDvj777/Lvfc333yDpk2bwtLSEgEBAfjpp58wYsQIeHp6VuozyM/Px08//YSQkBB89tlnAIA1a9ZUOHb37t3o2bMnHBwcYG1tjWbNmmH+/PlaY44fP44BAwagfv36UCqV8PHxQUREhOb7j6qton8jMpkM7777LlauXIlmzZrB0tIS3333HQBg9uzZaNeuHerVqwd7e3u0bt0aq1evRkUhyk8//YQOHTrA1tYWtra2aNmyJVavXg0AmDt3LszNzREfH1/ueW+88Qbq16+P/Pz8R3+ARE/ARopIjyQnJ+O1117D66+/jm3btqFfv36YMmUK1q1bpxmTnZ2Nzp0747///S9GjhyJ33//HStXrkTTpk2RlJQEoKSJGThwIBYsWIBXX30VO3bswIIFCxAZGYlu3bohLy9P633PnTuHiIgIjBs3Dlu2bEHHjh0xduxYzfk0rVu3xtq1awEA06dPx7Fjx3Ds2DG8+eabj5zL22+/jUmTJqF3797Ytm0b5s6di927d6Njx45ITU3Ved5PY8qUKYiLi8PKlSvx+++/w9nZGffv3wcAzJw5Ezt27MDatWvh7e2Nbt264cCBA5V63TfffBMKhQI//fQTPv30Uxw4cACvv/56pZ771VdfITIyEv/5z3/w448/IicnB2FhYcjMzNSM+frrr/HWW28hKCgImzdvxvTp0zF79uxK1wcAmzdvRnp6Ot544w34+vqic+fO2LBhAx48eKA1bvXq1QgLC4NardZ8Tu+//75W47tnzx506dIFcXFxWLp0KXbt2oXp06fj7t27la7nn7Zu3YoVK1bgo48+0rw+UNJwjho1Cr/88gs2b96siW3nzp2r9fyPPvoIr732Gtzd3fHtt99iy5YtGD58OG7fvg0AGDVqFMzNzfHf//5X63n379/H+vXr8X//939QKpVVrp8Igohq3dq1awUAcfPmTc22rl27CgDi+PHjWmMDAgJEnz59NF/PmTNHABCRkZGPfP2ff/5ZABCbNm3S2n7y5EkBQCxfvlyzzcPDQ8hkMnHu3Dmtsb179xb29vYiJydH67lr164t934zZ84UD/84uXjxogAg3nnnHa1xx48fFwDE1KlTdZ73k9y8eVMAEIsWLdJs279/vwAgnn322Sc+v7i4WBQVFYmePXuKwYMHa30PgJg5c6bm67L998/5ffrppwKASEpK0ppf165dy9XZokULUVxcrNl+4sQJAUD8/PPP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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Train the VGG16 model and obtain the training history\n",
"#inceptionv3_history = inceptionv3_model.fit(train_generator, steps_per_epoch=train_generator.n // train_generator.batch_size, epochs=5)\n",
"\n",
"plt.plot(inceptionv3_history.history['accuracy'])\n",
"plt.title('inception Training Accuracy')\n",
"plt.xlabel('Epoch')\n",
"plt.ylabel('Accuracy')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "93a3ccb3",
"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.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}