{"cells":[{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import os\nimport tensorflow as tf\nimport zipfile","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n%matplotlib inline","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"os.listdir('../input/resnet50')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train = pd.read_csv('../input/aptos2019-blindness-detection/train.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train['id_code'] = train['id_code'] + '.png'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import cv2 as cv","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=[20,20])\npos = 1\nfor file in train['id_code'][:25]:\n    img = cv.imread('../input/aptos2019-blindness-detection/train_images/'+file)\n    img = cv.cvtColor(img, cv.COLOR_BGR2RGB)\n    img = cv.resize(img, (1024, 1024))\n    plt.subplot(5, 5, pos)\n    pos += 1\n    plt.title(train['diagnosis'][pos])\n    plt.imshow(img)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.countplot(x='diagnosis', data=train, palette=\"GnBu_d\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# class_0, class_1, class_2, class_3, class_4 = train['diagnosis'].value_counts()\n# df_0 = train[train['diagnosis'] == '0']\n# df_1 = train[train['diagnosis'] == '1']\n# df_2 = train[train['diagnosis'] == '2']\n# df_3 = train[train['diagnosis'] == '3']\n# df_4 = train[train['diagnosis'] == '4']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train['diagnosis'].value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# df_0_u = df_0.sample(class_4)\n# df_1_u = df_1.sample(class_4)\n# df_2_u = df_2.sample(class_4)\n# df_4_u = df_4.sample(class_4)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# df_u = pd.concat([df_0_u, df_1_u, df_2_u, df_3, df_4_u], axis=0)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# sns.countplot(x='diagnosis', data=df_u)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# df_u['diagnosis'] = df_u['diagnosis'].astype('str')\n# # train['diagnosis'] = train['diagnosis'].astype('str')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"seed = 10\nbatch_size = 32\nimg_size = 32\nnb_epochs = 5","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train = train.sample(frac=1, random_state=seed)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train['diagnosis'] = train['diagnosis'].astype('str')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x = train['id_code'].values\ny = train['diagnosis'].values","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train, x_va, y_train, y_val = train_test_split(x, y, random_state = 0, test_size=0.2, stratify=y)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train.shape, x_val.shape, x_test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df = pd.DataFrame({'image': x_train, 'class': y_train})\nvalid_df = pd.DataFrame({'image': x_val, 'class': y_val})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"valid_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_generator = train_datagen.flow_from_dataframe(\n  dataframe = train_df,\n    directory = '../input/aptos2019-blindness-detection/train_images',\n    target_size=(img_size,img_size),\n    x_col='image',\n    y_col='class',\n    class_mode='categorical',\n    color_mode='grayscale',\n    batch_size=batch_size,\n    shuffle=True\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"valid_generator = valid_datagen.flow_from_dataframe(\n  dataframe = valid_df,\n    directory = '../input/aptos2019-blindness-detection/train_images',\n    target_size=(img_size, img_size),\n    x_col='image',\n    y_col='class',\n    class_mode='categorical',\n    color_mode='grayscale',\n    batch_size=batch_size,\n    shuffle=True\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# local_weights_file = '../input/resnet50/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\n# pre_trained_model = tf.keras.applications.resnet50.ResNet50(input_shape = (256, 256, 1), \n#                                 include_top = False, \n#                                 weights = None)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# pre_trained_model.load_weights(local_weights_file)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# for layer in pre_trained_model.layers:\n#   layer.trainable = False","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-output":true},"cell_type":"code","source":"# pre_trained_model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# last_layer = pre_trained_model.get_layer('mixed7')\n# print('last layer output shape: ', last_layer.output_shape)\n# last_output = last_layer.output","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = tf.keras.models.Sequential([\n#     pre_trained_model,\n#     tf.keras.layers.MaxPooling2D(),\n#     tf.keras.layers.Dropout(0.5),\n#     tf.keras.layers.Flatten(),\n    tf.keras.layers.Conv2D(32, (6, 6), activation = tf.nn.relu, input_shape = (img_size, img_size, 1)),\n    tf.keras.layers.MaxPool2D(2, 2),\n    tf.keras.layers.Dropout(0.8),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(5, activation = tf.nn.softmax)\n])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"checkpoint = tf.keras.callbacks.ModelCheckpoint(\"model_1.h5\", monitor='val_loss', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)\n\nlearning_rate_reduction = tf.keras.callbacks.ReduceLROnPlateau(monitor='val_acc', \n                                            patience=2, \n                                            verbose=1, \n                                            factor=0.5, \n                                            min_lr=0.000001)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"optimizer = tf.keras.optimizers.RMSprop(lr=0.001)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['acc'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-output":true},"cell_type":"code","source":"history = model.fit_generator(train_generator, \n                    epochs=nb_epochs, \n                    validation_data=valid_generator, \n                    callbacks=[learning_rate_reduction, checkpoint],\n                    steps_per_epoch=100,\n                    use_multiprocessing=True,\n                    class_weight={0:0.1, 1: 0.2, 2:0.2, 3:0.3, 4:0.2})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# # Plot the loss and accuracy curves for training and validation \n# fig, ax = plt.subplots(2,1)\n# ax[0].plot(history.history['loss'], color='b', label=\"Training loss\")\n# ax[0].plot(history.history['val_loss'], color='r', label=\"validation loss\",axes =ax[0])\n# legend = ax[0].legend(loc='best', shadow=True)\n\n# ax[1].plot(history.history['acc'], color='b', label=\"Training accuracy\")\n# ax[1].plot(history.history['val_acc'], color='r',label=\"Validation accuracy\")\n# legend = ax[1].legend(loc='best', shadow=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# train_preds = model.predict_generator(valid_generator)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# train_preds = [np.argmax(pred) for pred in train_preds]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# from sklearn.metrics import cohen_kappa_score","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# print(\"Train Cohen Kappa score: %.3f\" % cohen_kappa_score(train_preds, y_test.astype('int'), weights='quadratic'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test = pd.read_csv('../input/aptos2019-blindness-detection/test.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df = pd.DataFrame()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df['image'] = test['id_code'] + '.png'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_generator = test_datagen.flow_from_dataframe(\n  dataframe = test_df,\n    directory = '../input/aptos2019-blindness-detection/test_images',\n    target_size=(img_size, img_size),\n    x_col='image',\n    y_col=None,\n    class_mode=None,\n    color_mode='grayscale',\n    batch_size=batch_size\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred = model.predict_generator(test_generator)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred = np.argmax(pred, 1).reshape(-1, 1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred.shape, test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred = pd.DataFrame(pred)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission = test.copy()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission['diagnosis'] = pred","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.countplot(x='diagnosis', data=submission)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission.to_csv('submission.csv',index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}