{"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":"code","source":"# How I imported in my environment.\n# import numpy as np\n# import pandas as pd \n# import matplotlib.pyplot as plt\n# import matplotlib.image as mpimg\n\n# from sklearn.model_selection import train_test_split\n# from tensorflow.keras.preprocessing.image import ImageDataGenerator\n\n# from tensorflow.keras.models import Sequential\n# from tensorflow.keras.layers import Conv2D, MaxPooling2D\n# from tensorflow.keras.layers import Activation, Flatten, Dropout, Dense\n# from tensorflow.keras.optimizers import Adam","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:41:20.200753Z","iopub.execute_input":"2023-11-13T22:41:20.201551Z","iopub.status.idle":"2023-11-13T22:41:20.206555Z","shell.execute_reply.started":"2023-11-13T22:41:20.201514Z","shell.execute_reply":"2023-11-13T22:41:20.205537Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd \nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\n\nfrom sklearn.model_selection import train_test_split\nfrom keras.preprocessing.image import ImageDataGenerator\n\nfrom keras.models import Sequential\nfrom keras.layers.convolutional import Conv2D\nfrom keras.layers.convolutional import MaxPooling2D\nfrom keras.layers.core import Activation\nfrom keras.layers.core import Flatten\nfrom keras.layers.core import Dropout\nfrom keras.layers.core import Dense\nfrom keras.optimizers import Adam","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:41:20.208332Z","iopub.execute_input":"2023-11-13T22:41:20.208665Z","iopub.status.idle":"2023-11-13T22:41:28.458976Z","shell.execute_reply.started":"2023-11-13T22:41:20.208640Z","shell.execute_reply":"2023-11-13T22:41:28.458192Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load the training data into a DataFrame. \n# Print the shape of the resulting DataFrame.\n\nhcd = pd.read_csv('/kaggle/input/histopathologic-cancer-detection/train_labels.csv')\nprint(hcd.shape)","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:41:28.460073Z","iopub.execute_input":"2023-11-13T22:41:28.460620Z","iopub.status.idle":"2023-11-13T22:41:28.827787Z","shell.execute_reply.started":"2023-11-13T22:41:28.460592Z","shell.execute_reply":"2023-11-13T22:41:28.826869Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Display the head of the train DataFrame. \nhcd.head()","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:41:28.830351Z","iopub.execute_input":"2023-11-13T22:41:28.830618Z","iopub.status.idle":"2023-11-13T22:41:28.846813Z","shell.execute_reply.started":"2023-11-13T22:41:28.830595Z","shell.execute_reply":"2023-11-13T22:41:28.845727Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#label distrobution\n(hcd.label.value_counts() / len(hcd)).to_frame()","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:41:28.848045Z","iopub.execute_input":"2023-11-13T22:41:28.848359Z","iopub.status.idle":"2023-11-13T22:41:28.864910Z","shell.execute_reply.started":"2023-11-13T22:41:28.848335Z","shell.execute_reply":"2023-11-13T22:41:28.863811Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Adding a variable for the image directory\nimg_dir = '/kaggle/input/histopathologic-cancer-detection/train'","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:41:28.866261Z","iopub.execute_input":"2023-11-13T22:41:28.866560Z","iopub.status.idle":"2023-11-13T22:41:28.871918Z","shell.execute_reply.started":"2023-11-13T22:41:28.866536Z","shell.execute_reply":"2023-11-13T22:41:28.871156Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample = hcd.sample(n=9).reset_index()\n\nplt.figure(figsize=(3,3))\n\nfor i, row in sample.iterrows():\n\n    img = mpimg.imread(f'{img_dir}/{row.id}.tif')    \n    label = row.label\n\n    plt.subplot(3,3,i+1)\n    plt.imshow(img)\n    plt.text(0, -5, f'Class {label}', color='k')\n        \n    plt.axis('off')\n\nplt.tight_layout()\nplt.show()\n    ","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:41:28.872972Z","iopub.execute_input":"2023-11-13T22:41:28.873244Z","iopub.status.idle":"2023-11-13T22:41:29.369687Z","shell.execute_reply.started":"2023-11-13T22:41:28.873221Z","shell.execute_reply":"2023-11-13T22:41:29.366400Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#using data generators \ntrain_df, valid_df = train_test_split(hcd, test_size=0.2, random_state=39, stratify=hcd.label)\n\nprint(train_df.shape)\nprint(valid_df.shape)","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:41:29.371350Z","iopub.execute_input":"2023-11-13T22:41:29.371710Z","iopub.status.idle":"2023-11-13T22:41:29.482655Z","shell.execute_reply.started":"2023-11-13T22:41:29.371676Z","shell.execute_reply":"2023-11-13T22:41:29.481700Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#scaling images \ntrain_datagen = ImageDataGenerator(rescale=1/255)\nvalid_datagen = ImageDataGenerator(rescale=1/255)","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:41:29.483856Z","iopub.execute_input":"2023-11-13T22:41:29.484173Z","iopub.status.idle":"2023-11-13T22:41:29.488945Z","shell.execute_reply.started":"2023-11-13T22:41:29.484127Z","shell.execute_reply":"2023-11-13T22:41:29.487935Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['id'] = train_df['id'] + '.tif'\nvalid_df['id'] = valid_df['id'] + '.tif'","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:41:29.492297Z","iopub.execute_input":"2023-11-13T22:41:29.492604Z","iopub.status.idle":"2023-11-13T22:41:29.553504Z","shell.execute_reply.started":"2023-11-13T22:41:29.492569Z","shell.execute_reply":"2023-11-13T22:41:29.552601Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Creating Data Generators for CNN\ntrain_datagen = ImageDataGenerator(\n    rescale=1/255,\n    rotation_range=40,\n    width_shift_range=0.2,\n    height_shift_range=0.2,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True,\n    fill_mode='nearest'\n)\n\nvalid_datagen = ImageDataGenerator(rescale=1/255)\n\ntrain_df['label'] = train_df['label'].astype(str)\nvalid_df['label'] = valid_df['label'].astype(str)\n\ntrain_generator = train_datagen.flow_from_dataframe(\n    dataframe=train_df,\n    directory=img_dir,\n    x_col='id',\n    y_col='label',\n    target_size=(96, 96),\n    batch_size=32,\n    class_mode='binary'\n)\n\nvalidation_generator = valid_datagen.flow_from_dataframe(\n    dataframe=valid_df,\n    directory=img_dir,\n    x_col='id',\n    y_col='label',\n    target_size=(96, 96),\n    batch_size=32,\n    class_mode='binary'\n)","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:41:29.554678Z","iopub.execute_input":"2023-11-13T22:41:29.555489Z","iopub.status.idle":"2023-11-13T22:52:08.854693Z","shell.execute_reply.started":"2023-11-13T22:41:29.555453Z","shell.execute_reply":"2023-11-13T22:52:08.853686Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Sequential()\n\n# Convolutional layer\nmodel.add(Conv2D(32, (3, 3), activation='relu', input_shape=(96, 96, 3)))\nmodel.add(MaxPooling2D((2, 2)))\n\n# Second layer\nmodel.add(Conv2D(64, (3, 3), activation='relu'))\nmodel.add(MaxPooling2D((2, 2)))\n\n# Third layer\nmodel.add(Conv2D(128, (3, 3), activation='relu'))\nmodel.add(MaxPooling2D((2, 2)))\n\nmodel.add(Flatten())\n\nmodel.add(Dense(128, activation='relu'))\n\n# Dropout layer\nmodel.add(Dropout(0.5))\n\n# Output layer\nmodel.add(Dense(1, activation='sigmoid'))\n\n# Compiling the model\nmodel.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:52:08.855854Z","iopub.execute_input":"2023-11-13T22:52:08.856157Z","iopub.status.idle":"2023-11-13T22:52:12.277729Z","shell.execute_reply.started":"2023-11-13T22:52:08.856121Z","shell.execute_reply":"2023-11-13T22:52:12.276950Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TR_STEPS = len(train_generator)\nVA_STEPS = len(validation_generator)\n\nprint(TR_STEPS)\nprint(VA_STEPS)","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:52:12.278730Z","iopub.execute_input":"2023-11-13T22:52:12.278981Z","iopub.status.idle":"2023-11-13T22:52:12.284276Z","shell.execute_reply.started":"2023-11-13T22:52:12.278960Z","shell.execute_reply":"2023-11-13T22:52:12.283195Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tr = model.fit(\n    x = train_generator, \n    steps_per_epoch = TR_STEPS, \n    epochs = 1,\n    validation_data = validation_generator, \n    validation_steps = VA_STEPS, \n    verbose = 1\n)","metadata":{"execution":{"iopub.status.busy":"2023-11-13T22:52:12.285529Z","iopub.execute_input":"2023-11-13T22:52:12.285850Z","iopub.status.idle":"2023-11-13T23:26:29.601083Z","shell.execute_reply.started":"2023-11-13T22:52:12.285819Z","shell.execute_reply":"2023-11-13T23:26:29.600304Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pickle\nmodel.save('SJ_HCD.h5')\npickle.dump(tr,open(f'SJ_HCD_history.pkl', 'wb'))","metadata":{"execution":{"iopub.status.busy":"2023-11-13T23:26:29.602320Z","iopub.execute_input":"2023-11-13T23:26:29.602605Z","iopub.status.idle":"2023-11-13T23:26:29.794033Z","shell.execute_reply.started":"2023-11-13T23:26:29.602580Z","shell.execute_reply":"2023-11-13T23:26:29.793195Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#test to see if this saves \n","metadata":{"execution":{"iopub.status.busy":"2023-11-13T23:26:29.795273Z","iopub.execute_input":"2023-11-13T23:26:29.795559Z","iopub.status.idle":"2023-11-13T23:26:29.800003Z","shell.execute_reply.started":"2023-11-13T23:26:29.795534Z","shell.execute_reply":"2023-11-13T23:26:29.799131Z"},"trusted":true},"execution_count":null,"outputs":[]}]}