{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nseed = 42\nnp.random.seed(seed)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import cv2\nfrom glob import glob\nimport pandas as pd \nimport numpy as np\nfrom tqdm import tqdm\n\nfrom sklearn.preprocessing import LabelEncoder\nfrom keras.utils.np_utils import to_categorical","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#from sklearn.metrics import confusion_matrix\n#import cv2\n#import copy\nimport matplotlib.pyplot as plt\nfrom keras.models import Sequential\nfrom keras.layers import BatchNormalization,Convolution2D,MaxPooling2D\nfrom keras.layers import Flatten,Activation\nfrom keras.layers import Dropout\nfrom keras.optimizers import Adam\nfrom keras.callbacks import EarlyStopping\nfrom keras import initializers\n#import numpy as np\nfrom keras import regularizers\n\n#from sklearn.preprocessing import LabelEncoder\n#from keras.utils.np_utils import to_categorical\n#from sklearn.metrics import confusion_matrix,classification_report\n#from sklearn.metrics import auc,roc_curve,roc_auc_score\n\nfrom sklearn.model_selection import train_test_split\n#from keras.utils.np_utils import to_categorical # convert to one-hot-encoding\nfrom keras.layers import Dense\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import ReduceLROnPlateau\n#from glob import glob\n#import pandas as pd\nimport os","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pngs=glob(r'../input/train_images/*.png')\nlen(pngs)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#len(aspect_ratio)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#set(aspect_ratio)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ratio=0.75\n\nheight=int(128*.75)\n\nwidth=128\n\nbatchsize=4\n\nchannel=1\n\nch=0","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"height","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#del aspect_ratio,height_list,width_list","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#del aspect","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df=pd.read_csv(r'../input/train.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"set(df['diagnosis'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df[5:10]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dataset=[]\n\ny_true=[]\n\nfor i in range(len(pngs)):\n    \n    #print(i)\n    name=r'../input/train_images/' + str(df['id_code'][i]) + '.png'\n    \n    y_true.append(df['diagnosis'][i])\n    \n    img=cv2.imread(name,ch)\n    \n    img=cv2.resize(img,(width,height),cv2.INTER_AREA)\n    \n    dataset.append(img)\n    \n    del img","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dataset=np.array(dataset)\n\ny_true=np.array(y_true)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"encoder = LabelEncoder()\nencoder.fit(y_true)\ny_true = encoder.transform(y_true)\ny_true = to_categorical(y_true)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dataset = dataset.reshape(-1,height,width,channel)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dataset.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img=dataset[1]\nimg.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"type(dataset)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train,x_val,y_train,y_val=train_test_split(dataset,y_true,shuffle=True,test_size=0.4)\n\nprint('okay')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"del dataset,y_true","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"earlystop = EarlyStopping(monitor = 'val_loss', \n                          min_delta = 0, \n                          patience = 8,\n                          verbose = 1,mode='min',\n                          restore_best_weights = True)\n\nreduce_lr = ReduceLROnPlateau(monitor = 'val_loss', mode='min',factor = 0.2, patience = 1, verbose = 1, min_delta = 0.0001)\n\n# we put our call backs into a callback list\ncallbacks = [earlystop,reduce_lr]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_datagen = ImageDataGenerator(rescale=1./255,\n                                    width_shift_range=0.1,\n                                    height_shift_range=0.1,\n                                    shear_range=0.2,\n                                    zoom_range=0.2,\n                                    horizontal_flip=True,\n                                    fill_mode='nearest')\n\ntest_datagen=ImageDataGenerator(rescale=1./255)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model=Sequential()\n#model.add(GaussianNoise(0.1))\nmodel.add(Convolution2D(8,kernel_size=(3,3),\n                        activation='relu',\n                        kernel_regularizer=regularizers.l2(0.00001),\n                        input_shape=(height,width,channel)))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(2,2))\n#model.add(Dropout(0.5))\n\nmodel.add(Convolution2D(8,kernel_size=(3,3),\n                        activation='relu',\n                        kernel_regularizer=regularizers.l2(0.00001)))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(2,2))\nmodel.add(Dropout(0.5))\n\nmodel.add(Convolution2D(32,kernel_size=(5,5),\n                        activation='relu',\n                        kernel_regularizer=regularizers.l2(0.00001)))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(2,2))\nmodel.add(Dropout(0.5))\n\nmodel.add(Flatten())\nmodel.add(Dense(32*5,\n                activation='relu',\n                kernel_regularizer=regularizers.l2(0.00001)))\n\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.8))\n\nmodel.add(Dense(5,activation='softmax'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(optimizer=Adam(0.00001), loss='categorical_crossentropy', metrics=['acc'])\n#va = EarlyStopping(monitor='val_loss',verbose=1, patience=50)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train=x_train.reshape(-1,height,width,channel)\n\nx_val=x_val.reshape(-1,height,width,channel)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"output=model.fit_generator(train_datagen.flow(x=x_train, y=y_train, batch_size=batchsize),\n                             epochs=3, verbose=1,callbacks=callbacks,\n                             validation_data=test_datagen.flow(x_val,y_val,batch_size=batchsize), \n                             shuffle=False, steps_per_epoch=x_train.shape[0]//batchsize,\n                             validation_steps=x_val.shape[0])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.plot(output.history['acc'])\nplt.plot(output.history['val_acc'])\nplt.title('multiclass classifier accuracy for  view')\nplt.ylabel('accuracy')\nplt.xlabel('epoch')\nplt.legend(['train', 'validation'], loc='upper left')\nplt.show()\n# summarize history for loss\nplt.plot(output.history['loss'])\nplt.plot(output.history['val_loss'])\nplt.title('multiclass classifier loss for  view')\nplt.ylabel('loss')\nplt.xlabel('epoch')\nplt.legend(['train', 'validation'], loc='upper left')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission_df = pd.read_csv('../input/sample_submission.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#submission_df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_test=[]\n\nfor i in range(1928):\n    \n    #print(i)\n    \n    name=r'../input/test_images/' + str(submission_df['id_code'][i]) + '.png'\n    \n    #y_true.append(df['diagnosis'][i])\n    \n    img=cv2.imread(name,ch)\n    \n    img=cv2.resize(img,(width,height),cv2.INTER_AREA)\n    \n    x_test.append(img)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_test=np.array(x_test)\n\nx_test=x_test.reshape(-1,height,width,channel)\n\nx_test=x_test/np.max(x_test)\n\nx_test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred=model.predict_classes(x_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred[0]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def accuracy(confusion_matrix):\n    diagonal_sum = confusion_matrix.trace()\n    sum_of_all_elements = confusion_matrix.sum()\n    return diagonal_sum / sum_of_all_elements ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"req=x_train/np.max(x_train)\npredicted=model.predict_classes(req)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.metrics import confusion_matrix","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def one_hot_to_indices(data):\n    indices = []\n    for el in data:\n        indices.append(list(el).index(1))\n    return indices","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train = one_hot_to_indices(y_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"cm=confusion_matrix(y_train,predicted)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"accuracy(cm)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"del x_test,x_train,x_val","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import os\nids=[]\ntest_path='../input/test_images'\nlabel=[]\na=0\nfor i in range(len(os.listdir(test_path))):\n    \n    #idx=submission_df['id_code'][a]\n    #ids.append(idx)\n    submission_df['diagnosis'][a]=int(pred[a])\n    #label.append(int(pred[a]))\n    a=a+1\n\n#label=np.array(label,dtype='uint16')\n\n#out=pd.DataFrame({'id_code': ids,'diagnosis':label[:]})\n\nsubmission_df.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission_df","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}