{"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":"# load libraries\nimport os\nimport tensorflow as tf\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalization,Input\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras import models, layers\nfrom tensorflow.keras.models import Sequential\nfrom numpy.random import seed\nseed(0)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-input":true,"_kg_hide-output":false,"execution":{"iopub.status.busy":"2021-07-23T19:54:37.434313Z","iopub.execute_input":"2021-07-23T19:54:37.434625Z","iopub.status.idle":"2021-07-23T19:54:42.609193Z","shell.execute_reply.started":"2021-07-23T19:54:37.434591Z","shell.execute_reply":"2021-07-23T19:54:42.608415Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Load Data","metadata":{"_kg_hide-input":false}},{"cell_type":"code","source":"train_dir='/kaggle/input/siim-isic-melanoma-classification/jpeg/train/'\ntest_dir='/kaggle/input/siim-isic-melanoma-classification/jpeg/test/'\ntrain=pd.read_csv('/kaggle/input/siim-isic-melanoma-classification/train.csv')\ntest=pd.read_csv('/kaggle/input/siim-isic-melanoma-classification/sample_submission.csv')\ntrain.head()","metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_kg_hide-input":true,"execution":{"iopub.status.busy":"2021-07-23T19:54:49.981188Z","iopub.execute_input":"2021-07-23T19:54:49.981538Z","iopub.status.idle":"2021-07-23T19:54:50.107968Z","shell.execute_reply.started":"2021-07-23T19:54:49.981506Z","shell.execute_reply":"2021-07-23T19:54:50.107295Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## data preprocessing","metadata":{}},{"cell_type":"code","source":"test['path'] = test_dir + test.image_name + \".jpg\"\ntest = test.drop([\"image_name\"],axis=1)\ntest.head()","metadata":{"execution":{"iopub.status.busy":"2021-07-23T19:55:03.918566Z","iopub.execute_input":"2021-07-23T19:55:03.918902Z","iopub.status.idle":"2021-07-23T19:55:03.953560Z","shell.execute_reply.started":"2021-07-23T19:55:03.918871Z","shell.execute_reply":"2021-07-23T19:55:03.952900Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train['path'] = train_dir + train.image_name + \".jpg\"\ntrain = train.drop([\"image_name\",\"patient_id\",\"sex\",\"age_approx\",\"anatom_site_general_challenge\",\"diagnosis\",\"benign_malignant\"],axis=1)\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2021-07-23T19:55:07.300102Z","iopub.execute_input":"2021-07-23T19:55:07.300495Z","iopub.status.idle":"2021-07-23T19:55:07.330955Z","shell.execute_reply.started":"2021-07-23T19:55:07.300461Z","shell.execute_reply":"2021-07-23T19:55:07.329903Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"val = train[26500:][:]\ntrain = train[:26500][:]","metadata":{"execution":{"iopub.status.busy":"2021-07-23T19:55:13.773971Z","iopub.execute_input":"2021-07-23T19:55:13.774344Z","iopub.status.idle":"2021-07-23T19:55:13.780015Z","shell.execute_reply.started":"2021-07-23T19:55:13.774311Z","shell.execute_reply":"2021-07-23T19:55:13.779131Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.target.value_counts()","metadata":{"execution":{"iopub.status.busy":"2021-07-23T19:00:05.790469Z","iopub.execute_input":"2021-07-23T19:00:05.79078Z","iopub.status.idle":"2021-07-23T19:00:05.798741Z","shell.execute_reply.started":"2021-07-23T19:00:05.790751Z","shell.execute_reply":"2021-07-23T19:00:05.797827Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.target.value_counts()","metadata":{"execution":{"iopub.status.busy":"2021-07-23T19:00:05.91407Z","iopub.execute_input":"2021-07-23T19:00:05.914343Z","iopub.status.idle":"2021-07-23T19:00:05.923196Z","shell.execute_reply.started":"2021-07-23T19:00:05.914317Z","shell.execute_reply":"2021-07-23T19:00:05.922164Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_datagen = ImageDataGenerator(rescale=1./255,rotation_range=20,\n    width_shift_range=0.2,\n    height_shift_range=0.2,horizontal_flip=True)\nval_datagen=ImageDataGenerator(rescale=1./255)\ntrain_generator = train_datagen.flow_from_dataframe(\n    train,\n    x_col='path',\n    y_col='target',\n    target_size=(224, 224),\n    batch_size=8,\n    shuffle=True,\n    class_mode='raw')\n\nvalidation_generator = val_datagen.flow_from_dataframe(\n    val,\n    x_col='path',\n    y_col='target',\n    target_size=(224, 224),\n    shuffle=False,\n    batch_size=8,\n    class_mode='raw')\n","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2021-07-23T19:55:22.890841Z","iopub.execute_input":"2021-07-23T19:55:22.891170Z","iopub.status.idle":"2021-07-23T19:56:56.066073Z","shell.execute_reply.started":"2021-07-23T19:55:22.891139Z","shell.execute_reply":"2021-07-23T19:56:56.065009Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_datagen = ImageDataGenerator(rescale=1./255,rotation_range=20,\n    width_shift_range=0.2,\n    height_shift_range=0.2,horizontal_flip=True)\ntest_generator = train_datagen.flow_from_dataframe(\n    test,\n    x_col='path',\n    y_col='target',\n    target_size=(224, 224),\n    batch_size=8,\n    shuffle=True,\n    class_mode='raw')","metadata":{"execution":{"iopub.status.busy":"2021-07-23T19:57:26.432508Z","iopub.execute_input":"2021-07-23T19:57:26.432868Z","iopub.status.idle":"2021-07-23T19:57:55.307517Z","shell.execute_reply.started":"2021-07-23T19:57:26.432835Z","shell.execute_reply":"2021-07-23T19:57:55.306464Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nfor i in range(8):\n    plt.figure()\n    plt.imshow(validation_generator[0][0][i])","metadata":{"execution":{"iopub.status.busy":"2021-07-23T19:00:32.639406Z","iopub.execute_input":"2021-07-23T19:00:32.639782Z","iopub.status.idle":"2021-07-23T19:00:44.0602Z","shell.execute_reply.started":"2021-07-23T19:00:32.639745Z","shell.execute_reply":"2021-07-23T19:00:44.059237Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Build CNN's","metadata":{}},{"cell_type":"code","source":"model = models.Sequential()\nmodel.add(layers.Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), activation='relu',\n                        input_shape=(224, 224, 3)))\nmodel.add(layers.MaxPooling2D((2, 2),strides=2))\nmodel.add(layers.Conv2D(filters=64, kernel_size=(3, 3), strides=(1, 1), activation='relu'))\nmodel.add(layers.MaxPooling2D(pool_size=(2, 2),strides=2))\nmodel.add(layers.Conv2D(filters=128, kernel_size=(3, 3), strides=(1, 1), activation='relu'))\nmodel.add(layers.MaxPooling2D(pool_size=(2, 2),strides=2))\nmodel.add(layers.Flatten())\nmodel.add(layers.Dense(units=1, activation='sigmoid'))\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2021-07-23T19:58:04.716311Z","iopub.execute_input":"2021-07-23T19:58:04.716679Z","iopub.status.idle":"2021-07-23T19:58:06.785495Z","shell.execute_reply.started":"2021-07-23T19:58:04.716648Z","shell.execute_reply":"2021-07-23T19:58:06.784813Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Train CNN's","metadata":{}},{"cell_type":"code","source":"model.compile(optimizer='adam',\n              loss='binary_crossentropy',\n              metrics=['accuracy'])\nhistory = model.fit(train_generator, steps_per_epoch=5, epochs=2,\n                         validation_data=validation_generator, validation_steps=5)","metadata":{"execution":{"iopub.status.busy":"2021-07-23T19:58:13.917700Z","iopub.execute_input":"2021-07-23T19:58:13.918014Z","iopub.status.idle":"2021-07-23T19:58:52.333531Z","shell.execute_reply.started":"2021-07-23T19:58:13.917985Z","shell.execute_reply":"2021-07-23T19:58:52.332421Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Evaluate Convnet","metadata":{}},{"cell_type":"code","source":"a =  2\nf, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))\nt = f.suptitle('Basic CNN Performance', fontsize=12)\nf.subplots_adjust(top=0.85, wspace=0.3)\n\nepoch_list = list(range(1,a+1))\nax1.plot(epoch_list, history.history['accuracy'], label='Train Accuracy')\nax1.plot(epoch_list, history.history['val_accuracy'], label='Validation Accuracy')\nax1.set_xticks(np.arange(0, a+1, 5))\nax1.set_ylabel('Accuracy Value')\nax1.set_xlabel('Epoch')\nax1.set_title('Accuracy')\nl1 = ax1.legend(loc=\"best\")\n\nax2.plot(epoch_list, history.history['loss'], label='Train Loss')\nax2.plot(epoch_list, history.history['val_loss'], label='Validation Loss')\nax2.set_xticks(np.arange(0, a+1, 5))\nax2.set_ylabel('Loss Value')\nax2.set_xlabel('Epoch')\nax2.set_title('Loss')\nl2 = ax2.legend(loc=\"best\")","metadata":{"execution":{"iopub.status.busy":"2021-07-23T20:00:01.641299Z","iopub.execute_input":"2021-07-23T20:00:01.641668Z","iopub.status.idle":"2021-07-23T20:00:01.906849Z","shell.execute_reply.started":"2021-07-23T20:00:01.641637Z","shell.execute_reply":"2021-07-23T20:00:01.905946Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"results = model.evaluate(test_generator)\nprint(results)","metadata":{"_kg_hide-input":false,"execution":{"iopub.status.busy":"2021-07-23T20:00:12.945771Z","iopub.execute_input":"2021-07-23T20:00:12.946100Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## save CNN's","metadata":{}},{"cell_type":"code","source":"model.save(\"model\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!zip -r model.zip ./model","metadata":{},"execution_count":null,"outputs":[]}]}