{"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\nimport pandas as pd\nfrom keras.models import Sequential\nfrom sklearn.metrics import classification_report\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Dropout\n","metadata":{"execution":{"iopub.status.busy":"2023-01-11T02:39:15.493963Z","iopub.execute_input":"2023-01-11T02:39:15.494622Z","iopub.status.idle":"2023-01-11T02:39:23.410221Z","shell.execute_reply.started":"2023-01-11T02:39:15.494569Z","shell.execute_reply":"2023-01-11T02:39:23.408794Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\ndef append_ext(fn):\n    return fn+\".png\"\ntraindf=pd.read_csv('/kaggle/input/aptos2019-blindness-detection/train.csv',dtype=str)\ntestdf=pd.read_csv('/kaggle/input/aptos2019-blindness-detection/test.csv',dtype=str)\ntraindf[\"id_code\"]=traindf[\"id_code\"].apply(append_ext)\ntestdf[\"id_code\"]=testdf[\"id_code\"].apply(append_ext)\ndatagen=ImageDataGenerator(rescale=1./255.,validation_split=0.25)","metadata":{"execution":{"iopub.status.busy":"2023-01-11T02:39:23.412634Z","iopub.execute_input":"2023-01-11T02:39:23.413468Z","iopub.status.idle":"2023-01-11T02:39:23.487687Z","shell.execute_reply.started":"2023-01-11T02:39:23.413395Z","shell.execute_reply":"2023-01-11T02:39:23.486181Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"traindf.head()","metadata":{"execution":{"iopub.status.busy":"2023-01-11T02:39:23.488963Z","iopub.execute_input":"2023-01-11T02:39:23.489363Z","iopub.status.idle":"2023-01-11T02:39:23.50997Z","shell.execute_reply.started":"2023-01-11T02:39:23.489328Z","shell.execute_reply":"2023-01-11T02:39:23.508927Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"traindf.info()","metadata":{"execution":{"iopub.status.busy":"2023-01-11T02:39:23.512889Z","iopub.execute_input":"2023-01-11T02:39:23.514191Z","iopub.status.idle":"2023-01-11T02:39:23.538034Z","shell.execute_reply.started":"2023-01-11T02:39:23.514125Z","shell.execute_reply":"2023-01-11T02:39:23.536846Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"src_path_train = \"/kaggle/input/aptos2019-blindness-detection/train_images/\"\nsrc_path_test = \"/kaggle/input/aptos2019-blindness-detection/test_images/\"\n\ntrain_datagen = ImageDataGenerator(\n        rescale=1 / 255.0,\n        rotation_range=20,\n        zoom_range=0.05,\n        width_shift_range=0.05,\n        height_shift_range=0.05,\n        shear_range=0.05,\n        horizontal_flip=True,\n        fill_mode=\"nearest\",\n        validation_split=0.20)\n\ntest_datagen = ImageDataGenerator(rescale=1 / 255.0)","metadata":{"execution":{"iopub.status.busy":"2023-01-11T02:39:23.54045Z","iopub.execute_input":"2023-01-11T02:39:23.542201Z","iopub.status.idle":"2023-01-11T02:39:23.552736Z","shell.execute_reply.started":"2023-01-11T02:39:23.542137Z","shell.execute_reply":"2023-01-11T02:39:23.551626Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"batch_size = 8\ntrain_generator = train_datagen.flow_from_dataframe(\n    dataframe=traindf,\n    directory=src_path_train,\n    x_col=\"id_code\",\n    y_col=\"diagnosis\",\n    target_size=(100, 100),\n    batch_size=batch_size,\n    class_mode=\"categorical\",\n    subset='training',\n    shuffle=True,\n    seed=42\n)\nvalid_generator = train_datagen.flow_from_dataframe(\n    dataframe=traindf,\n    directory=src_path_train,\n    x_col=\"id_code\",\n    y_col=\"diagnosis\",\n    target_size=(100, 100),\n    batch_size=batch_size,\n    class_mode=\"categorical\",\n    subset='validation',\n    shuffle=True,\n    seed=42\n)\ntest_generator = test_datagen.flow_from_dataframe(\n    dataframe=testdf,\n    directory=src_path_test,\n    x_col=\"id_code\",\n    target_size=(100, 100),\n    batch_size=1,\n    class_mode=None,\n    shuffle=False,\n)","metadata":{"execution":{"iopub.status.busy":"2023-01-11T02:39:23.554041Z","iopub.execute_input":"2023-01-11T02:39:23.554986Z","iopub.status.idle":"2023-01-11T02:39:50.362357Z","shell.execute_reply.started":"2023-01-11T02:39:23.554947Z","shell.execute_reply":"2023-01-11T02:39:50.360397Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Sequential()\nmodel.add(Conv2D(32, (3, 3),activation='relu', padding='same',input_shape=(100,100,3)))\nmodel.add(Conv2D(32, (3, 3),activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Conv2D(64, (3, 3),activation='relu', padding='same'))\nmodel.add(Conv2D(64, (3, 3),activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Flatten())\nmodel.add(Dense(512,activation='relu'))\nmodel.add(Dropout(0.3))\n\nmodel.add(Dense(5, activation='softmax'))\nmodel.compile(optimizer='adam',loss=\"categorical_crossentropy\",metrics=[\"accuracy\"])","metadata":{"execution":{"iopub.status.busy":"2023-01-11T02:39:50.364162Z","iopub.execute_input":"2023-01-11T02:39:50.364722Z","iopub.status.idle":"2023-01-11T02:39:50.782324Z","shell.execute_reply.started":"2023-01-11T02:39:50.364674Z","shell.execute_reply":"2023-01-11T02:39:50.780712Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit_generator(train_generator,\n                    validation_data = valid_generator,\n                    epochs=5)","metadata":{"execution":{"iopub.status.busy":"2023-01-11T02:39:50.78705Z","iopub.execute_input":"2023-01-11T02:39:50.78784Z","iopub.status.idle":"2023-01-11T03:30:07.149984Z","shell.execute_reply.started":"2023-01-11T02:39:50.787784Z","shell.execute_reply":"2023-01-11T03:30:07.146132Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"score = model.evaluate_generator(valid_generator)\nprint('Test loss:', score[0])\nprint('Test accuracy:', score[1])","metadata":{"execution":{"iopub.status.busy":"2023-01-11T03:30:07.155199Z","iopub.execute_input":"2023-01-11T03:30:07.158806Z","iopub.status.idle":"2023-01-11T03:31:53.318724Z","shell.execute_reply.started":"2023-01-11T03:30:07.158696Z","shell.execute_reply":"2023-01-11T03:31:53.316929Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_labels=test_generator.classes\npredictions=model.predict_generator(test_generator)\ny_pred = np.argmax(predictions, axis=-1)\nprint(classification_report(test_labels,y_pred))","metadata":{"execution":{"iopub.status.busy":"2023-01-11T03:31:53.323861Z","iopub.execute_input":"2023-01-11T03:31:53.324461Z","iopub.status.idle":"2023-01-11T03:31:53.77187Z","shell.execute_reply.started":"2023-01-11T03:31:53.324401Z","shell.execute_reply":"2023-01-11T03:31:53.769785Z"},"trusted":true},"execution_count":null,"outputs":[]}]}