{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Bussiness Task\nThe goal of this competition is to classify the blood clot origins in ischemic stroke. Using whole slide digital pathology images, i'll build a model that differentiates between the two major acute ischemic stroke (AIS) etiology subtypes: cardiac and large artery atherosclerosis.\n\n\nI hope you find this NoteBook helpful and some <span style=\"color : red;\" >**UPVOTES** </span> would be appreciated.\n","metadata":{}},{"cell_type":"markdown","source":"# what is ischemic stroke ?\n\n<iframe width=\"853\" height=\"480\" src=\"https://www.youtube.com/embed/vbH3yg2Vo1I\" title=\"Acute Ischemic Stroke - Signs and Symptoms (Stroke Syndromes) | Causes & Mechanisms | Treatment\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>","metadata":{}},{"cell_type":"markdown","source":"![ds00150_ds01030_my00077_im00074_r7_ischemicstrokethu_jpg.webp](data:image/webp;base64,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)","metadata":{}},{"cell_type":"markdown","source":"An ischaemic stroke happens when a blockage cuts off the blood supply to part of your brain, killing brain cells. Damage to brain cells can affect how the body works. It can also change how you think and feel.\n\nIt’s the most common type of stroke, and around 85% of strokes in the UK are ischaemic strokes. The other 15% of strokes are due to bleeding in or around the brain, known as haemorrhagic stroke. \n\nA transient ischaemic attack (TIA or mini-stroke) is the same as a stroke but the symptoms only last for a short amount of time. It is a major warning sign of a stroke and should always be taken seriously.","metadata":{}},{"cell_type":"markdown","source":"\n\n# Import libraries.\n","metadata":{"id":"zqrYqv734KAo"}},{"cell_type":"code","source":"# Core\nimport numpy as np\nimport pandas as pd \nimport matplotlib.pyplot as plt\nfrom pathlib import Path\nimport seaborn as sns\nimport glob\nimport random\nimport os\nimport cv2\nimport gc\nfrom tqdm import tqdm\n#tesor fow & keras\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom keras.regularizers import l2     \nfrom sklearn.utils import shuffle\nfrom sklearn.model_selection import train_test_split\nfrom tensorflow.keras.utils import to_categorical\nfrom keras.models import load_model\nfrom tensorflow.keras import Sequential\nfrom tensorflow.keras.layers import Flatten, Dense,BatchNormalization,Dropout,Input\nfrom keras.models import Sequential, Model\nfrom keras.layers import Conv2D,GlobalMaxPooling2D\nfrom tensorflow.keras.applications import  Xception,VGG16,InceptionResNetV2\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\n#cnn\nfrom tensorflow.keras import datasets, layers, models\n\nfrom keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D, concatenate, Conv2DTranspose, BatchNormalization, Dropout, Lambda\nfrom keras.engine.base_layer import Layer\nfrom sklearn.metrics import classification_report,confusion_matrix\nfrom sklearn.metrics import accuracy_score\nfrom sklearn.metrics import f1_score\nfrom sklearn.metrics import recall_score\nfrom sklearn.metrics import precision_score\nfrom sklearn.utils import class_weight\nfrom sklearn.utils.class_weight import compute_class_weight\nfrom PIL import Image\nImage.MAX_IMAGE_PIXELS = None\nimport PIL\nimport tifffile\nimport matplotlib.pyplot as plt\ngc.enable()","metadata":{"id":"1eb99db7","execution":{"iopub.status.busy":"2022-08-14T21:19:39.288512Z","iopub.execute_input":"2022-08-14T21:19:39.289019Z","iopub.status.idle":"2022-08-14T21:19:47.309172Z","shell.execute_reply.started":"2022-08-14T21:19:39.288921Z","shell.execute_reply":"2022-08-14T21:19:47.307945Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"seed = 42\nnp.random.seed =seed","metadata":{"id":"4DTeuvL_TphS","execution":{"iopub.status.busy":"2022-08-14T21:19:47.311189Z","iopub.execute_input":"2022-08-14T21:19:47.311833Z","iopub.status.idle":"2022-08-14T21:19:47.322385Z","shell.execute_reply.started":"2022-08-14T21:19:47.311798Z","shell.execute_reply":"2022-08-14T21:19:47.317855Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_path = '../input/mayo-clinic-strip-ai/'","metadata":{"id":"qcaudVrD0uQ2","execution":{"iopub.status.busy":"2022-08-14T21:19:47.323819Z","iopub.execute_input":"2022-08-14T21:19:47.324248Z","iopub.status.idle":"2022-08-14T21:19:47.337273Z","shell.execute_reply.started":"2022-08-14T21:19:47.324213Z","shell.execute_reply":"2022-08-14T21:19:47.336168Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Helper Function\n\n\n","metadata":{"id":"2zDVR6bc8DyI"}},{"cell_type":"code","source":"#check duplicate data \ndef check_duplicate(df):\n    if df.duplicated().all():\n        return  'There are duplicate Data in Data Frame Nedded To be  removed ' \n    else :\n        return 'Data Is clean ,No Duplicate Data Found '\n\n# get label Name   \ndef get_Label(number):\n    labels = {0:'CE', 1:'LAA'}\n    return labels[number]\n\n\n#plot predction function\ndef plot_predection(model_name):\n    plt.figure(figsize=(20,15))\n    plt.suptitle(\"Predection  Images\", fontsize=20)\n    images = [] \n    path =image_path+'/'+'test1/'\n    count = 0  #val_images,val_labels\n    for i,files in enumerate(os.listdir(path)) :\n        img = plt.imread(path+files)\n        img = cv2.resize(img,(128,128))\n        plt.imshow(img,cmap=plt.cm.binary)\n        img = np.expand_dims(img, axis=0)\n        feature = model_name.predict(img)\n        predection  = np.argmax(feature, axis=1)\n        print(predection)\n        plt.subplot(5,7,i+1)\n        plt.xticks([])\n        plt.yticks([])\n        plt.grid(False)\n        plt.xlabel(\"Predicted\"+get_Label(int(predection)))\n        # plt.xlabel(\"Predicted \"+ int(predection))\n\n        # plt.ylabel(get_Label(val_labels[i]))\n        count += 1\n        if count == 34 :\n            break \ndef get_id (x):\n    id = x.split('.')[0].split('_0')[0]\n    return id            \n\ndef freezing_layers(model_name):\n    for layer in model_name.layers:\n      layer.trainable = False   \n    \ndef numerical_plotting(df, col, title, symb):\n    fig, ax = plt.subplots(2, 1, sharex=True, figsize=(8,5),gridspec_kw={\"height_ratios\": (.2, .8)})\n    ax[0].set_title(title,fontsize=18)\n    sns.boxplot(x=col, data=df, ax=ax[0])\n    ax[0].set(yticks=[])\n    sns.distplot(df[col],kde=True)\n    plt.xticks(rotation=45)\n    ax[1].set_xlabel(col, fontsize=16)\n    plt.axvline(df[col].mean(), color='darkgreen', linewidth=2.2, label='mean=' + str(np.round(df[col].mean(),1)) + symb)\n    plt.axvline(df[col].median(), color='red', linewidth=2.2, label='median='+ str(np.round(df[col].median(),1)) + symb)\n    plt.axvline(df[col].mode()[0], color='purple', linewidth=2.2, label='mode='+ str(df[col].mode()[0]) + symb)\n    plt.legend(bbox_to_anchor=(1, 1.03), ncol=1, fontsize=17, fancybox=True, shadow=True, frameon=True)\n    plt.tight_layout()\n    plt.show()   \n\ndef categorical_plotting(df,col,title):\n    fig, ax = plt.subplots(figsize=(10,5))\n    ax=sns.countplot(x=col, data=df, palette='flare', order = df[col].value_counts().index)\n    ax.set_xticklabels(ax.get_xticklabels(), rotation=45)\n    ax.bar_label(ax.containers[0])\n    plt.title(title)\n    plt.show()\n    \ndef average_plotting(df,col,output,number,title):\n    data_list = df[col].value_counts().index[:number].tolist()\n    plt.figure(figsize=(15,5))\n    ax=sns.barplot(x=col, y=output, data=df[df[col].isin(data_list)],order=data_list,palette='flare',ci=False,edgecolor=\"black\") \n    plt.xticks(rotation=45);\n    ax.bar_label(ax.containers[0])\n    plt.title(title)\n    plt.show()  \n    \ndef draw_unique_value (df,title):\n    plt.figure(figsize=(10,5))\n    plt.title(title)\n    unique_counts = df.nunique().to_dict()\n    ax = sns.barplot(list(unique_counts.keys()), list(unique_counts.values()),palette='flare')\n    ax.bar_label(ax.containers[0])\n    plt.plot()","metadata":{"id":"veeEUr6oElre","execution":{"iopub.status.busy":"2022-08-14T21:19:47.340518Z","iopub.execute_input":"2022-08-14T21:19:47.341604Z","iopub.status.idle":"2022-08-14T21:19:47.367924Z","shell.execute_reply.started":"2022-08-14T21:19:47.341543Z","shell.execute_reply":"2022-08-14T21:19:47.366976Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Loading  Preperation ","metadata":{"id":"5ssSyiLDdTlP"}},{"cell_type":"code","source":"train_df = pd.read_csv(image_path + 'train.csv')\ntest_df  = pd.read_csv(image_path + 'test.csv')\nother_df = pd.read_csv(image_path + 'other.csv')","metadata":{"id":"t5Acfd4xik4n","outputId":"d7014f41-eca0-41da-b840-a3c81f6ee027","execution":{"iopub.status.busy":"2022-08-14T21:19:47.369309Z","iopub.execute_input":"2022-08-14T21:19:47.369942Z","iopub.status.idle":"2022-08-14T21:19:47.40707Z","shell.execute_reply.started":"2022-08-14T21:19:47.369885Z","shell.execute_reply":"2022-08-14T21:19:47.405957Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data Analaysis & Visualization\nin this part we will analays and versialize each part of data to be in near step from our goal then pased on deployed models we will sense best factior that affect on our bussiness goal","metadata":{}},{"cell_type":"code","source":"train_df.head(5)","metadata":{"id":"jT6svNwoq6cA","outputId":"cf363dbf-f182-448f-b6a0-7ecb67eddb1b","execution":{"iopub.status.busy":"2022-08-14T21:19:47.411078Z","iopub.execute_input":"2022-08-14T21:19:47.411444Z","iopub.status.idle":"2022-08-14T21:19:47.436995Z","shell.execute_reply.started":"2022-08-14T21:19:47.411411Z","shell.execute_reply":"2022-08-14T21:19:47.435985Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# store path of images\ntrain_images_paths = []\ntrain_images       =[]\ntrain_path =image_path+'train/'\nfor i,img in enumerate(os.listdir(train_path)) :\n    image_full_path = train_path+img\n    train_images_paths.append(image_full_path)\n    train_images.append(img)\n    # add path to data frame\ntrain_df['path'] = train_images_paths  \ntrain_df['image'] = train_images  \ntrain_df.head(5)","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:47.438424Z","iopub.execute_input":"2022-08-14T21:19:47.438745Z","iopub.status.idle":"2022-08-14T21:19:47.526326Z","shell.execute_reply.started":"2022-08-14T21:19:47.438715Z","shell.execute_reply":"2022-08-14T21:19:47.525399Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# store path of test images\ntest_images_paths = []\ntest_images       =[]\ntest_path =image_path+'test/'\nfor i,img in enumerate(os.listdir(test_path)) :\n    image_full_path = test_path+img\n    test_images_paths.append(image_full_path)\n    test_images.append(img)\n    # add path to test data frame\ntest_df['path'] = test_images_paths \ntest_df['image'] = test_images  \n\ntest_df.head(5)","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:47.527715Z","iopub.execute_input":"2022-08-14T21:19:47.528736Z","iopub.status.idle":"2022-08-14T21:19:47.548787Z","shell.execute_reply.started":"2022-08-14T21:19:47.528687Z","shell.execute_reply":"2022-08-14T21:19:47.547346Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.info()","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:47.550267Z","iopub.execute_input":"2022-08-14T21:19:47.550887Z","iopub.status.idle":"2022-08-14T21:19:47.578954Z","shell.execute_reply.started":"2022-08-14T21:19:47.550852Z","shell.execute_reply":"2022-08-14T21:19:47.577722Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.shape","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:47.583832Z","iopub.execute_input":"2022-08-14T21:19:47.584994Z","iopub.status.idle":"2022-08-14T21:19:47.59629Z","shell.execute_reply.started":"2022-08-14T21:19:47.584951Z","shell.execute_reply":"2022-08-14T21:19:47.5947Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# check null value\ntrain_df.isnull().sum().sort_values(ascending=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:47.597997Z","iopub.execute_input":"2022-08-14T21:19:47.599197Z","iopub.status.idle":"2022-08-14T21:19:47.611542Z","shell.execute_reply.started":"2022-08-14T21:19:47.599138Z","shell.execute_reply":"2022-08-14T21:19:47.610508Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#check duplicate data \ncheck_duplicate(train_df)","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:47.613125Z","iopub.execute_input":"2022-08-14T21:19:47.616203Z","iopub.status.idle":"2022-08-14T21:19:47.628846Z","shell.execute_reply.started":"2022-08-14T21:19:47.615863Z","shell.execute_reply":"2022-08-14T21:19:47.627971Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cols =train_df.columns\nsns.heatmap(train_df[cols].isnull(), cmap='viridis')","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:47.630466Z","iopub.execute_input":"2022-08-14T21:19:47.630931Z","iopub.status.idle":"2022-08-14T21:19:48.019386Z","shell.execute_reply.started":"2022-08-14T21:19:47.63086Z","shell.execute_reply":"2022-08-14T21:19:48.018215Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['image_id'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:48.020998Z","iopub.execute_input":"2022-08-14T21:19:48.021363Z","iopub.status.idle":"2022-08-14T21:19:48.034992Z","shell.execute_reply.started":"2022-08-14T21:19:48.02133Z","shell.execute_reply":"2022-08-14T21:19:48.033827Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.info()","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:48.036682Z","iopub.execute_input":"2022-08-14T21:19:48.037062Z","iopub.status.idle":"2022-08-14T21:19:48.049409Z","shell.execute_reply.started":"2022-08-14T21:19:48.03703Z","shell.execute_reply":"2022-08-14T21:19:48.048191Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#get  numerical column\nnumCol  = [col for col in train_df.columns if  train_df[col].dtype != \"O\"]\nnumCol","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:48.050862Z","iopub.execute_input":"2022-08-14T21:19:48.051539Z","iopub.status.idle":"2022-08-14T21:19:48.058882Z","shell.execute_reply.started":"2022-08-14T21:19:48.051503Z","shell.execute_reply":"2022-08-14T21:19:48.057853Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#get categoriacl column\nCatCol  = [col for col in train_df.columns if  train_df[col].dtype == \"O\"]\nCatCol","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:48.060509Z","iopub.execute_input":"2022-08-14T21:19:48.061379Z","iopub.status.idle":"2022-08-14T21:19:48.071512Z","shell.execute_reply.started":"2022-08-14T21:19:48.061331Z","shell.execute_reply":"2022-08-14T21:19:48.070294Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":" draw_unique_value (train_df,'Unique Value Of Data Frame')","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:48.072962Z","iopub.execute_input":"2022-08-14T21:19:48.073605Z","iopub.status.idle":"2022-08-14T21:19:48.315639Z","shell.execute_reply.started":"2022-08-14T21:19:48.073564Z","shell.execute_reply":"2022-08-14T21:19:48.314751Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<font size=\"4\" >**Center_id** </font> \n* **Identifies the medical center where the slide was obtained** .","metadata":{}},{"cell_type":"code","source":"numerical_plotting(train_df,'center_id','Centar id Distribution',' ')","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:48.317114Z","iopub.execute_input":"2022-08-14T21:19:48.317706Z","iopub.status.idle":"2022-08-14T21:19:48.765006Z","shell.execute_reply.started":"2022-08-14T21:19:48.31766Z","shell.execute_reply":"2022-08-14T21:19:48.764146Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['center_id'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:48.766381Z","iopub.execute_input":"2022-08-14T21:19:48.76697Z","iopub.status.idle":"2022-08-14T21:19:48.774816Z","shell.execute_reply.started":"2022-08-14T21:19:48.766934Z","shell.execute_reply":"2022-08-14T21:19:48.773801Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.describe()[['center_id']].T","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:48.776623Z","iopub.execute_input":"2022-08-14T21:19:48.777019Z","iopub.status.idle":"2022-08-14T21:19:48.800781Z","shell.execute_reply.started":"2022-08-14T21:19:48.776976Z","shell.execute_reply":"2022-08-14T21:19:48.799765Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#what is the most top center_id in data set ?\ntrain_df['center_id'].sort_values(ascending=False).head(5)","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:48.802353Z","iopub.execute_input":"2022-08-14T21:19:48.802693Z","iopub.status.idle":"2022-08-14T21:19:48.811398Z","shell.execute_reply.started":"2022-08-14T21:19:48.802655Z","shell.execute_reply":"2022-08-14T21:19:48.810519Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Notes** ⏳\n\n* **max center id is 11 & min is 1.**\n* **there are 11 center which collect our data .**","metadata":{}},{"cell_type":"markdown","source":"<font size=\"4\" >**Patient_id** </font> ","metadata":{}},{"cell_type":"code","source":"train_df['patient_id'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:48.813076Z","iopub.execute_input":"2022-08-14T21:19:48.813684Z","iopub.status.idle":"2022-08-14T21:19:48.822419Z","shell.execute_reply.started":"2022-08-14T21:19:48.813642Z","shell.execute_reply":"2022-08-14T21:19:48.821451Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"categorical_plotting(train_df,'patient_id','total count of patient_id per Image')","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:48.823952Z","iopub.execute_input":"2022-08-14T21:19:48.824493Z","iopub.status.idle":"2022-08-14T21:19:57.944617Z","shell.execute_reply.started":"2022-08-14T21:19:48.824451Z","shell.execute_reply":"2022-08-14T21:19:57.943367Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"average_plotting(train_df,'patient_id','center_id',15,'Average Cental_id per Patient')","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:57.946237Z","iopub.execute_input":"2022-08-14T21:19:57.946661Z","iopub.status.idle":"2022-08-14T21:19:58.642288Z","shell.execute_reply.started":"2022-08-14T21:19:57.946623Z","shell.execute_reply":"2022-08-14T21:19:58.64085Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#what is total number of images per patient id  ?\ntrain_df.groupby('patient_id').count()[['image_num']].sort_values(by='image_num',ascending=False).head(5).T","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:58.644161Z","iopub.execute_input":"2022-08-14T21:19:58.644638Z","iopub.status.idle":"2022-08-14T21:19:58.662297Z","shell.execute_reply.started":"2022-08-14T21:19:58.644589Z","shell.execute_reply":"2022-08-14T21:19:58.661206Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df[train_df['patient_id'] == '91b9d3']","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:58.664938Z","iopub.execute_input":"2022-08-14T21:19:58.665996Z","iopub.status.idle":"2022-08-14T21:19:58.682325Z","shell.execute_reply.started":"2022-08-14T21:19:58.665943Z","shell.execute_reply":"2022-08-14T21:19:58.681284Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"##what is total  of images per patient id  ?\ntrain_df.groupby('patient_id').sum()[['image_num']].sort_values(by='image_num',ascending=False).head(5).T","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:58.690194Z","iopub.execute_input":"2022-08-14T21:19:58.690573Z","iopub.status.idle":"2022-08-14T21:19:58.707775Z","shell.execute_reply.started":"2022-08-14T21:19:58.69054Z","shell.execute_reply":"2022-08-14T21:19:58.706621Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<font size=\"4\" >**image_num** </font> ","metadata":{}},{"cell_type":"code","source":"train_df['image_num'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:58.709238Z","iopub.execute_input":"2022-08-14T21:19:58.709665Z","iopub.status.idle":"2022-08-14T21:19:58.721143Z","shell.execute_reply.started":"2022-08-14T21:19:58.709619Z","shell.execute_reply":"2022-08-14T21:19:58.719827Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"categorical_plotting(train_df,'image_num','total count of image  per Paient')","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:58.722677Z","iopub.execute_input":"2022-08-14T21:19:58.723693Z","iopub.status.idle":"2022-08-14T21:19:58.92629Z","shell.execute_reply.started":"2022-08-14T21:19:58.723654Z","shell.execute_reply":"2022-08-14T21:19:58.925153Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":" \n**Notes** ⏳\n\n* **most of  patient has one image**","metadata":{}},{"cell_type":"code","source":"#what is max  image  per patient   ?\ntrain_df.groupby(['patient_id']).sum()[['image_num']].sort_values(by ='image_num',ascending=False).head(5).T","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:58.92778Z","iopub.execute_input":"2022-08-14T21:19:58.928536Z","iopub.status.idle":"2022-08-14T21:19:58.945692Z","shell.execute_reply.started":"2022-08-14T21:19:58.928489Z","shell.execute_reply":"2022-08-14T21:19:58.944439Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<font size=\"4\" >**label** </font>","metadata":{}},{"cell_type":"code","source":"train_df['label'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:58.947304Z","iopub.execute_input":"2022-08-14T21:19:58.947743Z","iopub.status.idle":"2022-08-14T21:19:58.95615Z","shell.execute_reply.started":"2022-08-14T21:19:58.947699Z","shell.execute_reply":"2022-08-14T21:19:58.955086Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"categorical_plotting(train_df,'label','total count of image  per label')","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:58.9577Z","iopub.execute_input":"2022-08-14T21:19:58.95806Z","iopub.status.idle":"2022-08-14T21:19:59.131656Z","shell.execute_reply.started":"2022-08-14T21:19:58.958028Z","shell.execute_reply":"2022-08-14T21:19:59.130755Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* **from above we found that data is not balanced** .\n* **72.5 % of data belong tom class CE .**\n","metadata":{}},{"cell_type":"markdown","source":"# Visialize Training Images","metadata":{}},{"cell_type":"code","source":"# plt.figure(figsize=(20,15))\n# plt.suptitle(\"Training Images\", fontsize=20)\n# path =image_path+'train/'\n# counter =0\n# for i,img in enumerate(os.listdir(path))  :\n#         plt.subplot(3,3,i+1)\n#         full_image= Image.open(path+img)\n#         full_image_1 =full_image.resize((512,512))\n#         plt.xticks([])\n#         plt.yticks([])\n#         plt.grid(False)\n#         plt.imshow(full_image_1, cmap=plt.cm.binary) \n#         if i == 8:\n#             break\n#             del  full_image_1\n#             gc.collect()","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:59.133158Z","iopub.execute_input":"2022-08-14T21:19:59.133759Z","iopub.status.idle":"2022-08-14T21:19:59.137842Z","shell.execute_reply.started":"2022-08-14T21:19:59.133726Z","shell.execute_reply":"2022-08-14T21:19:59.137026Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Image Resizing\n* Due to hardware limitation  i will convert all image size to 256 to contiune to reach compition Goal .","metadata":{}},{"cell_type":"code","source":" #change image path\nnew_image_path = 'kaggle/working/'","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:59.139057Z","iopub.execute_input":"2022-08-14T21:19:59.139854Z","iopub.status.idle":"2022-08-14T21:19:59.150921Z","shell.execute_reply.started":"2022-08-14T21:19:59.139822Z","shell.execute_reply":"2022-08-14T21:19:59.149803Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#create ne path to store images \ncreate_train_path_new =os.makedirs(new_image_path+'train')\ncreate_test_path_new =os.makedirs(new_image_path+'test')","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:59.152245Z","iopub.execute_input":"2022-08-14T21:19:59.152626Z","iopub.status.idle":"2022-08-14T21:19:59.16385Z","shell.execute_reply.started":"2022-08-14T21:19:59.152582Z","shell.execute_reply":"2022-08-14T21:19:59.162687Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_path_new = new_image_path+'train'\ntest_path_new  = new_image_path+'test'","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:59.165521Z","iopub.execute_input":"2022-08-14T21:19:59.165925Z","iopub.status.idle":"2022-08-14T21:19:59.173606Z","shell.execute_reply.started":"2022-08-14T21:19:59.165869Z","shell.execute_reply":"2022-08-14T21:19:59.172576Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"os.listdir('kaggle/working')","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:59.175228Z","iopub.execute_input":"2022-08-14T21:19:59.175609Z","iopub.status.idle":"2022-08-14T21:19:59.187706Z","shell.execute_reply.started":"2022-08-14T21:19:59.175573Z","shell.execute_reply":"2022-08-14T21:19:59.186868Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ntrain_images_paths_new = []\ntrain_images_new       = []\ntrain_path =image_path+'train/'\nfor img in  tqdm(os.listdir(train_path)):\n    image_full_path = train_path+img\n    image_new_name  = image_full_path.split('/')[-1].split('.')[0]\n    imge_new_pathe= train_path_new+'/'+image_new_name+'.jpg'\n    train_images_paths_new.append(imge_new_pathe)\n    train_images_new.append(image_new_name+'.jpg')\n    image = tifffile.imread(image_full_path)\n    resized_img = cv2.resize(image,(256,256))\n    cv2.imwrite(train_path_new+'/'+image_new_name+'.jpg', resized_img)\n    del image_full_path\n    del image_new_name\n    del image\n    del resized_img\n    gc.collect()\n      \ntrain_df['new_path']  = train_images_paths_new\ntrain_df['new_image_name'] = train_images_new","metadata":{"execution":{"iopub.status.busy":"2022-08-14T21:19:59.189113Z","iopub.execute_input":"2022-08-14T21:19:59.190682Z","iopub.status.idle":"2022-08-15T00:35:48.20107Z","shell.execute_reply.started":"2022-08-14T21:19:59.190629Z","shell.execute_reply":"2022-08-15T00:35:48.199325Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_images_paths_new = []\ntest_images_new       = []\ntest_path =image_path+'test/'\n\nfor img in  tqdm(os.listdir(test_path)):\n    image_full_path = test_path+img\n    image_new_name  = image_full_path.split('/')[-1].split('.')[0]\n    imge_new_pathe= test_path_new+'/'+image_new_name+'.jpg'\n    test_images_paths_new.append(imge_new_pathe)\n    test_images_new.append(image_new_name+'.jpg')\n    image = tifffile.imread(image_full_path)\n    resized_img = cv2.resize(image,(256,256))\n    cv2.imwrite(test_path_new+'/'+image_new_name+'.jpg', resized_img)\n    del image_full_path\n    del image_new_name\n    del image\n    del resized_img\n    gc.collect()\n      \ntest_df['new_path']  = test_images_paths_new\ntest_df['new_image_name'] = test_images_new\n","metadata":{"execution":{"iopub.status.busy":"2022-08-15T00:35:48.20353Z","iopub.execute_input":"2022-08-15T00:35:48.20512Z","iopub.status.idle":"2022-08-15T00:37:14.236307Z","shell.execute_reply.started":"2022-08-15T00:35:48.205065Z","shell.execute_reply":"2022-08-15T00:37:14.234994Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#create new path for train and test data to start modiling\ntrain_path_new = new_image_path+'train'\ntest_path_new  = new_image_path+'test'","metadata":{"execution":{"iopub.status.busy":"2022-08-15T00:37:14.23824Z","iopub.execute_input":"2022-08-15T00:37:14.239046Z","iopub.status.idle":"2022-08-15T00:37:14.244576Z","shell.execute_reply.started":"2022-08-15T00:37:14.238994Z","shell.execute_reply":"2022-08-15T00:37:14.243679Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import shutil\n# os.chdir(r'/kaggle/working')\n# shutil.make_archive('images', 'zip', 'kaggle/working')","metadata":{"execution":{"iopub.status.busy":"2022-08-15T00:37:14.24558Z","iopub.execute_input":"2022-08-15T00:37:14.245975Z","iopub.status.idle":"2022-08-15T00:37:14.259515Z","shell.execute_reply.started":"2022-08-15T00:37:14.24593Z","shell.execute_reply":"2022-08-15T00:37:14.258141Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from IPython.display import FileLink\n# FileLink(r'./images.zip')","metadata":{"execution":{"iopub.status.busy":"2022-08-15T00:37:14.261251Z","iopub.execute_input":"2022-08-15T00:37:14.261857Z","iopub.status.idle":"2022-08-15T00:37:14.273826Z","shell.execute_reply.started":"2022-08-15T00:37:14.261819Z","shell.execute_reply":"2022-08-15T00:37:14.271767Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.head(5)","metadata":{"execution":{"iopub.status.busy":"2022-08-15T00:37:14.276586Z","iopub.execute_input":"2022-08-15T00:37:14.277216Z","iopub.status.idle":"2022-08-15T00:37:14.30424Z","shell.execute_reply.started":"2022-08-15T00:37:14.277163Z","shell.execute_reply":"2022-08-15T00:37:14.302991Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Buliding CNN Model\n\n**i will use Data augmentation,as it  is a set of techniques to artificially increase the amount of data by generating new data points from existing data. This includes making small changes to data or using deep learning models to generate new data points.** \n\n","metadata":{"id":"5O1NZpjrijnM"}},{"cell_type":"code","source":"batch_size = 8\n#create image generator for images \nimage_gen = ImageDataGenerator(\n                                 rescale = 1./255,\n                                  shear_range = 0.2,\n                                  zoom_range = 0.5,\n                                  height_shift_range=0.2,\n                                  width_shift_range=0.2,\n                                  fill_mode='nearest',\n                                   horizontal_flip=True,\n                                   rotation_range = 20,\n                               validation_split=0.2 \n                               )\n\n        \ntrain = image_gen.flow_from_dataframe(\n      train_df,\n      train_path_new+'/',\n      x_col='new_image_name',\n      y_col='label',\n      target_size=(96,96),\n      class_mode='categorical',\n      shuffle=True, \n      batch_size=batch_size,\n      subset = \"training\",\n      color_mode='rgb',\n      )\nvalidate = image_gen.flow_from_dataframe(\n      train_df,\n      train_path_new+'/',\n      x_col='new_image_name',\n      y_col='label',\n      target_size=(96,96),\n      class_mode='categorical',\n      shuffle=True, \n      batch_size=batch_size,\n      subset = \"validation\",\n      color_mode='rgb'\n      )\n\n\n# make labels is balanced\nclass_weights = compute_class_weight(\n                                        class_weight = \"balanced\",\n                                        classes = np.unique(train.classes),\n                                        y = train.classes                                                    \n                                    )\nclass_weights = dict(zip(np.unique(train.classes), class_weights))\nclass_weights\n","metadata":{"id":"p7jQbFP742OG","outputId":"42dbe29c-86fa-421c-d95f-b9dc34852c21","execution":{"iopub.status.busy":"2022-08-15T00:37:14.306039Z","iopub.execute_input":"2022-08-15T00:37:14.306423Z","iopub.status.idle":"2022-08-15T00:37:14.365316Z","shell.execute_reply.started":"2022-08-15T00:37:14.306388Z","shell.execute_reply":"2022-08-15T00:37:14.363949Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.class_indices","metadata":{"execution":{"iopub.status.busy":"2022-08-15T00:37:14.36705Z","iopub.execute_input":"2022-08-15T00:37:14.367776Z","iopub.status.idle":"2022-08-15T00:37:14.375391Z","shell.execute_reply.started":"2022-08-15T00:37:14.367736Z","shell.execute_reply":"2022-08-15T00:37:14.37418Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cnn_model = models.Sequential()\ncnn_model.add(layers.Conv2D(64,(5,5), kernel_regularizer=l2(0.00005),padding ='Same',activation = 'relu',input_shape=(96,96,3)))\ncnn_model.add(layers.MaxPooling2D(2,2))\ncnn_model.add(BatchNormalization())\ncnn_model.add(layers.Conv2D(128,(5,5) ,kernel_regularizer=l2(0.00005),padding ='same',activation='relu'))\ncnn_model.add(layers.MaxPooling2D(2,2))\ncnn_model.add(BatchNormalization())\ncnn_model.add(layers.Conv2D(256,(5,5) ,kernel_regularizer=l2(0.00005),padding ='same',activation='relu'))\ncnn_model.add(layers.MaxPooling2D(2,2))\ncnn_model.add(BatchNormalization())\ncnn_model.summary()","metadata":{"id":"QfsDiDZE42Qz","outputId":"17e7b3d0-b9dc-458a-a5fa-ec1e50f2dd64","execution":{"iopub.status.busy":"2022-08-15T00:37:14.376594Z","iopub.execute_input":"2022-08-15T00:37:14.377035Z","iopub.status.idle":"2022-08-15T00:37:14.827789Z","shell.execute_reply.started":"2022-08-15T00:37:14.376999Z","shell.execute_reply":"2022-08-15T00:37:14.825673Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cnn_model.add(layers.Flatten())\ncnn_model.add(layers.Dense(128, activation='relu'))\ncnn_model.add(BatchNormalization())\ncnn_model.add(Dropout(0.5))\n# cnn_model.add(layers.Dense(64, activation='relu'))\n# cnn_model.add(BatchNormalization())\n# cnn_model.add(Dropout(0.3))\n# cnn_model.add(layers.Dense(32, activation='relu'))\n# cnn_model.add(BatchNormalization())\n# cnn_model.add(Dropout(0.3))\ncnn_model.add(layers.Dense(2, activation ='softmax'))\ncnn_model.summary()","metadata":{"id":"S92wdti_cHH6","outputId":"3fc54a1f-2fb0-4309-d9a2-8fdbbc8b5bc2","execution":{"iopub.status.busy":"2022-08-15T00:37:14.829757Z","iopub.execute_input":"2022-08-15T00:37:14.830274Z","iopub.status.idle":"2022-08-15T00:37:14.920482Z","shell.execute_reply.started":"2022-08-15T00:37:14.830226Z","shell.execute_reply":"2022-08-15T00:37:14.919081Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cnn_model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'],)","metadata":{"id":"EMoCr59t42Td","execution":{"iopub.status.busy":"2022-08-15T00:37:14.921912Z","iopub.execute_input":"2022-08-15T00:37:14.922614Z","iopub.status.idle":"2022-08-15T00:37:14.938957Z","shell.execute_reply.started":"2022-08-15T00:37:14.922575Z","shell.execute_reply":"2022-08-15T00:37:14.93771Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"  **1-Defining Callbacks**\n\n*   A callback is an object that can perform actions at various stages of training (e.g. at the start or end of an epoch, before or after a single batch, etc)\n\n\n**2-Reduce Learning Rate on Plateau**\n*   Is used to reduce the learning rate when a metric has stopped improving.\n\n","metadata":{"id":"ubaCfhsU_6QF"}},{"cell_type":"code","source":"from tensorflow.keras.callbacks import EarlyStopping,ReduceLROnPlateau\nearly = EarlyStopping(monitor=\"loss\", mode=\"min\",min_delta = 0,\n                          patience = 10,\n                          verbose = 1,\n                          restore_best_weights = True)\nlearning_rate_reduction = ReduceLROnPlateau(monitor='loss', patience = 2, verbose=1,factor=0.3, min_lr=0.000001)\ncallbacks_list = [ early, learning_rate_reduction]","metadata":{"id":"uxLfTTyhFnFy","execution":{"iopub.status.busy":"2022-08-15T00:37:14.940636Z","iopub.execute_input":"2022-08-15T00:37:14.941014Z","iopub.status.idle":"2022-08-15T00:37:14.956418Z","shell.execute_reply.started":"2022-08-15T00:37:14.94096Z","shell.execute_reply":"2022-08-15T00:37:14.954278Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Training model\n\nn_training_samples = len(train)\nn_validation_samples = len(validate)\nhistory = cnn_model.fit(\n    train,\n    epochs=60,\n    validation_data=validate,\n    validation_steps=n_validation_samples//batch_size,\n    # steps_per_epoch =n_training_samples//batch_size,\n    shuffle = True,\n    callbacks=callbacks_list,\n    class_weight=class_weights\n    )","metadata":{"id":"CKSuE6FQ42WE","outputId":"a1c6e07b-52aa-4dce-df90-f21c8f199c9b","execution":{"iopub.status.busy":"2022-08-15T00:37:14.959076Z","iopub.execute_input":"2022-08-15T00:37:14.959662Z","iopub.status.idle":"2022-08-15T01:04:03.241595Z","shell.execute_reply.started":"2022-08-15T00:37:14.959609Z","shell.execute_reply":"2022-08-15T01:04:03.240302Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"score, acc = cnn_model.evaluate(validate,batch_size=batch_size)                       \nprint('Test score:', score)\nprint('Test accuracy:', acc)","metadata":{"id":"iqieAIee42Yy","outputId":"77175719-3974-4005-dd36-95caa0fcf615","execution":{"iopub.status.busy":"2022-08-15T01:04:03.24381Z","iopub.execute_input":"2022-08-15T01:04:03.244681Z","iopub.status.idle":"2022-08-15T01:04:05.999552Z","shell.execute_reply.started":"2022-08-15T01:04:03.24457Z","shell.execute_reply":"2022-08-15T01:04:05.998254Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('Training Accuracy: {:.2f}%'.format(history.history[\"accuracy\"][-1:][0]*100))\nprint('Validation Accuracy: {:.2f}%'.format(history.history[\"val_accuracy\"][-1:][0]*100))\n","metadata":{"id":"nm4lluDAqsNY","execution":{"iopub.status.busy":"2022-08-15T01:04:06.001635Z","iopub.execute_input":"2022-08-15T01:04:06.002149Z","iopub.status.idle":"2022-08-15T01:04:06.009264Z","shell.execute_reply.started":"2022-08-15T01:04:06.002092Z","shell.execute_reply":"2022-08-15T01:04:06.007976Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('Training Loss: {:.3f}'.format(history.history[\"loss\"][-1:][0]))\nprint('Validation Loss: {:.3f}'.format(history.history[\"val_loss\"][-1:][0]))\n","metadata":{"id":"qU8lHSMmRhu1","execution":{"iopub.status.busy":"2022-08-15T01:04:06.010728Z","iopub.execute_input":"2022-08-15T01:04:06.011978Z","iopub.status.idle":"2022-08-15T01:04:06.021917Z","shell.execute_reply.started":"2022-08-15T01:04:06.011928Z","shell.execute_reply":"2022-08-15T01:04:06.020669Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cnn_prediction = cnn_model.predict(validate)\ncnn_prediction[0:5]","metadata":{"id":"yroCkc8e42eQ","outputId":"4bd20a96-f915-4cc2-c667-6c55a7a49c8c","execution":{"iopub.status.busy":"2022-08-15T01:04:06.023155Z","iopub.execute_input":"2022-08-15T01:04:06.023597Z","iopub.status.idle":"2022-08-15T01:04:08.824275Z","shell.execute_reply.started":"2022-08-15T01:04:06.023552Z","shell.execute_reply":"2022-08-15T01:04:08.823392Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(history.history['accuracy'], label='accuracy')\nplt.plot(history.history['val_accuracy'], label = 'val_accuracy')\nplt.xlabel('Epoch')\nplt.ylabel('Accuracy')\nplt.ylim([0.5, 1])\nplt.legend(loc='lower right')\nplt.show()","metadata":{"id":"5gWhTl-3PJK0","outputId":"c2d59fca-8942-4b6e-abad-25a41917abd7","execution":{"iopub.status.busy":"2022-08-15T01:04:08.825999Z","iopub.execute_input":"2022-08-15T01:04:08.827998Z","iopub.status.idle":"2022-08-15T01:04:09.03473Z","shell.execute_reply.started":"2022-08-15T01:04:08.827887Z","shell.execute_reply":"2022-08-15T01:04:09.033289Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(history.history[\"loss\"], label=\"train_loss\")\nplt.plot(history.history[\"val_loss\"], label=\"val_loss\")\nplt.title('Loss Plot')\nplt.xlabel(\"epochs\")\nplt.ylabel(\"loss\")\nplt.ylim([0.5, 1])\nplt.legend(loc='lower right')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-15T01:04:09.036571Z","iopub.execute_input":"2022-08-15T01:04:09.037241Z","iopub.status.idle":"2022-08-15T01:04:09.23079Z","shell.execute_reply.started":"2022-08-15T01:04:09.037192Z","shell.execute_reply":"2022-08-15T01:04:09.229637Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df ","metadata":{"id":"pU24REUsWsot","outputId":"43292598-c1ff-4f98-80b1-196f24442438","execution":{"iopub.status.busy":"2022-08-15T01:04:09.23245Z","iopub.execute_input":"2022-08-15T01:04:09.233131Z","iopub.status.idle":"2022-08-15T01:04:09.248632Z","shell.execute_reply.started":"2022-08-15T01:04:09.233084Z","shell.execute_reply":"2022-08-15T01:04:09.247408Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predction Using CNN.","metadata":{"id":"LE7e42i4Wi6l"}},{"cell_type":"code","source":"test_gen = ImageDataGenerator(\n                                 rescale = 1./255,\n                                 \n                               )","metadata":{"id":"bM9aQDSKUdKJ","outputId":"55525d69-6679-404b-9cda-b7d558c0c0b0","execution":{"iopub.status.busy":"2022-08-15T01:04:09.250139Z","iopub.execute_input":"2022-08-15T01:04:09.250854Z","iopub.status.idle":"2022-08-15T01:04:09.259589Z","shell.execute_reply.started":"2022-08-15T01:04:09.250819Z","shell.execute_reply":"2022-08-15T01:04:09.258215Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test  = test_gen.flow_from_dataframe(\n      test_df,\n    #   train_path_new+'/',\n    test_path_new,\n      x_col='new_image_name',\n    #   y_col =None,\n      target_size=(96,96),\n      class_mode=None, \n      batch_size=batch_size,\n      color_mode='rgb'\n      )\n\n","metadata":{"id":"KzCxJToEPcnq","outputId":"cbd66454-108a-4fb8-cebe-d552faa9e079","execution":{"iopub.status.busy":"2022-08-15T01:04:09.261493Z","iopub.execute_input":"2022-08-15T01:04:09.26186Z","iopub.status.idle":"2022-08-15T01:04:09.276954Z","shell.execute_reply.started":"2022-08-15T01:04:09.261828Z","shell.execute_reply":"2022-08-15T01:04:09.275705Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predection_test = cnn_model.predict(test)\npredection_test","metadata":{"id":"0IxBfBZ-MPp3","outputId":"0d9102ed-6a30-47c1-a0b8-514b08e273a5","execution":{"iopub.status.busy":"2022-08-15T01:04:09.27912Z","iopub.execute_input":"2022-08-15T01:04:09.279578Z","iopub.status.idle":"2022-08-15T01:04:09.570062Z","shell.execute_reply.started":"2022-08-15T01:04:09.279544Z","shell.execute_reply":"2022-08-15T01:04:09.568841Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred= np.argmax(predection_test,axis=1)\npred","metadata":{"execution":{"iopub.status.busy":"2022-08-15T01:04:09.571861Z","iopub.execute_input":"2022-08-15T01:04:09.572358Z","iopub.status.idle":"2022-08-15T01:04:09.580471Z","shell.execute_reply.started":"2022-08-15T01:04:09.572309Z","shell.execute_reply":"2022-08-15T01:04:09.579406Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df = pd.DataFrame(predection_test, columns=[\"CE\", \"LAA\"])\nsub_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-08-15T01:04:09.581741Z","iopub.execute_input":"2022-08-15T01:04:09.58208Z","iopub.status.idle":"2022-08-15T01:04:09.599375Z","shell.execute_reply.started":"2022-08-15T01:04:09.58205Z","shell.execute_reply":"2022-08-15T01:04:09.598089Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_filenames = test.filenames\ntest_filenames","metadata":{"execution":{"iopub.status.busy":"2022-08-15T01:04:09.601019Z","iopub.execute_input":"2022-08-15T01:04:09.60147Z","iopub.status.idle":"2022-08-15T01:04:09.612339Z","shell.execute_reply.started":"2022-08-15T01:04:09.601426Z","shell.execute_reply":"2022-08-15T01:04:09.611064Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df[\"image_name\"] = test_filenames\nsub_df","metadata":{"execution":{"iopub.status.busy":"2022-08-15T01:04:09.613991Z","iopub.execute_input":"2022-08-15T01:04:09.614588Z","iopub.status.idle":"2022-08-15T01:04:09.63204Z","shell.execute_reply.started":"2022-08-15T01:04:09.614553Z","shell.execute_reply":"2022-08-15T01:04:09.631098Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df[\"patient_id\"] = sub_df[\"image_name\"].apply(get_id)\nsub_df","metadata":{"execution":{"iopub.status.busy":"2022-08-15T01:04:09.634779Z","iopub.execute_input":"2022-08-15T01:04:09.635161Z","iopub.status.idle":"2022-08-15T01:04:09.65002Z","shell.execute_reply.started":"2022-08-15T01:04:09.635127Z","shell.execute_reply":"2022-08-15T01:04:09.648739Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df = sub_df.reindex(columns=['patient_id', 'CE', 'LAA'])\nsub_df","metadata":{"execution":{"iopub.status.busy":"2022-08-15T01:04:09.651949Z","iopub.execute_input":"2022-08-15T01:04:09.652418Z","iopub.status.idle":"2022-08-15T01:04:09.667489Z","shell.execute_reply.started":"2022-08-15T01:04:09.652372Z","shell.execute_reply":"2022-08-15T01:04:09.666546Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df = sub_df.reindex(columns=['patient_id', 'CE', 'LAA'])\nsub_df","metadata":{"execution":{"iopub.status.busy":"2022-08-15T01:04:09.668816Z","iopub.execute_input":"2022-08-15T01:04:09.669722Z","iopub.status.idle":"2022-08-15T01:04:09.685385Z","shell.execute_reply.started":"2022-08-15T01:04:09.669675Z","shell.execute_reply":"2022-08-15T01:04:09.683932Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df = sub_df.groupby(\"patient_id\").mean()\nsub_df[[\"CE\", \"LAA\"]].round(6).to_csv(\"submission.csv\")\n!head submission.csv","metadata":{"execution":{"iopub.status.busy":"2022-08-15T01:04:09.686944Z","iopub.execute_input":"2022-08-15T01:04:09.68835Z","iopub.status.idle":"2022-08-15T01:04:10.936918Z","shell.execute_reply.started":"2022-08-15T01:04:09.688311Z","shell.execute_reply":"2022-08-15T01:04:10.935527Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# sub_df[[\"patient_id\", \"CE\", \"LAA\"]].to_csv(\"submission.csv\", index=False)\n# !head submission.csv","metadata":{"execution":{"iopub.status.busy":"2022-08-15T01:04:10.938974Z","iopub.execute_input":"2022-08-15T01:04:10.939375Z","iopub.status.idle":"2022-08-15T01:04:10.945241Z","shell.execute_reply.started":"2022-08-15T01:04:10.93934Z","shell.execute_reply":"2022-08-15T01:04:10.943948Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from IPython.display import FileLink\nFileLink(r'submission.csv')","metadata":{"execution":{"iopub.status.busy":"2022-08-15T01:04:10.946826Z","iopub.execute_input":"2022-08-15T01:04:10.947425Z","iopub.status.idle":"2022-08-15T01:04:10.96113Z","shell.execute_reply.started":"2022-08-15T01:04:10.947385Z","shell.execute_reply":"2022-08-15T01:04:10.959529Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}