{"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":"markdown","source":"# Data Loading","metadata":{}},{"cell_type":"code","source":"from pathlib import Path\nimport numpy as np\nimport pandas as pd\nimport skimage.io as io\nimport cv2\nimport matplotlib.pyplot as plt\nfrom tqdm.notebook import tqdm\nimport os\nfrom PIL import Image\nimport gc\n\n\n\ntqdm.pandas()\nup_points = (256, 256)\n\ndata=pd.read_csv(\"../input/mayo-clinic-strip-ai/train.csv\")\nimdata = np.empty((0,5,256, 256, 3),dtype=np.uint8)\nY=[]\nfor i in tqdm(data.image_id[:500]):\n    image_list = np.empty((0,256, 256, 3),dtype=np.uint8)\n    for filename in os.listdir(\"../input/\"):\n        paths = list(Path('../input/'+filename+'/train/').glob(i+'*.jpg'))\n        if len(paths) != 0:\n            for idx,path in enumerate(paths):\n                im = io.imread(path)\n                new_im = cv2.resize(im, up_points, interpolation= cv2.INTER_LINEAR)\n                #display(data.loc[data['image_id'] == i][\"label\"].values*5)\n                #plt.imshow(im)\n                #plt.show()\n                \n                image_list = np.vstack((image_list,np.array([new_im])))\n                del im  \n                del new_im\n\n                if(idx>100):\n                    break\n        del paths        \n    \n    if len(image_list) != 0:\n        \n        idxs = np.argsort(np.mean(np.mean(np.mean((image_list), axis=-1),axis=-1),axis=-1))[:5]\n        \n        new_image_list = image_list[idxs]\n        \n        del image_list\n        del idxs\n        \n        imdata = np.append(imdata,[new_image_list],axis=0)\n\n        print(imdata.shape)\n        \n        Y.append(data.loc[data['image_id'] == i][\"label\"].values[0])\n        \n        del new_image_list\n        gc.collect()\n\n\n","metadata":{"execution":{"iopub.status.busy":"2022-08-01T12:53:59.941112Z","iopub.execute_input":"2022-08-01T12:53:59.942268Z","iopub.status.idle":"2022-08-01T13:21:17.465996Z","shell.execute_reply.started":"2022-08-01T12:53:59.942146Z","shell.execute_reply":"2022-08-01T13:21:17.46443Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Preprocces and Train","metadata":{}},{"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\nfrom sklearn.model_selection import train_test_split\nimport keras\nfrom tensorflow import keras\nimport tensorflow as tf\n\nfrom tensorflow.keras import layers\n\n\n\nbase_model=tf.keras.applications.ResNet50(\n    include_top=False,\n    weights=None,\n    input_tensor=None,\n    input_shape=(256,256,3),\n)\n\nbase_model.trainable = True\n\n\nscaledimdata= (((imdata/255.0)-0.5)*2).astype(np.float64)\n\n#print(imdata)\n\nY = np.array(Y)\nlabel_encoder = LabelEncoder()\nY = label_encoder.fit_transform(Y)\nY =Y.reshape(-1,1)\nprint(Y.shape)\nX_train, X_test, y_train, y_test = train_test_split(scaledimdata, Y, test_size=0.1, random_state=42)\n\ntrain_dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train))\ntest_dataset = tf.data.Dataset.from_tensor_slices((X_test, y_test))\n\nBATCH_SIZE = 32\nSHUFFLE_BUFFER_SIZE = 500\n\ntrain_dataset = train_dataset.shuffle(SHUFFLE_BUFFER_SIZE).batch(BATCH_SIZE)\ntest_dataset = test_dataset.batch(BATCH_SIZE)\n\ndel scaledimdata\ndel imdata\ndel Y\ndel X_train\ndel X_test\ndel y_train\ndel y_test\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2022-08-01T13:21:17.468882Z","iopub.execute_input":"2022-08-01T13:21:17.469402Z","iopub.status.idle":"2022-08-01T13:21:43.247403Z","shell.execute_reply.started":"2022-08-01T13:21:17.46933Z","shell.execute_reply":"2022-08-01T13:21:43.246393Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ndef network():\n    \n    inp = layers.Input(shape=(5,256,256,3),dtype=tf.float64)\n    \n    list_ = tf.unstack(inp,axis=-4)\n\n    print(list)\n\n    for i in range(5):\n        list_[i] = tf.keras.layers.RandomFlip(mode=\"horizontal_and_vertical\")(list_[i])\n        #list_[i] = tf.keras.layers.RandomZoom(.5, .2)(list_[i])\n   \n\n\n    x = tf.stack(list_,axis=-4)\n    \n    x = tf.reshape(x, [-1,256, 256, 15])\n\n    \n    print(x)\n\n\n    x = layers.Conv2D(3, (3, 3), activation='relu',padding=\"same\")(x)\n \n    x = base_model(x, training=True)\n    \n    x = keras.layers.GlobalAveragePooling2D()(x)\n\n    #x = layers.Flatten()(x)   \n    \n    x=keras.layers.Dense(512,activation=\"relu\")(x)  \n        \n    x=keras.layers.Dense(256,activation=\"relu\")(x)  \n        \n    x=keras.layers.Dense(128,activation=\"relu\")(x)  \n    \n    \n    out=keras.layers.Dense(2,activation=\"softmax\")(x)\n    \n    model = keras.Model(inputs=inp, outputs=out)\n    return model\n\n\nmodel=network()\nmodel.compile(optimizer=keras.optimizers.Adam(learning_rate=0.001),\n              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n              metrics=['accuracy'])\n\nprint(model.summary())\ngc.collect()\n\nclass CustomCallback(keras.callbacks.Callback):\n    def on_epoch_end(self, epoch, logs=None):\n        gc.collect()\n        \nmodel.fit(train_dataset,validation_data=test_dataset,epochs=300)\n","metadata":{"execution":{"iopub.status.busy":"2022-08-01T13:21:43.250422Z","iopub.execute_input":"2022-08-01T13:21:43.25172Z","iopub.status.idle":"2022-08-01T13:28:50.461701Z","shell.execute_reply.started":"2022-08-01T13:21:43.251677Z","shell.execute_reply":"2022-08-01T13:28:50.459827Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}