{"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":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport glob\nimport matplotlib.pyplot as plt\nimport cv2\nimport pandas as pd\ndf = pd.read_csv('../input/datathonindoml-2022/train_labels.csv')\ndf.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-20T15:42:05.607500Z","iopub.execute_input":"2022-11-20T15:42:05.607949Z","iopub.status.idle":"2022-11-20T15:42:05.908600Z","shell.execute_reply.started":"2022-11-20T15:42:05.607843Z","shell.execute_reply":"2022-11-20T15:42:05.907342Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.shape","metadata":{"execution":{"iopub.status.busy":"2022-11-20T15:42:10.636157Z","iopub.execute_input":"2022-11-20T15:42:10.636654Z","iopub.status.idle":"2022-11-20T15:42:10.645443Z","shell.execute_reply.started":"2022-11-20T15:42:10.636597Z","shell.execute_reply":"2022-11-20T15:42:10.644247Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport shutil\nfor ind in df.index:\n    path = os.path.join(\"./trainclass\",str(df[\"label\"][ind]))\n    if not os.path.exists(path):\n        os.makedirs(path)\nfor ind in df.index:\n    path = os.path.join(\"./trainclass\",str(df[\"label\"][ind]))\n    shutil.copy('../input/datathonindoml-2022/train/train/'+str(df['id'][ind])+'.tif', './trainclass/'+str(df['label'][ind]))","metadata":{"execution":{"iopub.status.busy":"2022-11-20T15:42:14.540448Z","iopub.execute_input":"2022-11-20T15:42:14.540916Z","iopub.status.idle":"2022-11-20T15:45:22.919157Z","shell.execute_reply.started":"2022-11-20T15:42:14.540852Z","shell.execute_reply":"2022-11-20T15:45:22.917779Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.preprocessing.image import ImageDataGenerator\ntrain_datagenerator = ImageDataGenerator(rescale = 1./255.,rotation_range = 35, width_shift_range = 0.2, height_shift_range = 0.2, shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True,validation_split=0.2)\nvalidation_datagenerator = ImageDataGenerator(rescale = 1./255, )\n\ntrain_data = train_datagenerator.flow_from_directory('./trainclass',\n                                                   target_size = (256,256),\n                                                   batch_size = 128,\n                                                   subset = \"training\",\n                                                   color_mode = \"grayscale\")\n\ntesting_data = train_datagenerator.flow_from_directory('./trainclass',\n                                                      target_size = (256,256),\n                                                      batch_size = 128,\n                                                      subset = \"validation\",\n                                                      color_mode = \"grayscale\")\n\nvalidation_data = validation_datagenerator.flow_from_directory('../input/datathonindoml-2022/validation',\n                                                              target_size = (256,256),\n                                                              batch_size = 128,\n                                                              color_mode = 'grayscale')","metadata":{"execution":{"iopub.status.busy":"2022-11-20T15:45:34.406275Z","iopub.execute_input":"2022-11-20T15:45:34.406786Z","iopub.status.idle":"2022-11-20T15:45:42.853215Z","shell.execute_reply.started":"2022-11-20T15:45:34.406751Z","shell.execute_reply":"2022-11-20T15:45:42.851998Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.models import Sequential\nfrom keras.layers import Conv2D, MaxPool2D, Flatten, Dense, InputLayer, BatchNormalization, Dropout\n# build a sequential model\nmodel = Sequential()\nmodel.add(InputLayer(input_shape=(256, 256, 1)))\n\n# 1st conv block\nmodel.add(Conv2D(25, (5, 5), activation='relu', strides=(1, 1), padding='same'))\nmodel.add(MaxPool2D(pool_size=(2, 2), padding='same'))\n# 2nd conv block\nmodel.add(Conv2D(60, (5, 5), activation='relu', strides=(2, 2), padding='same'))\nmodel.add(MaxPool2D(pool_size=(2, 2), padding='same'))\nmodel.add(BatchNormalization())\n# 3rd conv block\nmodel.add(Conv2D(90, (3, 3), activation='relu', strides=(2, 2), padding='same'))\nmodel.add(MaxPool2D(pool_size=(2, 2), padding='valid'))\nmodel.add(BatchNormalization())\n# ANN block\nmodel.add(Flatten())\nmodel.add(Dense(units=150, activation='relu'))\nmodel.add(Dense(units=150, activation='relu'))\nmodel.add(Dropout(0.25))\n\n\n# output layer\nmodel.add(Dense(units=16, activation='softmax'))","metadata":{"execution":{"iopub.status.busy":"2022-11-20T15:49:48.351738Z","iopub.execute_input":"2022-11-20T15:49:48.352714Z","iopub.status.idle":"2022-11-20T15:49:48.755035Z","shell.execute_reply.started":"2022-11-20T15:49:48.352669Z","shell.execute_reply":"2022-11-20T15:49:48.753938Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(loss='categorical_crossentropy', optimizer=\"adam\", metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2022-11-20T15:49:54.531670Z","iopub.execute_input":"2022-11-20T15:49:54.532152Z","iopub.status.idle":"2022-11-20T15:49:54.548667Z","shell.execute_reply.started":"2022-11-20T15:49:54.532111Z","shell.execute_reply":"2022-11-20T15:49:54.547449Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit_generator(train_data, epochs=30, validation_data=testing_data)","metadata":{"execution":{"iopub.status.busy":"2022-11-20T15:50:17.751187Z","iopub.execute_input":"2022-11-20T15:50:17.751659Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction = model.predict(validation_data, verbose = 1, batch_size = 128)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction_class = np.argmax(prediction,axis = 1)\ndocnames = [i.split(\"/\")[1].split(\".tif\")[0] for i in validation_data.filenames]\nanswer = pd.DataFrame({\"id\":docnames,\"label\":prediction_class}, columns = [\"id\",\"label\"])\nanswer.head()","metadata":{},"execution_count":null,"outputs":[]}]}