{"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":"# Loading Required Libraries","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd \nfrom pathlib import Path\nimport tensorflow as tf\nfrom keras_preprocessing import image\nfrom keras.layers import Conv2D,MaxPooling2D,Dense,Input,Dropout,Flatten,concatenate,AveragePooling2D,BatchNormalization\nfrom tensorflow.keras.utils import to_categorical,plot_model\nfrom tensorflow.keras.optimizers import Adam\nfrom keras.models import Model\nfrom sklearn.preprocessing import LabelEncoder\nfrom tensorflow.keras.callbacks import ModelCheckpoint, LearningRateScheduler\nfrom tensorflow.keras.callbacks import ReduceLROnPlateau\nfrom sklearn.metrics import f1_score\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\nimport warnings\nwarnings.filterwarnings(action = 'ignore')","metadata":{"execution":{"iopub.status.busy":"2022-10-07T15:47:31.434610Z","iopub.execute_input":"2022-10-07T15:47:31.435098Z","iopub.status.idle":"2022-10-07T15:47:37.072790Z","shell.execute_reply.started":"2022-10-07T15:47:31.434977Z","shell.execute_reply":"2022-10-07T15:47:37.071749Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Loading Data","metadata":{}},{"cell_type":"code","source":"train_df = pd.read_csv('../input/datathonindoml-2022/train_labels.csv')\nID = []\nfor i in train_df['id']:\n    i_d = f\"{i}\"+\".tif\"\n    ID.append(i_d)\ntrain_df['ID'] = ID\n    ","metadata":{"execution":{"iopub.status.busy":"2022-10-07T15:47:37.074834Z","iopub.execute_input":"2022-10-07T15:47:37.076114Z","iopub.status.idle":"2022-10-07T15:47:37.111141Z","shell.execute_reply.started":"2022-10-07T15:47:37.076075Z","shell.execute_reply":"2022-10-07T15:47:37.110249Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df","metadata":{"execution":{"iopub.status.busy":"2022-10-07T15:47:37.112896Z","iopub.execute_input":"2022-10-07T15:47:37.113495Z","iopub.status.idle":"2022-10-07T15:47:37.132983Z","shell.execute_reply.started":"2022-10-07T15:47:37.113458Z","shell.execute_reply":"2022-10-07T15:47:37.132076Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = train_df[['ID','label']]\ntrain['ID'] =  train['ID'].astype('string')\ntrain['label'] =  train['label'].astype('string')","metadata":{"execution":{"iopub.status.busy":"2022-10-07T15:47:37.135433Z","iopub.execute_input":"2022-10-07T15:47:37.136089Z","iopub.status.idle":"2022-10-07T15:47:37.155810Z","shell.execute_reply.started":"2022-10-07T15:47:37.136052Z","shell.execute_reply":"2022-10-07T15:47:37.154723Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"folder_path = \"../input/datathonindoml-2022/train/train/\"\npicture_size  = 128\nbatch_size = 128\n\ndatagen_train = image.ImageDataGenerator(rescale = 1./255,shear_range = 0.2,validation_split=0.2)\ntrain_set = datagen_train.flow_from_dataframe(dataframe = train,\n                                             directory = folder_path,\n                                             x_col = \"ID\",\n                                             y_col = \"label\",\n                                             shuffle = True,\n                                             target_size=(128,128),\n                                             subset = 'training')\nvalidation_set = datagen_train.flow_from_dataframe(dataframe = train,\n                                             directory = folder_path,\n                                             x_col = \"ID\",\n                                             y_col = \"label\",\n                                             shuffle = True,\n                                             target_size=(128,128),\n                                             subset = 'validation')","metadata":{"execution":{"iopub.status.busy":"2022-10-07T15:47:37.157645Z","iopub.execute_input":"2022-10-07T15:47:37.157999Z","iopub.status.idle":"2022-10-07T15:48:07.640423Z","shell.execute_reply.started":"2022-10-07T15:47:37.157964Z","shell.execute_reply":"2022-10-07T15:48:07.639019Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"folder_path = \"../input/datathonindoml-2022/validation/\"\npicture_size  = 128\nbatch_size = 128\ndatagen_validation = image.ImageDataGenerator(rescale = 1./255,shear_range = 0.2)\n\ntest_set = datagen_validation.flow_from_directory(folder_path,target_size = (picture_size,picture_size)\n                                            \n                                             )","metadata":{"execution":{"iopub.status.busy":"2022-10-07T17:04:00.770777Z","iopub.execute_input":"2022-10-07T17:04:00.771166Z","iopub.status.idle":"2022-10-07T17:04:00.879770Z","shell.execute_reply.started":"2022-10-07T17:04:00.771133Z","shell.execute_reply":"2022-10-07T17:04:00.878790Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Training NN","metadata":{}},{"cell_type":"code","source":"inputs = Input(shape = (128,128,3))\nx = Conv2D(256,2,padding = 'same',activation = 'relu',strides = 1)(inputs)\nx = BatchNormalization()(x)\nx = MaxPooling2D(pool_size = (2,2))(x)\nx = Dropout(0.2)(x)\n\nx = Conv2D(512,2,padding = 'same',activation = 'relu',strides = 1)(x)\nx = BatchNormalization()(x)\nx = MaxPooling2D(pool_size = (2,2))(x)\nx = Dropout(0.2)(x)\n\nx = Conv2D(256,2,padding = 'same',activation = 'relu',strides = 1)(x)\nx = BatchNormalization()(x)\nx = MaxPooling2D(pool_size = (2,2))(x)\nx = Dropout(0.2)(x)\n\nx = Conv2D(128,2,padding = 'same',activation = 'relu',strides = 1)(x)\nx = BatchNormalization()(x)\nx = MaxPooling2D(pool_size = (2,2))(x)\nx = Dropout(0.2)(x)\n\nx = Conv2D(512,2,padding = 'same',activation = 'relu',strides = 1)(x)\nx = BatchNormalization()(x)\nx = MaxPooling2D(pool_size = (2,2))(x)\nx = Dropout(0.2)(x)\n\nx = Conv2D(256,2,padding = 'same',activation = 'relu',strides = 1)(x)\nx = Flatten()(x)\n\nx = Dense(2048,activation = 'relu')(x)\nx = Dropout(0.2)(x)\nx = Dense(2048,activation = 'relu')(x)\nx = Dropout(0.2)(x)\nx = Dense(128,activation = 'relu')(x)\noutputs = Dense(16,activation = 'softmax')(x)\n\nmodel = Model(inputs,outputs)\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2022-10-07T16:13:40.119451Z","iopub.execute_input":"2022-10-07T16:13:40.119829Z","iopub.status.idle":"2022-10-07T16:13:40.268188Z","shell.execute_reply.started":"2022-10-07T16:13:40.119796Z","shell.execute_reply":"2022-10-07T16:13:40.267097Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lr_reducer = ReduceLROnPlateau(factor=np.sqrt(0.1),\n                               cooldown=0,\n                               monitor = 'val_loss',\n                               patience=2,\n                               min_lr=0.5e-6)","metadata":{"execution":{"iopub.status.busy":"2022-10-07T16:13:40.436414Z","iopub.execute_input":"2022-10-07T16:13:40.437083Z","iopub.status.idle":"2022-10-07T16:13:40.442263Z","shell.execute_reply.started":"2022-10-07T16:13:40.437038Z","shell.execute_reply":"2022-10-07T16:13:40.441076Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"callbacks = [lr_reducer]","metadata":{"execution":{"iopub.status.busy":"2022-10-07T16:13:40.711637Z","iopub.execute_input":"2022-10-07T16:13:40.712537Z","iopub.status.idle":"2022-10-07T16:13:40.717854Z","shell.execute_reply.started":"2022-10-07T16:13:40.712489Z","shell.execute_reply":"2022-10-07T16:13:40.716796Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(loss = 'categorical_crossentropy',optimizer='nadam',metrics = ['acc'])","metadata":{"execution":{"iopub.status.busy":"2022-10-07T16:13:41.031801Z","iopub.execute_input":"2022-10-07T16:13:41.032933Z","iopub.status.idle":"2022-10-07T16:13:41.043847Z","shell.execute_reply.started":"2022-10-07T16:13:41.032884Z","shell.execute_reply":"2022-10-07T16:13:41.042837Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(train_set,epochs = 25,batch_size = 128,\n              callbacks = callbacks,validation_data = validation_set)","metadata":{"execution":{"iopub.status.busy":"2022-10-07T16:13:42.238606Z","iopub.execute_input":"2022-10-07T16:13:42.238976Z","iopub.status.idle":"2022-10-07T16:55:38.139648Z","shell.execute_reply.started":"2022-10-07T16:13:42.238943Z","shell.execute_reply":"2022-10-07T16:55:38.138707Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.evaluate(validation_set)","metadata":{"execution":{"iopub.status.busy":"2022-10-07T17:03:01.552660Z","iopub.execute_input":"2022-10-07T17:03:01.553082Z","iopub.status.idle":"2022-10-07T17:03:22.255557Z","shell.execute_reply.started":"2022-10-07T17:03:01.553042Z","shell.execute_reply":"2022-10-07T17:03:22.254549Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred = model.predict(test_set)","metadata":{"execution":{"iopub.status.busy":"2022-10-07T17:04:06.047520Z","iopub.execute_input":"2022-10-07T17:04:06.047924Z","iopub.status.idle":"2022-10-07T17:04:17.258895Z","shell.execute_reply.started":"2022-10-07T17:04:06.047891Z","shell.execute_reply":"2022-10-07T17:04:17.257365Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction = np.argmax(pred,axis = 1)\nprediction","metadata":{"execution":{"iopub.status.busy":"2022-10-07T17:04:17.263675Z","iopub.execute_input":"2022-10-07T17:04:17.265638Z","iopub.status.idle":"2022-10-07T17:04:17.274253Z","shell.execute_reply.started":"2022-10-07T17:04:17.265604Z","shell.execute_reply":"2022-10-07T17:04:17.273263Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"index = np.arange(17801,18701)","metadata":{"execution":{"iopub.status.busy":"2022-10-07T17:04:17.275719Z","iopub.execute_input":"2022-10-07T17:04:17.276871Z","iopub.status.idle":"2022-10-07T17:04:17.284269Z","shell.execute_reply.started":"2022-10-07T17:04:17.276835Z","shell.execute_reply":"2022-10-07T17:04:17.283353Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"output = pd.DataFrame({'id':index,'label':prediction})\noutput","metadata":{"execution":{"iopub.status.busy":"2022-10-07T17:04:17.286490Z","iopub.execute_input":"2022-10-07T17:04:17.287431Z","iopub.status.idle":"2022-10-07T17:04:17.302270Z","shell.execute_reply.started":"2022-10-07T17:04:17.287396Z","shell.execute_reply":"2022-10-07T17:04:17.301218Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"output.to_csv(\"Submission.csv\",index = False)","metadata":{"execution":{"iopub.status.busy":"2022-10-07T17:04:17.303549Z","iopub.execute_input":"2022-10-07T17:04:17.304619Z","iopub.status.idle":"2022-10-07T17:04:17.313972Z","shell.execute_reply.started":"2022-10-07T17:04:17.304585Z","shell.execute_reply":"2022-10-07T17:04:17.312731Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}