{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport warnings\nwarnings.filterwarnings('ignore')\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nimport keras\nfrom keras.models import Sequential\nfrom keras.layers import (Dense, Conv2D , MaxPool2D , Flatten , Dropout ,\n                          BatchNormalization,Input,AveragePooling2D,GlobalAveragePooling2D)\nfrom tensorflow.keras.models import Model\n\nfrom sklearn.metrics import classification_report,confusion_matrix\nfrom keras.callbacks import ReduceLROnPlateau\nimport tensorflow as tf\nfrom keras.optimizers import SGD,Adam\n\nfrom tensorflow.keras.applications.vgg16 import VGG16\nfrom tensorflow.keras.applications.efficientnet import EfficientNetB7\n# for dirname, _, filenames in os.walk('/kaggle/input'):\n#     for filename in filenames:\n#         print(os.path.join(dirname, filename))\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"main_path = '/kaggle/input/ranzcr-clip-catheter-line-classification'\nout_path = '../input/ranzcr-clip-catheter-line-classification'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"os.listdir(out_path)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for path in os.listdir(main_path):\n    print(path)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df = pd.read_csv(os.path.join(main_path,'train.csv'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_annotate = pd.read_csv(os.path.join(main_path,'train_annotations.csv'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_annotate.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sample_df =  pd.read_csv(os.path.join(main_path,'sample_submission.csv'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sample_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sample_df.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def append_ext(fn):\n    return fn+\".jpg\"\n\ntrain_df[\"StudyInstanceUID\"]=train_df[\"StudyInstanceUID\"].apply(append_ext)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# train_df[\"StudyInstanceUID\"].tolist()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"datagen=ImageDataGenerator(rescale=1./255.,\n                            validation_split=0.25,\n                            featurewise_center=True,\n                            featurewise_std_normalization=True,\n                            rotation_range=20,\n                            width_shift_range=0.2,\n                            height_shift_range=0.2,\n                            horizontal_flip=True,\n                            vertical_flip=True,\n                            fill_mode=\"nearest\"                            \n                          )\n\ntrain_generator=datagen.flow_from_dataframe(\ndataframe=train_df,\ndirectory=\"/kaggle/input/ranzcr-clip-catheter-line-classification/train/\",\nx_col=\"StudyInstanceUID\",\ny_col=['ETT - Abnormal', 'ETT - Borderline',\n       'ETT - Normal', 'NGT - Abnormal', 'NGT - Borderline',\n       'NGT - Incompletely Imaged', 'NGT - Normal', 'CVC - Abnormal',\n       'CVC - Borderline', 'CVC - Normal', 'Swan Ganz Catheter Present'],\nsubset=\"training\",\nbatch_size=32,\nseed=42,\nshuffle=True,\nclass_mode=\"raw\",\ncolor_mode='rgb',\ntarget_size=(224,224))\n\n\nval_generator=datagen.flow_from_dataframe(\ndataframe=train_df,\ndirectory=\"/kaggle/input/ranzcr-clip-catheter-line-classification/train/\",\nx_col=\"StudyInstanceUID\",\ny_col=['ETT - Abnormal', 'ETT - Borderline',\n       'ETT - Normal', 'NGT - Abnormal', 'NGT - Borderline',\n       'NGT - Incompletely Imaged', 'NGT - Normal', 'CVC - Abnormal',\n       'CVC - Borderline', 'CVC - Normal', 'Swan Ganz Catheter Present'],\nsubset=\"validation\",\nbatch_size=32,\nseed=42,\nshuffle=True,\nclass_mode=\"raw\",\ncolor_mode='rgb',\ntarget_size=(224,224))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"num_classes = 11\n# model = Sequential()\n# model.add(Conv2D(32 , (3,3) , strides = 1 , padding = 'same' , activation = 'relu' , input_shape = (150,150,1)))\n# model.add(BatchNormalization())\n# model.add(MaxPool2D((2,2) , strides = 2 , padding = 'same'))\n# model.add(Conv2D(64 , (3,3) , strides = 1 , padding = 'same' , activation = 'relu'))\n# model.add(Dropout(0.1))\n# model.add(BatchNormalization())\n# model.add(MaxPool2D((2,2) , strides = 2 , padding = 'same'))\n# model.add(Conv2D(64 , (3,3) , strides = 1 , padding = 'same' , activation = 'relu'))\n# model.add(BatchNormalization())\n# model.add(MaxPool2D((2,2) , strides = 2 , padding = 'same'))\n# model.add(Conv2D(128 , (3,3) , strides = 1 , padding = 'same' , activation = 'relu'))\n# model.add(Dropout(0.2))\n# model.add(BatchNormalization())\n# model.add(MaxPool2D((2,2) , strides = 2 , padding = 'same'))\n# model.add(Conv2D(256 , (3,3) , strides = 1 , padding = 'same' , activation = 'relu'))\n# model.add(Dropout(0.2))\n# model.add(BatchNormalization())\n# model.add(MaxPool2D((2,2) , strides = 2 , padding = 'same'))\n# model.add(Flatten())\n# model.add(Dense(units = 128 , activation = 'relu'))\n# model.add(Dropout(0.2))\n# model.add(Dense(units = num_classes , activation = 'softmax'))\n# model.compile(optimizer = \"rmsprop\" , loss = 'CategoricalCrossentropy' , metrics = ['accuracy'])\n# model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# def exponential_decay(lr0, s):\n#     def exponential_decay_fn(epoch):\n#         return lr0 * 0.1 **(epoch / s)\n#     return exponential_decay_fn\n\n# exponential_decay_fn = exponential_decay(0.01, 20)\n\n# lr_scheduler = tf.keras.callbacks.LearningRateScheduler(exponential_decay_fn)\n\nlearn_rate=.001\nsgd=SGD(lr=learn_rate,momentum=.9,nesterov=False)\n\ncheckpoint_cb = tf.keras.callbacks.ModelCheckpoint('model.h5', save_best_only=True, \n                                                   monitor='val_auc', mode='max')\n\nearly_stopping_cb = tf.keras.callbacks.EarlyStopping(patience=3,\n                                                     restore_best_weights=True)\nlr_reducer = tf.keras.callbacks.ReduceLROnPlateau(monitor=\"val_auc\", patience=3, min_lr=1e-6, mode='max')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"device_name = tf.test.gpu_device_name()\nif device_name!='/device:GPU:0':\n    raise SystemError('GPU Device not found')\nprint('Found GPU at:{}'.format(device_name))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"with tf.device('/gpu:0'):\n    baseModel = EfficientNetB7(weights = None, include_top=False,\n                  input_tensor=Input(shape=(224, 224, 3)),\n                              drop_connect_rate=0.7)\n    baseModel.load_weights('../input/tfkerasefficientnetimagenetnotop/efficientnetb7_notop.h5')\n    headModel = baseModel.output\n    headModel = GlobalAveragePooling2D()(headModel)\n    headModel = Dense(1024, activation='relu')(headModel)\n    headModel = Dense(num_classes, activation=\"sigmoid\")(headModel)\n    model = Model(inputs=baseModel.input, outputs=headModel)\n\n    for layer in baseModel.layers:\n        layer.trainable = False\n    model.compile(loss=\"binary_crossentropy\", optimizer='sgd',metrics=[\"accuracy\"])\n    history = model.fit(\n            train_generator,\n            epochs=20,\n            batch_size = 32,\n            validation_data=val_generator,\n            callbacks=[checkpoint_cb,lr_reducer,early_stopping_cb])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"hist_df = pd.DataFrame(history.history)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"hist_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Training Vs Validation Accuracy\nplt.plot(hist_df.accuracy)\nplt.plot(hist_df.val_accuracy)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Training vs Validation Loss\nplt.plot(hist_df.loss)\nplt.plot(hist_df.val_loss)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_submission = sample_df.copy()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_submission_for_loader = sample_df.copy()\ndf_submission_for_loader[\"StudyInstanceUID\"]=df_submission_for_loader[\"StudyInstanceUID\"].apply(append_ext)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_datagen=ImageDataGenerator(rescale=1./255.)\ntest_generator=test_datagen.flow_from_dataframe(\ndataframe=df_submission_for_loader,\ndirectory='/kaggle/input/ranzcr-clip-catheter-line-classification/test/',\nx_col=\"StudyInstanceUID\",\ny_col=None,\nbatch_size=32,\nseed=42,\nshuffle=False,\nclass_mode=None,\ntarget_size=(224,224))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_preds = model.predict(test_generator)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_submission.iloc[:, 1:] = y_preds\ndf_submission.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_submission.to_csv('submission.csv',index=False)","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}