{"cells":[{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import numpy as np \nimport pandas as pd\n\nimport cv2\nimport seaborn as sns\nimport matplotlib.pyplot as plt\nimport random\nimport os\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import LabelEncoder\nfrom keras.preprocessing.image import img_to_array, load_img\nfrom keras.optimizers import Adam\nfrom keras.models import Sequential\nfrom keras.layers.core import Activation\nfrom keras.layers.core import Flatten\nfrom keras.layers.core import Dense\nfrom keras.applications.vgg16 import VGG16\nfrom keras.utils.np_utils import to_categorical\nfrom keras import backend as K\nfrom keras.utils.vis_utils import plot_model\nfrom sklearn.metrics import accuracy_score, classification_report\nfrom sklearn.metrics import confusion_matrix\nfrom sklearn.metrics import roc_curve, roc_auc_score","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_data = pd.read_csv(\"/kaggle/input/aptos2019-blindness-detection/train.csv\")\ntrain_data.diagnosis.value_counts().plot(kind=\"bar\")\ntrain_data.head()\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"TRAIN_DATA_DIR = \"/kaggle/input/aptos2019-blindness-detection/train_images/\"\ndata =[]\n\ndef read_image_convert_to_array(filepath):\n    image = load_img(TRAIN_DATA_DIR+filepath+\".png\", target_size=(224,224))\n    image = img_to_array(image)\n    image /= 255.0\n    return image\n\ntrain_data[\"img_data\"] = train_data[\"id_code\"].apply(lambda x: read_image_convert_to_array(x))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X = train_data[\"img_data\"]\ny = train_data[\"diagnosis\"]\nX = np.stack(X)\nle = LabelEncoder()\n\ny = le.fit_transform(y)\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15)\n\ny_train = to_categorical(y_train)\ny_test = to_categorical(y_test)    \n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Generate the trained model and set all layers to be trainable\ntrained_model = VGG16(input_shape=(224,224,3), include_top=False)\n\nfor layer in trained_model.layers:\n    layer.trainable = True\n\n# Construct the model and compile\nmod1 = Flatten()\nmod_final = Dense(5, activation='softmax')\n\nmodel = Sequential([trained_model, mod1, mod_final])\n\nmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\nmodel.summary()\nplot_model(model, to_file='vgg.png')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Fit the model to the data and validate\nhistory = model.fit(X_train, y_train, validation_data=(X_test,y_test), epochs=15)\n\n# Plot the model results using seaborn and matplotlib\nsns.set(style='darkgrid')\n\nplt.plot(history.history['accuracy'])\nplt.plot(history.history['val_accuracy'])\nplt.title('Model accuracy')\nplt.ylabel('Accuracy')\nplt.xlabel('Epoch')\nplt.legend(['Train', 'Test'], loc='upper left')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred_Y = model.predict(X_test, batch_size = 32, verbose = True)\npred_Y_cat = np.argmax(pred_Y, -1)\ntest_Y_cat = np.argmax(y_test, -1)\nprint('Accuracy on Test Data: %2.2f%%' % (100*accuracy_score(test_Y_cat, pred_Y_cat)))\nprint(classification_report(test_Y_cat, pred_Y_cat))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.heatmap(confusion_matrix(test_Y_cat, pred_Y_cat), \nannot=True, fmt=\"d\", cbar = False, cmap = plt.cm.Blues, vmax = X_test.shape[0]//16)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sick_vec = test_Y_cat>0\nsick_score = np.sum(pred_Y[:,1:],1)\nfpr, tpr, _ = roc_curve(sick_vec, sick_score)\nfig, ax1 = plt.subplots(1,1, figsize = (5, 3), dpi = 150)\nax1.plot(fpr, tpr, 'b.-', label = 'Model Prediction (AUC: %2.2f)' % roc_auc_score(sick_vec, sick_score))\nax1.plot(fpr, fpr, 'g-', label = 'Random Guessing')\nax1.legend()\nax1.set_xlabel('False Positive Rate')\nax1.set_ylabel('True Positive Rate');","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Submitting Answers","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"submission_csv = pd.read_csv(\"/kaggle/input/aptos2019-blindness-detection/sample_submission.csv\")\nTEST_DATA_DIR = \"/kaggle/input/aptos2019-blindness-detection/test_images/\"\ndata =[]\n\ndef read_image_convert_to_array(filepath):\n    image = load_img(TEST_DATA_DIR+filepath+\".png\", target_size=(224,224))\n    image = img_to_array(image)\n    image /= 255.0\n    return image\n\nsubmission_csv[\"img_data\"] = submission_csv[\"id_code\"].apply(lambda x: read_image_convert_to_array(x))\ntest_data = np.stack(submission_csv[\"img_data\"])\npred_test_data = model.predict(test_data,verbose = True)\npred_test_data_category = np.argmax(pred_test_data, -1)\nsubmission_csv[\"diagnose\"] = np.array(pred_test_data_category)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission_csv = submission_csv[[\"id_code\", \"diagnose\"]]\nsubmission_csv.to_csv(\"output.csv\")","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}