{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"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 cv2\nimport matplotlib.pyplot as plt\nfrom tqdm import tqdm\n\nimport os\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/aptos2019-blindness-detection/train.csv')\n# dataTest = pd.read_csv('/kaggle/input/aptos2019-blindness-detection/test.csv')\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# path_directorie = '/kaggle/input/aptos2019-blindness-detection/test_images/'\n# size = 192\n\n# images_test = []\n# len_test = len(dataTest['id_code'])\n# for i in tqdm(range(len_test)):\n   \n#     image = os.path.join(path_directorie+str(dataTest['id_code'][i])+'.png')\n#     image = cv2.imread(image)\n#     image = cv2.resize(image,(size,size))\n#     images_test.append(image)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"size = 192\npath_directorie = '/kaggle/input/aptos2019-blindness-detection/train_images/'\nimages_train = []\nlables = []\nlen_train = len(train['id_code'])\nfor i in tqdm(range(len_train)):\n    image = os.path.join(path_directorie+str(train['id_code'][i])+'.png')\n    image = cv2.imread(image)\n    image = cv2.resize(image,(size,size))\n    label = train['diagnosis'][i]\n    images_train.append(image)\n    lables.append(label)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = np.array(images_train) \n# X_testt = np.array(images_test)\n#lables = np.array(lables)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\n\nle=LabelEncoder()\nlables=le.fit_transform(lables)\n\nimport keras\nlables= keras.utils.to_categorical(lables,5)\nlables","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = X_train /255\n# X_testt = X_testt /255","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train =X_train.reshape(-1,size,size,3)\n# X_testt =X_testt.reshape(-1,size,size,3)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\nX_train1 , X_valid, Y_train1,Y_valid = train_test_split(X_train , lables, test_size=0.25, random_state=7 )\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train , X_test, Y_train,Y_test = train_test_split(X_train1 , Y_train1, test_size=0.25, random_state=7 )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport seaborn as sns\nimport keras\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Conv2D , MaxPooling2D , Flatten , Dropout\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras import optimizers\nfrom keras import backend as K\nfrom keras.models import Sequential\nfrom keras.layers.core import Dense, Dropout, Activation, Flatten\nfrom keras.layers.convolutional import Convolution2D, MaxPooling2D\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom sklearn.metrics import classification_report, confusion_matrix\nfrom keras.regularizers import l2,l1\nfrom keras.layers import AveragePooling2D, BatchNormalization\nfrom keras.layers import Activation, Convolution2D, Dropout, Conv2D,MaxPool2D\nfrom keras.layers import AveragePooling2D, BatchNormalization\nfrom keras.layers import GlobalAveragePooling2D\n\nfrom keras.layers import SeparableConv2D\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.callbacks import ReduceLROnPlateau, ModelCheckpoint, EarlyStopping\n\nmodel = Sequential()\nmodel.add(Conv2D(input_shape=(size,size,3),filters=32,kernel_size=(3,3),padding=\"same\", activation=\"relu\"))\n\n\n\nmodel.add(MaxPool2D(2,2))\n\nmodel.add(Conv2D(32 , (3,3)  , activation = 'relu' ))\nmodel.add(MaxPool2D(2,2 ))\n\nmodel.add(Conv2D(64 , (3,3)  , activation = 'relu' ))\nmodel.add(MaxPool2D((2,2) ))\n\nmodel.add(Conv2D(128 , (1,1)  , activation = 'relu' ))\nmodel.add(MaxPool2D((2,2) ))\n\n\n\nmodel.add(Flatten())\nmodel.add(Dense(units=64,activation=\"relu\"))\nmodel.add(keras.layers.Dropout(0.13))\n\nmodel.add(Dense(5, activation='sigmoid'))\n\ndata_generator = keras.preprocessing.image.ImageDataGenerator( zoom_range=0.00005,  # set range for random zoom\n        # set mode for filling points outside the input boundaries\n        fill_mode='constant',\n        cval=0.,  # value used for fill_mode = \"constant\"\n        horizontal_flip=True,  # randomly flip images\n        vertical_flip=True,\n                                                             \n                                                             \n                                                             rotation_range=180,)\n# width_shift_range=0.2,\n# height_shift_range=0.2,\n# shear_range=0.15,\n# fill_mode=\"nearest\"\nmodel.compile(loss='binary_crossentropy', optimizer='Nadam', metrics=['accuracy'])\n\nEPOCHS = 90\nBS =256\nBATCH_SIZE =32\nfilepath=\"weights.best1.hdf5\"\n\ncheckpoint = ModelCheckpoint(filepath, monitor='val_loss', verbose=1, save_best_only=True, mode='min')\n# early = EarlyStopping(monitor=\"val_loss\", mode=\"min\", patience=300)\n# reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2,\n#                               patience=5, min_lr=0.001)\n\n\nes = EarlyStopping(monitor='val_loss', mode='min', patience=20, restore_best_weights=True, verbose=1)\nrlrop = ReduceLROnPlateau(monitor='val_loss', mode='min', patience=3, factor=0.5, min_lr=1e-6, verbose=1)\n\ncallbacks_list = [checkpoint, es] #early\nhistory = model.fit_generator( data_generator.flow(X_train, Y_train , batch_size=BATCH_SIZE), steps_per_epoch=X_train.shape[0] / BATCH_SIZE,\n     epochs=82,\n     validation_data=(X_valid,Y_valid),\n     callbacks=callbacks_list )\n# history = model.fit(X_train, Y_train , epochs=180,batch_size =256 , verbose =1, callbacks=callbacks_list, validation_data=(X_valid, Y_valid) )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"testModel = model.evaluate(X_test,Y_test)\nprint(\"Acuarcy = %.2f%%\"%(testModel[1]*100))\nprint(\"Loss = %.2f%%\"%(testModel[0]*100))\nprint(history.history.keys())\nplt.plot(history.history['accuracy'])\nplt.plot(history.history['val_accuracy'])\nplt.title('model accuracy')\nplt.ylabel('accuracy')\nplt.xlabel('epoch')\nplt.legend(['train', 'validation'], loc='upper left')\nplt.show()\n# summarize history for loss\nplt.plot(history.history['loss'])\nplt.plot(history.history['val_loss'])\nplt.title('model loss')\nplt.ylabel('loss')\nplt.xlabel('epoch')\nplt.legend(['train', 'validation'], loc='upper left')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predicted_classes = model.predict_classes(X_test)\nrounded_labels=np.argmax(Y_test, axis=1)\nconfusionMatrix = confusion_matrix(rounded_labels, predicted_classes)\nconfusionMatrix = pd.DataFrame(confusionMatrix , index = [i for i in range(5) if i != 5] , columns = [i for i in range(5) if i != 5])\nplt.figure(figsize = (8,8))\nsns.heatmap(confusionMatrix,cmap= \"OrRd_r\", linecolor = 'black' , linewidth = 1 , annot = True, fmt='')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"target_names = ['class 0', 'class 1', 'class 2', 'class 3', 'class 4']\nprint(classification_report(rounded_labels, predicted_classes, target_names=target_names))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","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}