{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport PIL as pillow\nfrom PIL import Image\nimport os \nimport matplotlib.pyplot as plt\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom sklearn.model_selection import train_test_split\nos.environ[\"CUDA_VISIBLE_DEVICES\"] = \"1\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"base_image_dir = os.path.join(\"../input/\")\ntrain_dir = os.path.join(base_image_dir,'train_images/')\ntrain = pd.read_csv(os.path.join(base_image_dir, 'train.csv'))\ntrain['path'] = train['id_code'].map(lambda x: os.path.join(train_dir,'{}.png'.format(x)))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_dir = os.path.join(base_image_dir, \"test_images/\")\ntest = pd.read_csv(os.path.join(base_image_dir, 'test.csv'))\ntest['path'] = test['id_code'].map(lambda x: os.path.join(test_dir, '{}.png'.format(x)))","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def preprocess_image(image_path, image_size = 224):\n    im = Image.open(image_path)\n    im = im.resize((image_size, image_size))\n    \n    return im","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"N = train.shape[0]\nx_train = np.empty((N, 224, 224, 3), dtype=np.uint8)\n\nfor i in range(len(train[\"path\"])):\n    x_train[i, :, :, :] = preprocess_image(train[\"path\"][i])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"N = test.shape[0]\nx_test = np.empty((N, 224, 224, 3), dtype=np.uint8)\n\nfor i in range(len(test[\"path\"])):\n    x_test[i, :, :, :] = preprocess_image(test[\"path\"][i])","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"id_code = []\nimage = []\nlabel = []\nfor i in x_train:\n    image.append(i)\n\nfor i in train[\"id_code\"]:\n    id_code.append(i)\n\nfor i in train[\"diagnosis\"]:\n    label.append(i)\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"all_data = {\"id_code\": id_code, \"image\": image, \"label\":label}","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.models import Sequential, Model, Input\nfrom keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, AveragePooling2D, GlobalAveragePooling2D\nfrom keras.applications.inception_v3 import InceptionV3\nfrom keras.applications.resnet50 import ResNet50","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train = np.array(all_data[\"image\"])\ny_train = np.array(all_data[\"label\"])\nx_train, x_val, y_train, y_val = train_test_split(\n    x_train, y_train, \n    test_size=0.2, random_state=2019, stratify = y_train\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import keras.callbacks as callback\n\nTerminate= callback.TerminateOnNaN()\nbase_model = ResNet50(weights='imagenet', include_top=False)\nx = base_model.output\nx1 = GlobalAveragePooling2D()(x)\nx2 = Dense(2000, activation = \"relu\")(x1)\nx3 = Dense(1000, activation = \"relu\")(x2)\nx4 = Dense(500, activation = \"relu\")(x3)\nfinal_output = Dense(5, activation = \"softmax\")(x4)\nmodel = Model(inputs = base_model.input, outputs = final_output)\n\nfor i in model.layers[:44]:\n    i.trainable = False\nfor i in model.layers[44:]:\n    i.trainable = True\n\nmodel.compile(loss = \"sparse_categorical_crossentropy\", optimizer = \"Adam\", metrics = [\"accuracy\"])\ntrain_history = model.fit(x_train, y_train, epochs = 20, batch_size = 32)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import seaborn as sn\nsn.countplot(train[\"diagnosis\"])\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"prediction = model.predict(x_val)\npredictions = []\nfor i in prediction:\n    predictions.append(np.argmax(i))","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"from sklearn.metrics import cohen_kappa_score\npredictions = np.array(predictions)\ncohen_kappa_score(y_val, predictions, weights = \"quadratic\")","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.5.2"}},"nbformat":4,"nbformat_minor":1}