{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport tensorflow as tf\nimport tensorflow_addons as tfa\nfrom tensorflow.keras.layers import Dense\nfrom tensorflow.keras.models import Model\nfrom kaggle_datasets import KaggleDatasets\nfrom matplotlib import pyplot as plt\nimport os\nfrom tqdm import tqdm\nfrom tensorflow.keras.applications import Xception\n\nprint(tf.__version__)\nprint(tf.keras.__version__)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# TTA Prediction","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"# make a prediction using test-time augmentation\n\ndef tta_prediction(datagen, model, image, aug_img_number):\n    # convert image into dataset\n    samples = np.expand_dims(image, 0)\n    \n    print(samples.shape)\n    # prepare iterator\n    it = datagen.flow(samples, batch_size=aug_img_number)\n    \n    # make predictions for each augmented image\n    preds = model.predict_generator(it, steps=aug_img_number, verbose=0)\n    print(preds)\n    # sum across predictions\n    # do either sum or mean whatever you like\n    summed = np.sum(preds, axis=0)\n    \n    # argmax across classes\n    return np.argmax(summed)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_images_path = '../input/panda-cancer-l2-sqtile32-v1/train_squaretile_images/'\ntrain_df = pd.read_csv('/kaggle/input/prostate-cancer-grade-assessment/train.csv')\ndef get_image():\n    \n    image = plt.imread(train_images_path + train_df.loc[2]['image_id'] + '.png')\n    \n    return image","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df.loc[2]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from tensorflow.keras.models import load_model\n# select type of augmentation to do \ntta_datagen = tf.keras.preprocessing.image.ImageDataGenerator(\n        horizontal_flip = True,\n        vertical_flip = True,\n        rotation_range=90 \n)\n\n\n# get prediction as following for one image\nmodel2 = load_model('../input/pandaxceptiononlessdata/xception-16-0.59.hdf5', compile=False) \n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"image =  get_image()\nplt.imshow(get_image())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%%time\n\naug_img_number = 3 # numer of images to generate \npred = tta_prediction(tta_datagen, model2, image, aug_img_number)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(pred)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# USING Albumentation","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"import albumentations\naugT  = albumentations.Transpose(p=1)\naugVF = albumentations.VerticalFlip(p=1)\naugHF = albumentations.HorizontalFlip(p=1)\n\ndef tta_pred(image):\n    image = image.reshape((1, 768, 768, 3))\n    \n    image1 = augHF(image = image)['image']\n    pred1 = model2.predict(image1, batch_size = 1 )\n    \n    image2 = augHF(image = image)['image']\n    pred2 = model2.predict(image2, batch_size = 1)\n    \n    image3 = augHF(image = image)['image']\n    pred3 = model2.predict(image3, batch_size = 1)\n    \n    final_pred = ( pred1 + pred2 + pred3 ) / 3\n\n    return final_pred\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%%time\nimage =  get_image()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%%time\n#for i in range(2):\nprint(tta_pred(image))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.imshow(image)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for i in tqdm(range(train_df.shape[0])):\n    if train_df['image_path'][i] in [path_list_1, path_list_2]:\n        new_img_df = new_img_df.append(train_df.loc[i])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df_not_01 = train_df[(train_df['isup_grade'] != 0) & (train_df['isup_grade'] != 1)]\ntrain_class0 = train_df[train_df['isup_grade'] == 0].sample(frac=0.489)\ntrain_class1 = train_df[train_df['isup_grade'] == 1].sample(frac=0.498)\n\nprint(train_df_not_01['isup_grade'].value_counts())\nprint(train_class0['isup_grade'].value_counts())\nprint(train_class1['isup_grade'].value_counts())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"final_train = train_df_not_01\nfinal_train = final_train.append(train_class0)\nfinal_train = final_train.append(train_class1)\nfinal_train.reset_index(inplace = True) \n\nprint(final_train['isup_grade'].value_counts())\nprint(final_train.head())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import StratifiedKFold, KFold\n\n\ndef getFold(kfold):\n    \n    split_size = kfold\n    skFold = StratifiedKFold(n_splits = split_size, random_state=42, shuffle = True)\n    \n    data_list = []\n\n    for train_index, test_index in skFold.split(train_df[\"image_id\"], train_df[\"isup_grade\"] ):\n        \n        X_train = train_df[[\"image_id\"]].iloc[train_index]\n        X_test  = train_df[[\"image_id\"]].iloc[test_index]\n    \n        y_train = train_df[[\"isup_grade\"]].iloc[train_index]\n        y_test  = train_df[[\"isup_grade\"]].iloc[test_index]\n       \n        df_train = pd.DataFrame({\"image_id\":X_train['image_id'], \"isup_grade\":y_train['isup_grade']}, dtype=str)\n        df_valid = pd.DataFrame({\"image_id\":X_test['image_id'], \"isup_grade\":y_test['isup_grade']}, dtype=str)\n        \n        dataDict = {'train':df_train,'valid':df_valid}\n        \n        data_list.append(dataDict)\n        \n    return data_list    \n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"data_fold = getFold(2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for data in data_fold[:1]:\n    \n    fold1 = data.get('train')\n    fold2 = data.get('valid')\n    \n    print(fold1['isup_grade'].value_counts())\n    print(fold2['isup_grade'].value_counts())\n\n    print()\n    print('------------------------------------------------------')\n    print()\n    print('======================================================')\n    print('======================================================')\n    print('======================================================')\n    print('======================================================')    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","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}