{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","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 matplotlib.pyplot as plt\nimport matplotlib.image as im\nimport cv2 as cv2\nimport tensorflow as tf\nfrom tqdm import tqdm\nfrom sklearn.model_selection import train_test_split\nfrom tensorflow.keras import layers,models,Model\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nimport tensorflow_addons as tfa\nimport os\n\n# You can write up to 5GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"train_csv=pd.read_csv('/kaggle/input/siim-isic-melanoma-classification/train.csv')\ntest_csv=pd.read_csv('/kaggle/input/siim-isic-melanoma-classification/test.csv')\nprint(train_csv.head())\npd.set_option('display.max_columns',500)\npd.set_option('display.max_rows',500)\npd.set_option('display.float_format', lambda x: '%.3f' % x)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tf.debugging.set_log_device_placement(True)\n\nprint(\"Num of Physical GPUs Available: \", len(tf.config.experimental.list_physical_devices('GPU')))\n\ngpu=tf.config.experimental.list_physical_devices('GPU')\n\nif gpu:\n \n  try:\n    tf.config.experimental.set_virtual_device_configuration(\n        \n         gpu[0],\n         [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024),\n          tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024)]\n        \n    )\n    \n\n    \n    logical_gpus = tf.config.experimental.list_logical_devices('GPU')\n \n \n  except RuntimeError as e:\n \n    # Virtual devices must be set before GPUs have been initialized\n    print(e)\n    \n    \nprint('Number of Logical GPUs Available: ', len(tf.config.experimental.list_logical_devices('GPU')))\n\nprint(gpu)\nprint(logical_gpus)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"strategy=tf.distribute.experimental.MultiWorkerMirroredStrategy()\nprint(strategy)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(train_csv.head())\nprint(train_csv.columns)\nprint(train_csv.count())\nprint(train_csv.shape)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_csv['target'].value_counts()\nplt.hist(train_csv['target'])\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(train_csv.isna().any())\nprint('\\n')\nprint('Null values in Sex Column : ' +str(train_csv['sex'].isna().sum()))\nprint('Null values in Age Column : ' +str(train_csv['age_approx'].isna().sum()))\nprint('Null values in Anatom Column : '+str(train_csv['anatom_site_general_challenge'].isna().sum()))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_csv['age_approx'].describe()\nplt.hist(train_csv['age_approx'])\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_csv['age_approx']=train_csv['age_approx'].fillna(value=np.mean(train_csv['age_approx']))\ntrain_csv['age_approx'].isna().any()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(train_csv.groupby('sex')['anatom_site_general_challenge'].value_counts())\ntrain_csv['anatom_site_general_challenge']=train_csv['anatom_site_general_challenge'].fillna(value='torso')\nprint('\\n')\nprint(train_csv['anatom_site_general_challenge'].value_counts())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(train_csv['sex'].value_counts())\nfun=lambda x:1 if (x=='male') else 0\ntrain_csv['sex']=train_csv['sex'].apply(fun)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_sex_anatom=train_csv.groupby('sex')['anatom_site_general_challenge'].value_counts()\nprint(train_sex_anatom)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_csv.groupby('sex')['anatom_site_general_challenge'].value_counts().plot(kind='bar')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_sex_anatom=train_csv.groupby('sex')['benign_malignant'].value_counts()\nprint(train_sex_anatom)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"train_csv.groupby('sex')['benign_malignant'].value_counts().plot(kind='bar')\nplt.show()","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"train_grp=train_csv.groupby('benign_malignant')['diagnosis'].value_counts()\ntrain_grp","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img_width=224\nimg_height=224\nchannels=3\ntrain_jpg_dir='/kaggle/input/siim-isic-melanoma-classification/jpeg/train/'\ntest_jpg_dir='/kaggle/input/siim-isic-melanoma-classification/jpeg/test/'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_benign=train_csv[train_csv['target']==0]\ntrain_malig=train_csv[train_csv['target']==1]\nprint(train_benign.shape)\nprint(train_malig.shape)\nprint(train_benign.tail())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_benign_batch=10\nvar='train_benign_'\ntrain_data=[[] for i in range(train_benign_batch+1)]\ntrain_labels=[[] for i in range(train_benign_batch+1)]\nsource=[]\n\nbenign_start=0\nsize=train_benign.shape[0]//train_benign_batch\nbenign_stop=benign_start+size\n\nmalig_start=0\nmalig_stop=train_malig.shape[0]\n\n\n\nfor i in range(0,len(train_data)):\n\n    for j in range(benign_start,benign_stop):\n        \n        if j<train_benign.shape[0]:\n            train_data[i].append(train_jpg_dir + train_benign['image_name'].iloc[j]+'.jpg')\n            train_labels[i].append(train_benign['target'].iloc[j])\n        \n        else:\n            break\n       \n    for k in range(malig_start,malig_stop+1):\n        \n        if k<train_malig.shape[0]:\n            train_data[i].append(train_jpg_dir+train_malig['image_name'].iloc[k]+'.jpg')\n            train_labels[i].append(train_malig['target'].iloc[k])\n        else:\n            break\n     \n    benign_start=benign_stop\n    benign_stop=benign_stop+size\n\n    \n\nfor l in range(0,len(train_data)):\n        name=var+str(l)\n        name=pd.DataFrame(train_data[l])\n        name.columns=['images']\n        name['target']=train_labels[l]\n        source.append(name)\n        print(source[l]['target'].value_counts())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_data=[]\ntest_labels=[]\n\nfor i in range(test_csv.shape[0]):\n        test_data.append(test_jpg_dir+test_csv['image_name'].iloc[i]+'.jpg')\n      \n\ndf_test=pd.DataFrame(test_data)\ndf_test.columns=['images']\ndf_test['images']=test_data\ndf_test.head()\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_gen=[]\nval_gen=[]\n\nfor i in range(len(source)):\n    \n    train_aug_name='train_aug_'+str(i)\n    val_aug_name='valid_aug_'+str(i)\n    train_generator_name='train_generator_'+str(i)\n    val_generator_name='val_generator_'+str(i)\n    \n    X_train,X_val,y_train,y_val=train_test_split(source[i]['images'],source[i]['target'],test_size=0.2,random_state=20,stratify=source[i]['target'])\n\n    train=pd.DataFrame(X_train)\n    train.columns=['images']\n    train['target']=y_train\n\n    validation=pd.DataFrame(X_val)\n    validation.columns=['images']\n    validation['target']=y_val\n    \n   \n    train_aug_name = ImageDataGenerator(\n        rescale=1./255,\n        brightness_range=[0.2,0.5],\n        shear_range=0.4,\n        rotation_range=30,\n        horizontal_flip=True,\n        width_shift_range=2\n)\n\n    val_aug_name = ImageDataGenerator(\n        rescale=1./255,\n)\n\n\n    train_generator_name = train_aug_name.flow_from_dataframe(\n        train,\n        x_col='images',\n        y_col='target',\n        target_size=(img_width, img_height),\n        batch_size=32,\n        shuffle=True,\n        class_mode='raw',\n        \n)\n        \n \n    val_generator_name = val_aug_name.flow_from_dataframe(\n        validation,\n        x_col='images',\n        y_col='target',\n        target_size=(img_width,img_height),\n        batch_size=16,\n        shuffle=True,\n        class_mode='raw'\n     \n)\n    train_gen.append(train_generator_name)\n    val_gen.append(val_generator_name)\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"epochs=3\nnum_dataset=1\nsaved_model_path='/kaggle/working/'\n\nfor i in range(num_dataset):\n        \n        print('Starting with Dataset : '+str(i))\n    \n        with strategy.scope():\n    \n            base_model=tf.keras.applications.InceptionV3(include_top=False,weights='imagenet',classes=2,input_shape=(img_width,img_height,channels))\n            base_model.trainable=False\n        \n            model_name='model_'+str(i)\n        \n            model=tf.keras.Sequential([\n                base_model,\n                tf.keras.layers.Flatten(),\n                tf.keras.layers.Dense(1,activation='sigmoid')\n                ])\n    \n            model.compile(tf.keras.optimizers.Adam(learning_rate=0.0001),loss='binary_crossentropy',metrics='AUC')\n\n    \n            model.fit_generator(\n                train_gen[i],\n                validation_data=val_gen[i],\n                epochs=epochs\n             \n                )\n        \n            print('Saving '+model_name)\n            model.save(saved_model_path+model_name+'.h5')\n\n      \n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true},"cell_type":"code","source":"submission=pd.read_csv('/kaggle/input/siim-isic-melanoma-classification/sample_submission.csv')\ntarget=[]\n\n\nfor path in tqdm(df_test['images']):\n        img=cv2.imread(str(path))\n        img = cv2.resize(img, (224,224))\n        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n        img = img.astype(np.float32)/255.\n        img=np.reshape(img,(1,224,224,3))\n        prediction=model.predict(img)\n        f=prediction.flatten()\n        target.append(f[0])\n        \n\nsubmission['target']=target\nprint(submission.head())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission.to_csv('/kaggle/working/incept_try_submission.csv', index=False)\nsubmission.shape\nsubmission.head()\n","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}