{"metadata":{"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":3415848,"sourceType":"datasetVersion","datasetId":2058865}],"dockerImageVersionId":30646,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"papermill":{"default_parameters":{},"duration":231.77456,"end_time":"2023-11-17T15:44:13.240482","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2023-11-17T15:40:21.465922","version":"2.3.3"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"from keras.preprocessing.image import ImageDataGenerator , load_img , img_to_array\nfrom keras.models import Sequential\nfrom keras.layers import Conv2D, Flatten, MaxPool2D, Dense\nimport matplotlib.pyplot as plt\nimport numpy as np\nfrom skimage import transform\nfrom sklearn.metrics import confusion_matrix\nfrom sklearn.metrics import precision_recall_fscore_support\nimport seaborn as sns\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.callbacks import EarlyStopping\nfrom tensorflow.keras.applications import MobileNet\nfrom tensorflow.keras.models import Model \n","metadata":{"papermill":{"duration":4.817104,"end_time":"2023-11-17T15:40:34.937707","exception":false,"start_time":"2023-11-17T15:40:30.120603","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-12T21:09:30.810783Z","iopub.execute_input":"2024-03-12T21:09:30.811137Z","iopub.status.idle":"2024-03-12T21:09:30.818638Z","shell.execute_reply.started":"2024-03-12T21:09:30.811110Z","shell.execute_reply":"2024-03-12T21:09:30.817700Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ndata_directory = '/kaggle/input/multi-cancer/Multi Cancer/Brain Cancer'\n\n# Define the ImageDataGenerator \ndatagen = ImageDataGenerator(\n    rescale=1.0/255.0,      \n    rotation_range=20,      \n    width_shift_range=0.2,  \n    height_shift_range=0.2, \n    horizontal_flip=True,   \n    validation_split=0.2    \n)\n\n\ntrain_generator = datagen.flow_from_directory(\n    data_directory,\n    target_size=(224, 224), \n    batch_size=32,         \n    class_mode='categorical',    \n    subset='training'       \n)\n\n\nvalidation_generator = datagen.flow_from_directory(\n    data_directory,\n    target_size=(224, 224), \n    batch_size=32,          \n    class_mode='categorical',    \n    subset='validation'     \n)","metadata":{"papermill":{"duration":0.983794,"end_time":"2023-11-17T15:40:30.090928","exception":false,"start_time":"2023-11-17T15:40:29.107134","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-12T21:09:30.823100Z","iopub.execute_input":"2024-03-12T21:09:30.823440Z","iopub.status.idle":"2024-03-12T21:09:33.572701Z","shell.execute_reply.started":"2024-03-12T21:09:30.823412Z","shell.execute_reply":"2024-03-12T21:09:33.571667Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"input_shape = (224, 224, 3)\n\nmobilenet_base = MobileNet(weights='imagenet', include_top=False, input_shape=input_shape)\n\nmobilenet_base.trainable = False","metadata":{"papermill":{"duration":0.039783,"end_time":"2023-11-17T15:40:35.065224","exception":false,"start_time":"2023-11-17T15:40:35.025441","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-12T21:09:33.574666Z","iopub.execute_input":"2024-03-12T21:09:33.575060Z","iopub.status.idle":"2024-03-12T21:09:34.301036Z","shell.execute_reply.started":"2024-03-12T21:09:33.575024Z","shell.execute_reply":"2024-03-12T21:09:34.300164Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nx = mobilenet_base.output\nx = Flatten()(x)\nx = Dense(units=128, activation='relu')(x)  \npredictions = Dense(3, activation='softmax')(x)  \nmodel = Model(inputs=mobilenet_base.input, outputs=predictions)\n\nmodel.summary()","metadata":{"papermill":{"duration":0.168827,"end_time":"2023-11-17T15:40:35.323344","exception":false,"start_time":"2023-11-17T15:40:35.154517","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-12T21:09:34.302176Z","iopub.execute_input":"2024-03-12T21:09:34.302493Z","iopub.status.idle":"2024-03-12T21:09:34.518479Z","shell.execute_reply.started":"2024-03-12T21:09:34.302466Z","shell.execute_reply":"2024-03-12T21:09:34.516073Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import keras\nMETRICS = [\n        'accuracy',\n        keras.metrics.Precision(name='precision'),\n        keras.metrics.Recall(name='recall')\n    ]\n\nmodel.compile(loss='categorical_crossentropy', optimizer=Adam(learning_rate=0.001), metrics=METRICS)\n","metadata":{"papermill":{"duration":0.035321,"end_time":"2023-11-17T15:40:35.388313","exception":false,"start_time":"2023-11-17T15:40:35.352992","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-12T21:09:34.527717Z","iopub.execute_input":"2024-03-12T21:09:34.527993Z","iopub.status.idle":"2024-03-12T21:09:34.575983Z","shell.execute_reply.started":"2024-03-12T21:09:34.527968Z","shell.execute_reply":"2024-03-12T21:09:34.574884Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"early_stopping = EarlyStopping(monitor='val_loss', patience=5) \n\nhist = model.fit(\n        train_generator,\n        epochs=10,  \n        validation_data=validation_generator,\n        callbacks=[early_stopping]\n)","metadata":{"papermill":{"duration":0.035866,"end_time":"2023-11-17T15:40:35.453400","exception":false,"start_time":"2023-11-17T15:40:35.417534","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-12T21:09:34.576997Z","iopub.execute_input":"2024-03-12T21:09:34.577279Z","iopub.status.idle":"2024-03-12T21:39:18.104232Z","shell.execute_reply.started":"2024-03-12T21:09:34.577253Z","shell.execute_reply":"2024-03-12T21:39:18.103341Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig, ax = plt.subplots(1, 4, figsize=(20, 3))\nax = ax.ravel()\n\nfor i, met in enumerate(['accuracy', 'loss','precision', 'recall']):\n    ax[i].plot(hist.history[met])\n    ax[i].plot(hist.history['val_' + met])\n    ax[i].set_title('Model {}'.format(met))\n    ax[i].set_xlabel('epochs')\n    ax[i].set_ylabel(met)\n    ax[i].legend(['train', 'val'])","metadata":{"papermill":{"duration":0.037327,"end_time":"2023-11-17T15:40:35.931985","exception":false,"start_time":"2023-11-17T15:40:35.894658","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-12T21:39:18.105654Z","iopub.execute_input":"2024-03-12T21:39:18.105942Z","iopub.status.idle":"2024-03-12T21:39:19.184525Z","shell.execute_reply.started":"2024-03-12T21:39:18.105917Z","shell.execute_reply":"2024-03-12T21:39:19.183625Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Calculate the accuracy\naccuracy = model.evaluate(validation_generator)[1]\n","metadata":{"papermill":{"duration":10.103268,"end_time":"2023-11-17T15:43:33.385569","exception":false,"start_time":"2023-11-17T15:43:23.282301","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-12T21:44:06.555823Z","iopub.execute_input":"2024-03-12T21:44:06.556942Z","iopub.status.idle":"2024-03-12T21:44:39.933111Z","shell.execute_reply.started":"2024-03-12T21:44:06.556904Z","shell.execute_reply":"2024-03-12T21:44:39.932376Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f'Accuracy: {accuracy * 100:.2f}%')","metadata":{"papermill":{"duration":0.100728,"end_time":"2023-11-17T15:43:33.578752","exception":false,"start_time":"2023-11-17T15:43:33.478024","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-12T21:44:44.497395Z","iopub.execute_input":"2024-03-12T21:44:44.498029Z","iopub.status.idle":"2024-03-12T21:44:44.503188Z","shell.execute_reply.started":"2024-03-12T21:44:44.497996Z","shell.execute_reply":"2024-03-12T21:44:44.502202Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ny_pred = model.predict(validation_generator)\ny_pred = np.argmax(y_pred, axis=1)  \n\n\ny_true = validation_generator.classes\nclass_labels = list(validation_generator.class_indices.keys())\n\n\ncm = confusion_matrix(y_true, y_pred)\n\n\nsns.heatmap(cm, annot=True, fmt='d', cmap='Blues')\nplt.xlabel('Predicted Labels')\nplt.ylabel('True Labels')\nplt.xticks(np.arange(len(class_labels)), class_labels, rotation=45)\nplt.yticks(np.arange(len(class_labels)), class_labels)\nplt.show()","metadata":{"papermill":{"duration":25.236146,"end_time":"2023-11-17T15:43:58.908306","exception":false,"start_time":"2023-11-17T15:43:33.672160","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-12T21:41:00.460389Z","iopub.execute_input":"2024-03-12T21:41:00.460678Z","iopub.status.idle":"2024-03-12T21:41:35.378942Z","shell.execute_reply.started":"2024-03-12T21:41:00.460643Z","shell.execute_reply":"2024-03-12T21:41:35.378078Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.save('BrainTumor.h5')","metadata":{"execution":{"iopub.status.busy":"2024-03-12T21:41:35.381425Z","iopub.execute_input":"2024-03-12T21:41:35.381710Z","iopub.status.idle":"2024-03-12T21:41:35.709733Z","shell.execute_reply.started":"2024-03-12T21:41:35.381685Z","shell.execute_reply":"2024-03-12T21:41:35.708727Z"},"trusted":true},"execution_count":null,"outputs":[]}]}