{"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":"markdown","source":"Vamos a ver como trabaja con un poco de BatchNormalization() y dropout()\n\nPero con DataAugmentation ","metadata":{}},{"cell_type":"code","source":"pip install plot-keras-history","metadata":{"execution":{"iopub.status.busy":"2023-06-25T20:51:34.460593Z","iopub.execute_input":"2023-06-25T20:51:34.460946Z","iopub.status.idle":"2023-06-25T20:51:50.455791Z","shell.execute_reply.started":"2023-06-25T20:51:34.460912Z","shell.execute_reply":"2023-06-25T20:51:50.454939Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow.keras as keras\nimport warnings\nfrom plot_keras_history import show_history, plot_history\nfrom collections import defaultdict\nimport matplotlib.pyplot as plt\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator","metadata":{"execution":{"iopub.status.busy":"2023-06-25T20:51:50.459474Z","iopub.execute_input":"2023-06-25T20:51:50.459761Z","iopub.status.idle":"2023-06-25T20:51:55.369119Z","shell.execute_reply.started":"2023-06-25T20:51:50.45973Z","shell.execute_reply":"2023-06-25T20:51:55.368187Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Importamos los datos","metadata":{}},{"cell_type":"code","source":"train_datagen = ImageDataGenerator(\n      featurewise_center=False,  \n      samplewise_center=False, \n      featurewise_std_normalization=False,  \n      samplewise_std_normalization=False, \n      rescale=1./255,\n      rotation_range=20,\n      width_shift_range=0.05,\n      height_shift_range=0.05,\n      shear_range=0.05,\n      zoom_range=0.2,\n      horizontal_flip=True,\n      vertical_flip=True,\n      fill_mode='nearest')\n\ntrain_generator = train_datagen.flow_from_directory(\n        '/kaggle/input/data-binary/data/train',\n        target_size=(256, 256),\n        batch_size=64,\n        class_mode='binary')","metadata":{"execution":{"iopub.status.busy":"2023-06-25T20:51:59.003634Z","iopub.execute_input":"2023-06-25T20:51:59.003979Z","iopub.status.idle":"2023-06-25T20:54:05.613592Z","shell.execute_reply.started":"2023-06-25T20:51:59.003947Z","shell.execute_reply":"2023-06-25T20:54:05.612776Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"valid_datagen = ImageDataGenerator(\n      rescale=1./255)\n\nvalid_generator = valid_datagen.flow_from_directory(\n        '/kaggle/input/data-binary/data/valid',\n        target_size=(256, 256),\n        batch_size=64,\n        class_mode='binary')","metadata":{"execution":{"iopub.status.busy":"2023-06-25T20:54:05.615311Z","iopub.execute_input":"2023-06-25T20:54:05.615608Z","iopub.status.idle":"2023-06-25T21:00:16.072329Z","shell.execute_reply.started":"2023-06-25T20:54:05.615579Z","shell.execute_reply":"2023-06-25T21:00:16.071412Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_datagen = ImageDataGenerator(\n      rescale=1./255)\n\ntest_generator = test_datagen.flow_from_directory(\n        '/kaggle/input/data-binary/data/test',\n        target_size=(256, 256),\n        batch_size=64,\n        class_mode='binary')","metadata":{"execution":{"iopub.status.busy":"2023-06-25T21:00:16.073889Z","iopub.execute_input":"2023-06-25T21:00:16.074274Z","iopub.status.idle":"2023-06-25T21:07:33.121955Z","shell.execute_reply.started":"2023-06-25T21:00:16.074237Z","shell.execute_reply":"2023-06-25T21:07:33.121093Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"models = defaultdict(None)","metadata":{"execution":{"iopub.status.busy":"2023-06-25T21:08:09.344341Z","iopub.execute_input":"2023-06-25T21:08:09.344679Z","iopub.status.idle":"2023-06-25T21:08:09.349239Z","shell.execute_reply.started":"2023-06-25T21:08:09.344646Z","shell.execute_reply":"2023-06-25T21:08:09.348358Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Diseñamos el modelo","metadata":{}},{"cell_type":"code","source":"from tensorflow.keras.models import Sequential, Model\nfrom tensorflow.keras.layers import Dense, Conv2D , MaxPool2D , Flatten , Dropout , BatchNormalization\n# from tensorflow.keras.preprocessing import Rescaling\n\nmodel = Sequential()\n# model.add(Rescaling(scale = 1/255, input_shape = ( 256, 256, 3)))\nmodel.add(Conv2D(32 , (3,3) , padding = 'same' , activation = 'relu' , input_shape = ( 256, 256, 3)))\nmodel.add(BatchNormalization())\n\n\nmodel.add(MaxPool2D((2,2)))\nmodel.add(Conv2D(64 , (3,3), activation = 'relu'))\nmodel.add(Dropout(0.1))\nmodel.add(BatchNormalization())\n\n\n\nmodel.add(MaxPool2D((2,2)))\nmodel.add(Conv2D(64 , (3,3), activation = 'relu'))\nmodel.add(BatchNormalization())\n\n\n\nmodel.add(MaxPool2D((2,2) ))\nmodel.add(Conv2D(128 , (3,3), activation = 'relu'))\nmodel.add(Dropout(0.2))\nmodel.add(BatchNormalization())\n\n\n\nmodel.add(MaxPool2D((2,2)))\nmodel.add(Conv2D(256 , (3,3), activation = 'relu'))\nmodel.add(Dropout(0.2))\nmodel.add(BatchNormalization())\n\n\n\nmodel.add(MaxPool2D((2,2)))\n\nmodel.add(Flatten())\n\nmodel.add(Dense(units = 128 , activation = 'relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(units = 1 , activation = 'sigmoid')) #clasificación binaria","metadata":{"execution":{"iopub.status.busy":"2023-06-25T21:08:11.254129Z","iopub.execute_input":"2023-06-25T21:08:11.254511Z","iopub.status.idle":"2023-06-25T21:08:13.636802Z","shell.execute_reply.started":"2023-06-25T21:08:11.254478Z","shell.execute_reply":"2023-06-25T21:08:13.635901Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"models['Modelo1'] = model","metadata":{"execution":{"iopub.status.busy":"2023-06-25T21:08:16.023545Z","iopub.execute_input":"2023-06-25T21:08:16.023911Z","iopub.status.idle":"2023-06-25T21:08:16.031384Z","shell.execute_reply.started":"2023-06-25T21:08:16.023877Z","shell.execute_reply":"2023-06-25T21:08:16.030205Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"loss = keras.losses.BinaryCrossentropy()\nmodels['Modelo1'].compile(loss=loss, \n              optimizer = keras.optimizers.Adam(1e-3),\n              metrics=[keras.metrics.AUC(),keras.metrics.Precision(),\n                       keras.metrics.Recall(),keras.metrics.Accuracy()])","metadata":{"execution":{"iopub.status.busy":"2023-06-25T21:08:18.389235Z","iopub.execute_input":"2023-06-25T21:08:18.389599Z","iopub.status.idle":"2023-06-25T21:08:18.432429Z","shell.execute_reply.started":"2023-06-25T21:08:18.389564Z","shell.execute_reply":"2023-06-25T21:08:18.431655Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"histories = defaultdict(None)  # Dictionary with the histories","metadata":{"execution":{"iopub.status.busy":"2023-06-25T21:08:20.80657Z","iopub.execute_input":"2023-06-25T21:08:20.806926Z","iopub.status.idle":"2023-06-25T21:08:20.811255Z","shell.execute_reply.started":"2023-06-25T21:08:20.806893Z","shell.execute_reply":"2023-06-25T21:08:20.810059Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"histories['Modelo1'] = models['Modelo1'].fit(\n      x = train_generator,\n      epochs=7,\n      validation_data=valid_generator,\n      verbose=1)","metadata":{"execution":{"iopub.status.busy":"2023-06-25T21:08:22.622785Z","iopub.execute_input":"2023-06-25T21:08:22.623135Z","iopub.status.idle":"2023-06-26T04:12:48.658298Z","shell.execute_reply.started":"2023-06-25T21:08:22.6231Z","shell.execute_reply":"2023-06-26T04:12:48.657201Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"models['Modelo1'].save('/kaggle/working/model-batchNormalization_Dropout_DataAugmentation.h5')","metadata":{"execution":{"iopub.status.busy":"2023-06-26T04:12:48.663666Z","iopub.execute_input":"2023-06-26T04:12:48.665857Z","iopub.status.idle":"2023-06-26T04:12:48.798907Z","shell.execute_reply.started":"2023-06-26T04:12:48.665811Z","shell.execute_reply":"2023-06-26T04:12:48.797677Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for model in histories:\n    # Plot the model training history\n    history = histories[model]\n    plot_history(history)","metadata":{"execution":{"iopub.status.busy":"2023-06-26T04:12:48.800481Z","iopub.execute_input":"2023-06-26T04:12:48.800854Z","iopub.status.idle":"2023-06-26T04:12:50.694802Z","shell.execute_reply.started":"2023-06-26T04:12:48.800815Z","shell.execute_reply":"2023-06-26T04:12:50.693769Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"results = models['Modelo1'].evaluate(test_generator, batch_size=128)","metadata":{"execution":{"iopub.status.busy":"2023-06-26T04:43:08.863646Z","iopub.execute_input":"2023-06-26T04:43:08.864102Z","iopub.status.idle":"2023-06-26T05:45:43.497097Z","shell.execute_reply.started":"2023-06-26T04:43:08.864058Z","shell.execute_reply":"2023-06-26T05:45:43.4955Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"test loss, test auc, test precision, test recall:\", results)","metadata":{"execution":{"iopub.status.busy":"2023-06-26T05:45:43.49892Z","iopub.execute_input":"2023-06-26T05:45:43.499931Z","iopub.status.idle":"2023-06-26T05:45:43.504887Z","shell.execute_reply.started":"2023-06-26T05:45:43.499894Z","shell.execute_reply":"2023-06-26T05:45:43.504006Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred = models['Modelo1'].predict(test_generator)","metadata":{"execution":{"iopub.status.busy":"2023-06-26T05:45:43.506211Z","iopub.execute_input":"2023-06-26T05:45:43.506734Z","iopub.status.idle":"2023-06-26T06:24:22.720721Z","shell.execute_reply.started":"2023-06-26T05:45:43.506694Z","shell.execute_reply":"2023-06-26T06:24:22.719854Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\n\ny_pred_binary = np.squeeze(np.round(y_pred)).astype(int)\ny_pred_binary","metadata":{"execution":{"iopub.status.busy":"2023-06-26T06:24:22.72243Z","iopub.execute_input":"2023-06-26T06:24:22.722792Z","iopub.status.idle":"2023-06-26T06:24:22.732432Z","shell.execute_reply.started":"2023-06-26T06:24:22.72275Z","shell.execute_reply":"2023-06-26T06:24:22.731341Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred_proba = models['Modelo1'].predict_proba(test_generator)","metadata":{"execution":{"iopub.status.busy":"2023-06-26T06:24:22.735008Z","iopub.execute_input":"2023-06-26T06:24:22.735773Z","iopub.status.idle":"2023-06-26T06:55:14.740021Z","shell.execute_reply.started":"2023-06-26T06:24:22.735734Z","shell.execute_reply":"2023-06-26T06:55:14.739093Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred_proba[:,0]","metadata":{"execution":{"iopub.status.busy":"2023-06-26T06:55:14.741815Z","iopub.execute_input":"2023-06-26T06:55:14.742453Z","iopub.status.idle":"2023-06-26T06:55:14.750226Z","shell.execute_reply.started":"2023-06-26T06:55:14.742412Z","shell.execute_reply":"2023-06-26T06:55:14.749015Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}