{"cells":[{"metadata":{"_uuid":"051d70d956493feee0c6d64651c6a088724dca2a","_execution_state":"idle","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 os\nimport cv2\nimport imageio\nimport matplotlib.pyplot as plt\nimport warnings\nimport matplotlib.cbook\nfrom PIL import Image\n\ntrain_csv = pd.read_csv('../input/aptos2019-blindness-detection/train.csv')\ntest_csv = pd.read_csv('../input/aptos2019-blindness-detection/test.csv')\ndir0 = os.path.join('..', 'input/aptos2019-blindness-detection/')\ndir1 = os.path.join(dir0, 'train_images/')\n\ntrain_csv['path'] = train_csv['id_code'].map(lambda x: os.path.join(dir1, '{}.png'.format(x)))\n#train_csv = train_csv.drop(columns=['id_code'])\n\n#Se tiene el path de cada imagen correspondiente al id_code\nprint(train_csv)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#print(train_csv.get_value(0, \"path\"))\n#pic=imageio.imread(train_csv.get_value(0, \"path\"))\n\n#plt.figure(figsize=(6,6))\n#plt.imshow(pic);\n#plt.axis('off');\n\nplot1 = train_csv['diagnosis'].hist(figsize = (10, 7))\nplot1.set_title(\"Histograma de frecuencias de los niveles del RD\")\nplot1.set_xlabel(\"Niveles\")\nplot1.set_ylabel(\"Cantidad\")\n        ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sizes = []\nfor i in range (3662):\n    img = Image.open(train_csv.at[i, \"path\"])\n    size = img.size\n    if size not in sizes:\n        sizes.append(size)\n\nprint(\"La cantidad de tamaños diferentes es: \", len(sizes))\nprint (sizes)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df = pd.read_csv('../input/aptos2019-blindness-detection/train.csv')\ntrain_df['diagnosis'] = train_df['diagnosis'].astype('str')\ntrain_df['id_code'] = train_df['id_code'].astype(str)+'.png'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.preprocessing.image import ImageDataGenerator\n\ndatagen=ImageDataGenerator(\n    rescale=1./255, \n    validation_split=0.2,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True)\n\nbatch_size = 16\nimage_size = 96\n\ntrain_gen=datagen.flow_from_dataframe(\n    dataframe=train_df,\n    directory=\"../input/aptos2019-blindness-detection/train_images\",\n    x_col=\"id_code\",\n    y_col=\"diagnosis\",\n    batch_size=batch_size,\n    shuffle=True,\n    class_mode=\"categorical\",\n    target_size=(image_size,image_size),\n    subset='training')\n\ntest_gen=datagen.flow_from_dataframe(\n    dataframe=train_df,\n    directory=\"../input/aptos2019-blindness-detection/train_images\",\n    x_col=\"id_code\",\n    y_col=\"diagnosis\",\n    batch_size=batch_size,\n    shuffle=True,\n    class_mode=\"categorical\", \n    target_size=(image_size,image_size),\n    subset='validation')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train = train_df['diagnosis']\nfrom keras.utils import np_utils\ny_train = np_utils.to_categorical(y_train)\nnum_classes = y_train.shape[1]","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Red neuronal simple"},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport mnist\nfrom keras.models import Sequential\nfrom keras.layers import Dense\n\n# Build the model.\nmodel = Sequential([\n  Dense(64, activation='relu', input_shape=[96,96,3]),\n  Dense(64, activation='relu'),\n  Dense(10, activation='softmax'),\n])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(\n  optimizer='adam',\n  loss='categorical_crossentropy',\n  metrics=['accuracy'],\n)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Primer modelo de CNN: "},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.models import Sequential\nfrom keras.layers import Dense\nfrom keras.layers import Dropout, GaussianNoise, GaussianDropout\nfrom keras.layers import Flatten, BatchNormalization\nfrom keras.layers.convolutional import Conv2D, SeparableConv2D\nfrom keras.constraints import maxnorm\nfrom keras.layers.convolutional import MaxPooling2D\nfrom keras.utils import np_utils\nfrom keras import backend as K\nfrom keras import regularizers, optimizers\n\ndef build_model():\n    # create model\n    model = Sequential()\n    model.add(Conv2D(15, (3, 3), input_shape=[96,96,3], activation='relu'))\n    model.add(GaussianDropout(0.3))\n    model.add(Conv2D(30, (5, 5), activation='relu', kernel_constraint=maxnorm(3)))\n    model.add(MaxPooling2D(pool_size=(2, 2)))\n    model.add(Conv2D(30, (3, 3), activation='relu'))\n    model.add(MaxPooling2D(pool_size=(2, 2)))\n    model.add(Conv2D(50, (5, 5), activation='relu'))\n    model.add(Conv2D(50, (7, 7), activation='relu'))\n    \n    model.add(Dropout(0.2))\n    model.add(Flatten())\n    model.add(Dense(256, activation='relu', kernel_regularizer=regularizers.l2(0.01)))\n    model.add(Dense(128, activation='relu'))\n    model.add(Dense(128, activation='relu'))\n    model.add(Dense(50, activation='relu'))\n    model.add(Dense(num_classes, activation='softmax', kernel_regularizer=regularizers.l2(0.0001)\n                   ,activity_regularizer=regularizers.l1(0.01)))\n    # Compile model\n    model.compile(loss='categorical_crossentropy', optimizer=optimizers.adam(lr=0.0001, amsgrad=True), metrics=['accuracy'])\n    return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = build_model()\nprint(model.summary())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit_generator(generator=train_gen,              \n                                    steps_per_epoch=len(train_gen),\n                                    validation_data=test_gen,                    \n                                    validation_steps=len(test_gen),\n                                    epochs=3,\n                                    use_multiprocessing = True,\n                                    verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\n# Plot training & validation accuracy values\nplt.plot(history.history['acc'])\nplt.plot(history.history['val_acc'])\nplt.title('Model accuracy')\nplt.ylabel('Accuracy')\nplt.xlabel('Epoch')\nplt.legend(['Train', 'Test'], loc='upper left')\nplt.show()\n\n# Plot training & validation loss values\nplt.plot(history.history['loss'])\nplt.plot(history.history['val_loss'])\nplt.title('Model loss')\nplt.ylabel('Loss')\nplt.xlabel('Epoch')\nplt.legend(['Train', 'Test'], loc='upper left')\nplt.show()","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}