{"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 os\nimport cv2\nimport time\nimport scipy as sp\nimport numpy as np\nimport random as rn\nimport pandas as pd\nfrom tqdm import tqdm\nfrom PIL import Image\nfrom functools import partial\nimport matplotlib.pyplot as plt\n\n# Machine Learning\nimport tensorflow as tf\nimport keras\nfrom keras import initializers\nfrom keras import regularizers\nfrom keras import constraints\nfrom keras import backend as K\nfrom keras.activations import elu\nfrom keras.optimizers import Adam\nfrom keras.models import Sequential\nfrom keras.engine import Layer, InputSpec\nfrom keras.utils.generic_utils import get_custom_objects\nfrom keras.callbacks import Callback, EarlyStopping, ReduceLROnPlateau\nfrom keras.layers import Dense, Conv2D, Flatten, GlobalAveragePooling2D, Dropout,MaxPooling2D,BatchNormalization,GlobalMaxPooling2D\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom sklearn.metrics import cohen_kappa_score\n\n# Specify title of our final model\nSAVED_MODEL_NAME = 'effnet_modelB5.h5'\n\n# Set seed for reproducability\nseed = 1234\nrn.seed(seed)\nnp.random.seed(seed)\ntf.random.set_seed(seed)\nos.environ['PYTHONHASHSEED'] = str(seed)\n\n# For keeping time. GPU limit for this competition is set to ± 9 hours.\nt_start = time.time()","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:18:32.412076Z","iopub.execute_input":"2022-11-04T19:18:32.413028Z","iopub.status.idle":"2022-11-04T19:18:38.087185Z","shell.execute_reply.started":"2022-11-04T19:18:32.412902Z","shell.execute_reply":"2022-11-04T19:18:38.086271Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nfrom tensorflow.keras.models import load_model","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:18:38.089093Z","iopub.execute_input":"2022-11-04T19:18:38.089441Z","iopub.status.idle":"2022-11-04T19:18:38.094356Z","shell.execute_reply.started":"2022-11-04T19:18:38.089405Z","shell.execute_reply":"2022-11-04T19:18:38.092743Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n\nfrom keras.applications.xception import Xception\nfrom keras.preprocessing import image\nfrom keras.applications.resnet50 import preprocess_input, decode_predictions\nimport numpy as np\n\n","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:18:38.096119Z","iopub.execute_input":"2022-11-04T19:18:38.096944Z","iopub.status.idle":"2022-11-04T19:18:38.103480Z","shell.execute_reply.started":"2022-11-04T19:18:38.096904Z","shell.execute_reply":"2022-11-04T19:18:38.102692Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n\neffnet = tf.keras.applications.MobileNetV2(input_shape=(256,256,3),\n                                               include_top=False,\n                                               weights='imagenet')\n","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:18:38.104581Z","iopub.execute_input":"2022-11-04T19:18:38.104844Z","iopub.status.idle":"2022-11-04T19:18:41.804669Z","shell.execute_reply.started":"2022-11-04T19:18:38.104820Z","shell.execute_reply":"2022-11-04T19:18:41.803723Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for layer in effnet.layers:\n    layer.trainable = True","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:18:41.807838Z","iopub.execute_input":"2022-11-04T19:18:41.808164Z","iopub.status.idle":"2022-11-04T19:18:41.817977Z","shell.execute_reply.started":"2022-11-04T19:18:41.808128Z","shell.execute_reply":"2022-11-04T19:18:41.814720Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nmetrics=tf.keras.metrics.AUC(name='auc')\ndef build_model():\n\n    model = Sequential()\n    model.add(effnet)\n    model.add(GlobalAveragePooling2D())\n    model.add(Dropout(0.3))\n#    model.add(Dense(2, activation=elu))\n    model.add(Dense(1, activation=\"sigmoid\"))\n    model.compile(loss='binary_crossentropy',\n                  optimizer=keras.optimizers.Adam(learning_rate=0.00005, beta_1=0.9, beta_2=0.999, amsgrad=False),\n                  metrics=metrics)\n    print(model.summary())\n    return model\n\n# Initialize model\nmodel = build_model()\n\n","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:18:41.819906Z","iopub.execute_input":"2022-11-04T19:18:41.820255Z","iopub.status.idle":"2022-11-04T19:18:42.194742Z","shell.execute_reply.started":"2022-11-04T19:18:41.820221Z","shell.execute_reply":"2022-11-04T19:18:42.193169Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\ndf=pd.read_csv(\"../input/jpeg-melanoma-256x256/train.csv\")","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:18:42.196407Z","iopub.execute_input":"2022-11-04T19:18:42.196799Z","iopub.status.idle":"2022-11-04T19:18:42.429501Z","shell.execute_reply.started":"2022-11-04T19:18:42.196761Z","shell.execute_reply":"2022-11-04T19:18:42.428636Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\ntrain, valid = train_test_split(df, test_size=0.2)","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:18:42.432993Z","iopub.execute_input":"2022-11-04T19:18:42.433242Z","iopub.status.idle":"2022-11-04T19:18:42.464783Z","shell.execute_reply.started":"2022-11-04T19:18:42.433217Z","shell.execute_reply":"2022-11-04T19:18:42.464102Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:18:42.467716Z","iopub.execute_input":"2022-11-04T19:18:42.467966Z","iopub.status.idle":"2022-11-04T19:18:42.493339Z","shell.execute_reply.started":"2022-11-04T19:18:42.467941Z","shell.execute_reply":"2022-11-04T19:18:42.492553Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train[\"target\"]=train[\"target\"].astype(str)\nvalid[\"target\"]=valid[\"target\"].astype(str)","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:18:42.494581Z","iopub.execute_input":"2022-11-04T19:18:42.494918Z","iopub.status.idle":"2022-11-04T19:18:42.523227Z","shell.execute_reply.started":"2022-11-04T19:18:42.494885Z","shell.execute_reply":"2022-11-04T19:18:42.522396Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train[\"image_name\"]=train[\"image_name\"]+\".jpg\"\nvalid[\"image_name\"]=valid[\"image_name\"]+\".jpg\"","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:18:42.524385Z","iopub.execute_input":"2022-11-04T19:18:42.524859Z","iopub.status.idle":"2022-11-04T19:18:42.547614Z","shell.execute_reply.started":"2022-11-04T19:18:42.524825Z","shell.execute_reply":"2022-11-04T19:18:42.546826Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:18:42.548652Z","iopub.execute_input":"2022-11-04T19:18:42.549139Z","iopub.status.idle":"2022-11-04T19:18:42.571307Z","shell.execute_reply.started":"2022-11-04T19:18:42.549104Z","shell.execute_reply":"2022-11-04T19:18:42.570597Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(\n        rescale=1/255,\n        zoom_range=0.0,\n        horizontal_flip=True)\n\n\ntest_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1/255)\n\ntrain_generator = train_datagen.flow_from_dataframe(\n        dataframe=train,\n        directory='../input/jpeg-melanoma-256x256/train/',\n        x_col=\"image_name\",\n        y_col=\"target\",\n        target_size=(256, 256),\n        batch_size=32,\n        class_mode='binary')\n\nvalidation_generator = test_datagen.flow_from_dataframe(\n        dataframe=valid,\n        directory='../input/jpeg-melanoma-256x256/train/',\n        x_col=\"image_name\",\n        y_col=\"target\",\n        target_size=(256, 256),\n        batch_size=16,\n        class_mode='binary')","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:18:42.572399Z","iopub.execute_input":"2022-11-04T19:18:42.573068Z","iopub.status.idle":"2022-11-04T19:19:16.070334Z","shell.execute_reply.started":"2022-11-04T19:18:42.573033Z","shell.execute_reply":"2022-11-04T19:19:16.068711Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"es = EarlyStopping(monitor='val_loss', mode='auto', verbose=1, patience=4)\nrlr =ReduceLROnPlateau(monitor='val_loss', \n                        factor=0.5, \n                        patience=3, \n                        verbose=1, \n                        mode='auto', \n                        epsilon=0.0001)\n\n\n#class_weight = {0: 1.99,\n#               1:1.}\n\nmodel_checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(\n    filepath=SAVED_MODEL_NAME,\n    save_weights_only=True,\n    monitor='val_acc',\n    mode='max',\n    save_best_only=True)\nmodel.fit_generator(\n        train_generator,\n        epochs=5,\n        shuffle=True,\n        validation_data=validation_generator,\n        callbacks=[model_checkpoint_callback])\n\n","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:19:16.071612Z","iopub.execute_input":"2022-11-04T19:19:16.071961Z","iopub.status.idle":"2022-11-04T19:35:02.173745Z","shell.execute_reply.started":"2022-11-04T19:19:16.071924Z","shell.execute_reply":"2022-11-04T19:35:02.172993Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"converter = tf.lite.TFLiteConverter.from_keras_model(model)\ntflite_model = converter.convert()\n\n# Save the model.\nwith open('model.tflite', 'wb') as f:\n  f.write(tflite_model)","metadata":{"execution":{"iopub.status.busy":"2022-11-04T19:35:02.175375Z","iopub.execute_input":"2022-11-04T19:35:02.175735Z","iopub.status.idle":"2022-11-04T19:35:29.911132Z","shell.execute_reply.started":"2022-11-04T19:35:02.175699Z","shell.execute_reply":"2022-11-04T19:35:29.910139Z"},"trusted":true},"execution_count":null,"outputs":[]}]}