Skip to content

Instantly share code, notes, and snippets.

@skbly7
Created December 22, 2020 11:56
Show Gist options
  • Save skbly7/88a69c509441dc8f92a30cafd8eeb8c0 to your computer and use it in GitHub Desktop.
Save skbly7/88a69c509441dc8f92a30cafd8eeb8c0 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"Seismic Facies Identification Challenge BASELINE","provenance":[{"file_id":"1eCwQdXigALpJlz-zi2rZyyu39X-6_Oz8","timestamp":1601880140182}],"collapsed_sections":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU","widgets":{"application/vnd.jupyter.widget-state+json":{"207a9f6bf37c4fa39c0ccac3669aaff1":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","state":{"_view_name":"HBoxView","_dom_classes":[],"_model_name":"HBoxModel","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.5.0","box_style":"","layout":"IPY_MODEL_e976c0fb58e54101bafdc1df2fd04b3d","_model_module":"@jupyter-widgets/controls","children":["IPY_MODEL_d71ed8197de44845a37ec2d55e68dccd","IPY_MODEL_496c9e4fa9a742f6b21c6ecda4e60499"]}},"e976c0fb58e54101bafdc1df2fd04b3d":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"d71ed8197de44845a37ec2d55e68dccd":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","state":{"_view_name":"ProgressView","style":"IPY_MODEL_3edb3bdb76e54a42b17cb1a7b8afd79e","_dom_classes":[],"description":"100%","_model_name":"FloatProgressModel","bar_style":"success","max":2012,"_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":2012,"_view_count":null,"_view_module_version":"1.5.0","orientation":"horizontal","min":0,"description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_2f3ae18217ac4c96944917a7548f1578"}},"496c9e4fa9a742f6b21c6ecda4e60499":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","state":{"_view_name":"HTMLView","style":"IPY_MODEL_f37b6c64cb2e412194259df0002428a2","_dom_classes":[],"description":"","_model_name":"HTMLModel","placeholder":"​","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":" 2012/2012 [00:23<00:00, 87.03it/s]","_view_count":null,"_view_module_version":"1.5.0","description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_7b38955330d8414097092e3f8724b827"}},"3edb3bdb76e54a42b17cb1a7b8afd79e":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","state":{"_view_name":"StyleView","_model_name":"ProgressStyleModel","description_width":"initial","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","bar_color":null,"_model_module":"@jupyter-widgets/controls"}},"2f3ae18217ac4c96944917a7548f1578":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"f37b6c64cb2e412194259df0002428a2":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","state":{"_view_name":"StyleView","_model_name":"DescriptionStyleModel","description_width":"","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","_model_module":"@jupyter-widgets/controls"}},"7b38955330d8414097092e3f8724b827":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"4d86fb4b312641a3adec510933db7fbb":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","state":{"_view_name":"HBoxView","_dom_classes":[],"_model_name":"HBoxModel","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.5.0","box_style":"","layout":"IPY_MODEL_e927fa08f72a4406a9eecdc3b3e01b77","_model_module":"@jupyter-widgets/controls","children":["IPY_MODEL_701d1708da484cd9b6dedc1dcf85a2ac","IPY_MODEL_edfc4455bfc242e7ab01550b4659c76a"]}},"e927fa08f72a4406a9eecdc3b3e01b77":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"701d1708da484cd9b6dedc1dcf85a2ac":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","state":{"_view_name":"ProgressView","style":"IPY_MODEL_f8fb31dd39c647269059b5f1201081ae","_dom_classes":[],"description":"100%","_model_name":"FloatProgressModel","bar_style":"success","max":1006,"_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":1006,"_view_count":null,"_view_module_version":"1.5.0","orientation":"horizontal","min":0,"description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_18dc11f4daf642018da4e247ae97e958"}},"edfc4455bfc242e7ab01550b4659c76a":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","state":{"_view_name":"HTMLView","style":"IPY_MODEL_53f3daf48d934e9695f0a2065066fc04","_dom_classes":[],"description":"","_model_name":"HTMLModel","placeholder":"​","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":" 1006/1006 [00:02<00:00, 349.31it/s]","_view_count":null,"_view_module_version":"1.5.0","description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_ba095a1eb12e475c90811383b5600c79"}},"f8fb31dd39c647269059b5f1201081ae":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","state":{"_view_name":"StyleView","_model_name":"ProgressStyleModel","description_width":"initial","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","bar_color":null,"_model_module":"@jupyter-widgets/controls"}},"18dc11f4daf642018da4e247ae97e958":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"53f3daf48d934e9695f0a2065066fc04":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","state":{"_view_name":"StyleView","_model_name":"DescriptionStyleModel","description_width":"","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","_model_module":"@jupyter-widgets/controls"}},"ba095a1eb12e475c90811383b5600c79":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}}}}},"cells":[{"cell_type":"markdown","metadata":{"id":"PMmb2MuQxJg-"},"source":["## Baseline Solution for [Seismic Facies Identification Challenge](https://www.aicrowd.com/challenges/seismic-facies-identification-challenge/leaderboards)"]},{"cell_type":"markdown","metadata":{"id":"b_u8z7CxxV-1"},"source":["### We used **U-Net** model whose architecture is shown below"]},{"cell_type":"markdown","metadata":{"id":"G3MOQ5-BuBU9"},"source":["![Unet-Model.jpeg](data:image/jpeg;base64,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)"]},{"cell_type":"code","metadata":{"id":"Di_DYEnkIcFZ"},"source":["import torch.nn as nn\n","import torch\n","import torch.nn.functional as F\n","\n","# DoubleConv Class to perform two layer Convolution\n","class DoubleConv(nn.Module):\n"," def __init__(self,in_ch,out_ch):\n"," super(DoubleConv,self).__init__()\n"," self.conv = nn.Sequential(\n"," nn.Conv2d(in_ch,out_ch,3,padding=1), \n"," nn.BatchNorm2d(out_ch),\n"," nn.ReLU(inplace = True),\n"," nn.Conv2d(out_ch,out_ch,3,padding=1),\n"," nn.BatchNorm2d(out_ch),\n"," nn.ReLU(inplace = True)\n"," )\n"," def forward(self,x):\n"," return self.conv(x)\n","# Unter Class with shown architecture\n","class UNet(nn.Module):\n"," def __init__(self,in_ch,out_ch):\n"," super(UNet,self).__init__()\n"," self.conv1 = DoubleConv(in_ch,64)\n"," self.pool1 = nn.MaxPool2d(2)\n"," self.conv2 = DoubleConv(64,128)\n"," self.pool2 = nn.MaxPool2d(2)\n"," self.conv3 = DoubleConv(128,256)\n"," self.pool3 = nn.MaxPool2d(2)\n"," self.conv4 = DoubleConv(256,512)\n"," self.pool4 = nn.MaxPool2d(2)\n"," self.conv5 = DoubleConv(512,1024)\n"," self.up6 = nn.ConvTranspose2d(1024,512,2,stride=2)\n"," self.conv6 = DoubleConv(1024,512)\n"," self.up7 = nn.ConvTranspose2d(512,256,2,stride=2)\n"," self.conv7 = DoubleConv(512,256)\n"," self.up8 = nn.ConvTranspose2d(256,128,2,stride=2)\n"," self.conv8 = DoubleConv(256,128)\n"," self.up9 = nn.ConvTranspose2d(128,64,2,stride=2)\n"," self.conv9 = DoubleConv(128,128)\n"," self.conv9 = DoubleConv(128,64)\n"," self.conv10 = nn.Conv2d(64,out_ch,1)\n","\n"," def forward(self,x):\n"," c1 = self.conv1(x)\n"," p1 = self.pool1(c1)\n"," c2 = self.conv2(p1)\n"," p2 = self.pool2(c2)\n"," c3 = self.conv3(p2)\n"," p3 = self.pool3(c3)\n"," c4 = self.conv4(p3)\n"," p4 = self.pool4(c4)\n"," c5 = self.conv5(p4)\n"," up_6 = self.up6(c5)\n"," merge6 = torch.cat([up_6,c4],dim=1)\n"," c6 = self.conv6(merge6)\n"," up_7 = self.up7(c6)\n"," merge7 = torch.cat([up_7,c3],dim=1)\n"," c7 = self.conv7(merge7)\n"," up_8 = self.up8(c7)\n"," merge8 = torch.cat([up_8,c2],dim=1)\n"," c8 = self.conv8(merge8)\n"," up_9 = self.up9(c8)\n"," merge9 = torch.cat([up_9,c1],dim=1)\n"," c9 = self.conv9(merge9)\n"," out = c9\n"," c10 = self.conv10(c9)\n"," out = c10 \n"," out = nn.Softmax()(c10) \n"," return out"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"XiqISfeQx0U4"},"source":["### Data Download"]},{"cell_type":"code","metadata":{"id":"td-_AazWxyMZ"},"source":["# Getting the Data files from the aicrowd website\n","!wget https://datasets.aicrowd.com/default/aicrowd-public-datasets/seamai-facies-challenge/v0.1/public/data_train.npz\n","!wget https://datasets.aicrowd.com/default/aicrowd-public-datasets/seamai-facies-challenge/v0.1/public/data_test_1.npz\n","!wget https://datasets.aicrowd.com/default/aicrowd-public-datasets/seamai-facies-challenge/v0.1/public/labels_train.npz"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"ZzxwkPfZx_FQ"},"source":["#### If we look at the Train and the Test data we can observe that their shapes are different, So we decided to follow the Slice and Stack approach to make it nearly similar to the Test Data \n","#### (Look at the Below figure to understand)"]},{"cell_type":"markdown","metadata":{"id":"0kenoZxeybRr"},"source":["![Data_slice.png](data:image/png;base64,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)"]},{"cell_type":"markdown","metadata":{"id":"DN7zAkpw4oNl"},"source":["### Data Handling"]},{"cell_type":"code","metadata":{"id":"H9xKl5wrIkMg","executionInfo":{"status":"ok","timestamp":1601819481260,"user_tz":-330,"elapsed":50337,"user":{"displayName":"mani DILLS","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GgX08ZK-rB1oDNubY9CHyhzUQ-aOYpijsySU8uQ=s64","userId":"00181444102423808384"}},"outputId":"1c4aac0c-871f-4f6b-d17b-905a7f8cc7b6","colab":{"base_uri":"https://localhost:8080/","height":34}},"source":["import time\n","import matplotlib.pyplot as plt\n","import numpy as np\n","import torch\n","from torch.utils.data import DataLoader, Dataset#\n","from torch import optim\n","\n","import numpy as np\n","sei_patch = np.load('/content/data_train.npz')['data']\n","lab_patch = np.load('/content/labels_train.npz')['labels']\n","\n","import cv2\n","from tqdm.notebook import tqdm\n","import datetime \n","from IPython.display import HTML\n","import cv2\n","\n","\n","sei_patch = np.concatenate((sei_patch[:,:,:295] , sei_patch[:,:,295:]))\n","lab_patch = np.concatenate((lab_patch[:,:,:295] , lab_patch[:,:,295:]))\n","sei_patch.shape, lab_patch.shape"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["((2012, 782, 295), (2012, 782, 295))"]},"metadata":{"tags":[]},"execution_count":2}]},{"cell_type":"markdown","metadata":{"id":"coVT7uMi2xg4"},"source":["### Resizing the images Considering the Computational power"]},{"cell_type":"code","metadata":{"id":"TO_labAzItyD","executionInfo":{"status":"ok","timestamp":1601819503686,"user_tz":-330,"elapsed":9265,"user":{"displayName":"mani DILLS","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GgX08ZK-rB1oDNubY9CHyhzUQ-aOYpijsySU8uQ=s64","userId":"00181444102423808384"}},"outputId":"e48c619c-b400-428d-eb5e-8dfeb7019f14","colab":{"base_uri":"https://localhost:8080/","height":84,"referenced_widgets":["207a9f6bf37c4fa39c0ccac3669aaff1","e976c0fb58e54101bafdc1df2fd04b3d","d71ed8197de44845a37ec2d55e68dccd","496c9e4fa9a742f6b21c6ecda4e60499","3edb3bdb76e54a42b17cb1a7b8afd79e","2f3ae18217ac4c96944917a7548f1578","f37b6c64cb2e412194259df0002428a2","7b38955330d8414097092e3f8724b827"]}},"source":["training_img_data = []\n","training_label_data = []\n","\n","for i in tqdm(range(0, 2012)):\n"," img = sei_patch[i,:,:]\n"," label = lab_patch[i,:,:]\n","\n"," img = np.expand_dims(img, axis=2).astype('float32')\n"," label = np.expand_dims(label, axis=2).astype('float32')\n","\n"," img = cv2.resize(img, (256,256 ))\n"," label = cv2.resize(label, ( 256,256))\n","\n"," training_img_data.append(img) \n"," training_label_data.append(label)\n","\n","training_img_data = np.asarray(training_img_data)\n","training_label_data = np.asarray(training_label_data)\n","training_label_data = np.array(training_label_data,dtype=int)\n","training_img_data.shape, training_label_data.shape"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"207a9f6bf37c4fa39c0ccac3669aaff1","version_minor":0,"version_major":2},"text/plain":["HBox(children=(FloatProgress(value=0.0, max=2012.0), HTML(value='')))"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["((2012, 256, 256), (2012, 256, 256))"]},"metadata":{"tags":[]},"execution_count":3}]},{"cell_type":"markdown","metadata":{"id":"DhuSx5sK3iuo"},"source":["### Creating a DataGenerator Class along with Metrics and Train Function"]},{"cell_type":"code","metadata":{"id":"UYDYvdV6I9sP"},"source":["class DataGenerator(Dataset):\n"," def __init__(self, x_set, y_set):\n"," self.x, self.y = x_set, y_set\n","\n"," def __len__(self):\n"," return len(self.x)\n"," \n"," def __getitem__(self, index):\n"," batch_x = self.x[index]\n"," batch_y = self.y[index]\n"," return np.expand_dims(batch_x,axis=0), batch_y\n","\n","e=1e-2\n","\n","def accuracy(out, yb):\n"," preds = torch.argmax(out, dim=1)\n"," return (preds == yb).float().mean()\n","\n","\n","def train(model,optimizer,dataload,num_epochs,device):\n"," acc_history = []\n"," loss_history = []\n"," miou_history = []\n"," for epoch in range(num_epochs):\n"," print('Starting epoch {}/{}'.format(epoch+1, num_epochs))\n"," print('-' * 10)\n"," since = time.time()\n"," dataset_size = len(dataload.dataset)\n"," epoch_loss = 0\n"," epoch_acc = 0\n","\n"," for idx,(x, y) in enumerate(dataload): \n"," optimizer.zero_grad() \n"," inputs = x.to(device)\n"," labels = y.to(device)\n"," outputs = model(inputs) \n"," criterion1 = MulticlassDiceLoss() \n"," loss1 = criterion1(outputs,labels.long())\n"," criterion2 = torch.nn.CrossEntropyLoss()\n"," loss2 = criterion2(torch.log(outputs),labels.long())\n"," loss = e*loss1+loss2\n"," acc = accuracy(outputs,labels)\n"," loss.backward() \n"," optimizer.step() \n"," \n"," epoch_loss += loss.item()\n"," epoch_acc+= acc\n"," loss_history.append(loss.item())\n"," acc_history.append(acc)\n"," if (idx+1)%10==0:\n"," print(\"%d/%d,train_loss:%0.3f,accuracy:%0.3f\" % (idx+1, dataset_size // dataload.batch_size, loss.item(),acc))\n","\n"," time_elapsed = time.time() - since \n"," all_epoch_loss=epoch_loss/len(dataload)\n"," all_epoch_acc=epoch_acc/len(dataload)\n"," print(\"epoch %d loss:%0.3f accuracy:%0.3f \" % (epoch, all_epoch_loss,all_epoch_acc))\n"," print('Training complete in {:.0f}m {:.0f}s'.format(time_elapsed // 60, time_elapsed % 60))\n","\n"," torch.save(model,\"/content/model_0.pth\") \n"," return model,loss_history,acc_history"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"HQfWz9Fw3b1N"},"source":["### Data Loading and Model Training"]},{"cell_type":"code","metadata":{"id":"YOXQFVITJH3Z","executionInfo":{"status":"ok","timestamp":1601820899801,"user_tz":-330,"elapsed":1389944,"user":{"displayName":"mani DILLS","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GgX08ZK-rB1oDNubY9CHyhzUQ-aOYpijsySU8uQ=s64","userId":"00181444102423808384"}},"outputId":"35364277-63ad-4603-f572-fe4657b6e2f6","colab":{"base_uri":"https://localhost:8080/","height":1000}},"source":["from dice_loss import *\n","!CUDA_LAUNCH_BLOCKING=1\n","device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n","model = UNet(1,7).to(device)\n","train_dataset = DataGenerator(x_set=training_img_data,y_set=training_label_data) \n","dataloader = DataLoader(train_dataset, batch_size=10, shuffle=True)\n","optimizer = optim.Adam(model.parameters(),lr=1e-4)\n","num_epochs=12\n","\n","model_0,loss,acc=train(model,optimizer,dataloader,num_epochs,device)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Starting epoch 1/12\n","----------\n"],"name":"stdout"},{"output_type":"stream","text":["/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:67: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n"],"name":"stderr"},{"output_type":"stream","text":["10/201,train_loss:2.073,accuracy:0.211\n","20/201,train_loss:1.849,accuracy:0.339\n","30/201,train_loss:1.520,accuracy:0.538\n","40/201,train_loss:1.539,accuracy:0.506\n","50/201,train_loss:1.597,accuracy:0.461\n","60/201,train_loss:1.550,accuracy:0.508\n","70/201,train_loss:1.272,accuracy:0.652\n","80/201,train_loss:1.069,accuracy:0.780\n","90/201,train_loss:1.375,accuracy:0.585\n","100/201,train_loss:1.562,accuracy:0.537\n","110/201,train_loss:1.281,accuracy:0.626\n","120/201,train_loss:1.114,accuracy:0.743\n","130/201,train_loss:1.379,accuracy:0.597\n","140/201,train_loss:1.265,accuracy:0.555\n","150/201,train_loss:1.633,accuracy:0.541\n","160/201,train_loss:1.098,accuracy:0.694\n","170/201,train_loss:1.064,accuracy:0.709\n","180/201,train_loss:1.111,accuracy:0.678\n","190/201,train_loss:0.999,accuracy:0.734\n","200/201,train_loss:1.140,accuracy:0.678\n","epoch 0 loss:1.421 accuracy:0.567 \n","Training complete in 1m 53s\n","Starting epoch 2/12\n","----------\n","10/201,train_loss:1.276,accuracy:0.576\n","20/201,train_loss:1.067,accuracy:0.680\n","30/201,train_loss:1.597,accuracy:0.460\n","40/201,train_loss:1.233,accuracy:0.585\n","50/201,train_loss:1.260,accuracy:0.575\n","60/201,train_loss:0.845,accuracy:0.794\n","70/201,train_loss:1.002,accuracy:0.675\n","80/201,train_loss:0.905,accuracy:0.775\n","90/201,train_loss:0.880,accuracy:0.776\n","100/201,train_loss:0.843,accuracy:0.780\n","110/201,train_loss:1.156,accuracy:0.659\n","120/201,train_loss:0.919,accuracy:0.737\n","130/201,train_loss:0.702,accuracy:0.845\n","140/201,train_loss:1.032,accuracy:0.686\n","150/201,train_loss:0.779,accuracy:0.804\n","160/201,train_loss:0.808,accuracy:0.780\n","170/201,train_loss:0.766,accuracy:0.817\n","180/201,train_loss:0.608,accuracy:0.857\n","190/201,train_loss:0.834,accuracy:0.752\n","200/201,train_loss:0.738,accuracy:0.779\n","epoch 1 loss:0.993 accuracy:0.712 \n","Training complete in 1m 55s\n","Starting epoch 3/12\n","----------\n","10/201,train_loss:1.025,accuracy:0.682\n","20/201,train_loss:0.727,accuracy:0.827\n","30/201,train_loss:1.059,accuracy:0.653\n","40/201,train_loss:0.771,accuracy:0.762\n","50/201,train_loss:0.869,accuracy:0.731\n","60/201,train_loss:0.684,accuracy:0.816\n","70/201,train_loss:0.936,accuracy:0.745\n","80/201,train_loss:0.543,accuracy:0.891\n","90/201,train_loss:0.758,accuracy:0.788\n","100/201,train_loss:1.130,accuracy:0.654\n","110/201,train_loss:0.679,accuracy:0.836\n","120/201,train_loss:0.580,accuracy:0.854\n","130/201,train_loss:0.911,accuracy:0.719\n","140/201,train_loss:0.858,accuracy:0.777\n","150/201,train_loss:0.475,accuracy:0.913\n","160/201,train_loss:0.510,accuracy:0.890\n","170/201,train_loss:0.472,accuracy:0.905\n","180/201,train_loss:0.755,accuracy:0.770\n","190/201,train_loss:0.536,accuracy:0.877\n","200/201,train_loss:0.502,accuracy:0.884\n","epoch 2 loss:0.761 accuracy:0.790 \n","Training complete in 1m 55s\n","Starting epoch 4/12\n","----------\n","10/201,train_loss:0.767,accuracy:0.770\n","20/201,train_loss:0.647,accuracy:0.821\n","30/201,train_loss:0.664,accuracy:0.812\n","40/201,train_loss:0.688,accuracy:0.818\n","50/201,train_loss:0.641,accuracy:0.800\n","60/201,train_loss:0.889,accuracy:0.692\n","70/201,train_loss:0.458,accuracy:0.906\n","80/201,train_loss:0.635,accuracy:0.827\n","90/201,train_loss:0.779,accuracy:0.784\n","100/201,train_loss:0.708,accuracy:0.763\n","110/201,train_loss:0.421,accuracy:0.920\n","120/201,train_loss:0.582,accuracy:0.858\n","130/201,train_loss:0.639,accuracy:0.822\n","140/201,train_loss:0.400,accuracy:0.918\n","150/201,train_loss:0.513,accuracy:0.862\n","160/201,train_loss:0.487,accuracy:0.877\n","170/201,train_loss:0.490,accuracy:0.891\n","180/201,train_loss:0.578,accuracy:0.848\n","190/201,train_loss:0.657,accuracy:0.790\n","200/201,train_loss:0.793,accuracy:0.764\n","epoch 3 loss:0.587 accuracy:0.848 \n","Training complete in 1m 55s\n","Starting epoch 5/12\n","----------\n","10/201,train_loss:0.440,accuracy:0.911\n","20/201,train_loss:0.635,accuracy:0.811\n","30/201,train_loss:0.416,accuracy:0.903\n","40/201,train_loss:0.433,accuracy:0.890\n","50/201,train_loss:0.407,accuracy:0.915\n","60/201,train_loss:0.402,accuracy:0.932\n","70/201,train_loss:0.678,accuracy:0.841\n","80/201,train_loss:0.370,accuracy:0.929\n","90/201,train_loss:0.458,accuracy:0.883\n","100/201,train_loss:0.378,accuracy:0.932\n","110/201,train_loss:0.563,accuracy:0.850\n","120/201,train_loss:0.363,accuracy:0.919\n","130/201,train_loss:0.328,accuracy:0.944\n","140/201,train_loss:0.462,accuracy:0.881\n","150/201,train_loss:0.335,accuracy:0.936\n","160/201,train_loss:0.276,accuracy:0.959\n","170/201,train_loss:0.395,accuracy:0.911\n","180/201,train_loss:0.289,accuracy:0.952\n","190/201,train_loss:0.370,accuracy:0.914\n","200/201,train_loss:0.532,accuracy:0.860\n","epoch 4 loss:0.446 accuracy:0.896 \n","Training complete in 1m 55s\n","Starting epoch 6/12\n","----------\n","10/201,train_loss:0.611,accuracy:0.822\n","20/201,train_loss:0.307,accuracy:0.939\n","30/201,train_loss:0.598,accuracy:0.876\n","40/201,train_loss:0.329,accuracy:0.928\n","50/201,train_loss:0.380,accuracy:0.909\n","60/201,train_loss:0.336,accuracy:0.929\n","70/201,train_loss:0.455,accuracy:0.888\n","80/201,train_loss:0.369,accuracy:0.908\n","90/201,train_loss:0.455,accuracy:0.871\n","100/201,train_loss:0.343,accuracy:0.912\n","110/201,train_loss:0.319,accuracy:0.940\n","120/201,train_loss:0.344,accuracy:0.924\n","130/201,train_loss:0.249,accuracy:0.959\n","140/201,train_loss:0.323,accuracy:0.934\n","150/201,train_loss:0.312,accuracy:0.949\n","160/201,train_loss:0.270,accuracy:0.949\n","170/201,train_loss:0.275,accuracy:0.949\n","180/201,train_loss:0.326,accuracy:0.934\n","190/201,train_loss:0.439,accuracy:0.890\n","200/201,train_loss:0.428,accuracy:0.900\n","epoch 5 loss:0.383 accuracy:0.913 \n","Training complete in 1m 55s\n","Starting epoch 7/12\n","----------\n","10/201,train_loss:0.470,accuracy:0.862\n","20/201,train_loss:0.299,accuracy:0.944\n","30/201,train_loss:0.274,accuracy:0.948\n","40/201,train_loss:0.293,accuracy:0.950\n","50/201,train_loss:1.170,accuracy:0.747\n","60/201,train_loss:0.304,accuracy:0.940\n","70/201,train_loss:0.513,accuracy:0.883\n","80/201,train_loss:0.407,accuracy:0.894\n","90/201,train_loss:0.312,accuracy:0.942\n","100/201,train_loss:0.213,accuracy:0.969\n","110/201,train_loss:0.259,accuracy:0.954\n","120/201,train_loss:0.333,accuracy:0.929\n","130/201,train_loss:0.301,accuracy:0.939\n","140/201,train_loss:0.341,accuracy:0.922\n","150/201,train_loss:0.240,accuracy:0.963\n","160/201,train_loss:0.223,accuracy:0.969\n","170/201,train_loss:0.250,accuracy:0.956\n","180/201,train_loss:0.237,accuracy:0.958\n","190/201,train_loss:0.312,accuracy:0.942\n","200/201,train_loss:0.256,accuracy:0.949\n","epoch 6 loss:0.337 accuracy:0.927 \n","Training complete in 1m 55s\n","Starting epoch 8/12\n","----------\n","10/201,train_loss:0.235,accuracy:0.961\n","20/201,train_loss:0.266,accuracy:0.945\n","30/201,train_loss:0.192,accuracy:0.975\n","40/201,train_loss:0.239,accuracy:0.955\n","50/201,train_loss:0.272,accuracy:0.934\n","60/201,train_loss:0.230,accuracy:0.960\n","70/201,train_loss:0.272,accuracy:0.948\n","80/201,train_loss:0.271,accuracy:0.948\n","90/201,train_loss:0.245,accuracy:0.949\n","100/201,train_loss:0.261,accuracy:0.948\n","110/201,train_loss:0.243,accuracy:0.953\n","120/201,train_loss:0.233,accuracy:0.957\n","130/201,train_loss:0.187,accuracy:0.972\n","140/201,train_loss:0.283,accuracy:0.934\n","150/201,train_loss:0.211,accuracy:0.975\n","160/201,train_loss:0.208,accuracy:0.963\n","170/201,train_loss:0.230,accuracy:0.965\n","180/201,train_loss:0.249,accuracy:0.946\n","190/201,train_loss:0.271,accuracy:0.945\n","200/201,train_loss:0.254,accuracy:0.946\n","epoch 7 loss:0.262 accuracy:0.949 \n","Training complete in 1m 55s\n","Starting epoch 9/12\n","----------\n","10/201,train_loss:0.208,accuracy:0.965\n","20/201,train_loss:0.968,accuracy:0.779\n","30/201,train_loss:0.303,accuracy:0.916\n","40/201,train_loss:0.253,accuracy:0.954\n","50/201,train_loss:0.309,accuracy:0.927\n","60/201,train_loss:0.294,accuracy:0.935\n","70/201,train_loss:0.342,accuracy:0.919\n","80/201,train_loss:0.334,accuracy:0.920\n","90/201,train_loss:0.246,accuracy:0.956\n","100/201,train_loss:0.346,accuracy:0.903\n","110/201,train_loss:0.293,accuracy:0.936\n","120/201,train_loss:0.224,accuracy:0.957\n","130/201,train_loss:0.246,accuracy:0.956\n","140/201,train_loss:0.232,accuracy:0.959\n","150/201,train_loss:0.192,accuracy:0.965\n","160/201,train_loss:0.210,accuracy:0.965\n","170/201,train_loss:0.220,accuracy:0.960\n","180/201,train_loss:0.190,accuracy:0.968\n","190/201,train_loss:0.268,accuracy:0.952\n","200/201,train_loss:0.190,accuracy:0.970\n","epoch 8 loss:0.290 accuracy:0.936 \n","Training complete in 1m 55s\n","Starting epoch 10/12\n","----------\n","10/201,train_loss:0.247,accuracy:0.946\n","20/201,train_loss:0.186,accuracy:0.971\n","30/201,train_loss:0.243,accuracy:0.955\n","40/201,train_loss:0.347,accuracy:0.919\n","50/201,train_loss:0.172,accuracy:0.977\n","60/201,train_loss:0.173,accuracy:0.975\n","70/201,train_loss:0.193,accuracy:0.970\n","80/201,train_loss:0.159,accuracy:0.979\n","90/201,train_loss:0.225,accuracy:0.950\n","100/201,train_loss:0.177,accuracy:0.969\n","110/201,train_loss:0.156,accuracy:0.975\n","120/201,train_loss:0.173,accuracy:0.973\n","130/201,train_loss:0.164,accuracy:0.974\n","140/201,train_loss:0.166,accuracy:0.978\n","150/201,train_loss:0.184,accuracy:0.968\n","160/201,train_loss:0.167,accuracy:0.969\n","170/201,train_loss:0.188,accuracy:0.972\n","180/201,train_loss:0.421,accuracy:0.900\n","190/201,train_loss:0.228,accuracy:0.951\n","200/201,train_loss:0.203,accuracy:0.961\n","epoch 9 loss:0.218 accuracy:0.959 \n","Training complete in 1m 55s\n","Starting epoch 11/12\n","----------\n","10/201,train_loss:0.258,accuracy:0.938\n","20/201,train_loss:0.186,accuracy:0.965\n","30/201,train_loss:0.241,accuracy:0.947\n","40/201,train_loss:0.195,accuracy:0.965\n","50/201,train_loss:0.157,accuracy:0.976\n","60/201,train_loss:0.216,accuracy:0.954\n","70/201,train_loss:0.321,accuracy:0.919\n","80/201,train_loss:0.233,accuracy:0.942\n","90/201,train_loss:0.150,accuracy:0.979\n","100/201,train_loss:0.181,accuracy:0.967\n","110/201,train_loss:0.148,accuracy:0.979\n","120/201,train_loss:0.173,accuracy:0.968\n","130/201,train_loss:0.211,accuracy:0.967\n","140/201,train_loss:0.176,accuracy:0.966\n","150/201,train_loss:0.198,accuracy:0.963\n","160/201,train_loss:0.190,accuracy:0.966\n","170/201,train_loss:0.163,accuracy:0.971\n","180/201,train_loss:0.195,accuracy:0.965\n","190/201,train_loss:0.186,accuracy:0.964\n","200/201,train_loss:0.198,accuracy:0.961\n","epoch 10 loss:0.209 accuracy:0.959 \n","Training complete in 1m 55s\n","Starting epoch 12/12\n","----------\n","10/201,train_loss:0.317,accuracy:0.918\n","20/201,train_loss:0.322,accuracy:0.926\n","30/201,train_loss:0.194,accuracy:0.967\n","40/201,train_loss:0.208,accuracy:0.962\n","50/201,train_loss:0.175,accuracy:0.960\n","60/201,train_loss:0.179,accuracy:0.965\n","70/201,train_loss:0.219,accuracy:0.967\n","80/201,train_loss:0.150,accuracy:0.978\n","90/201,train_loss:0.176,accuracy:0.966\n","100/201,train_loss:0.216,accuracy:0.953\n","110/201,train_loss:0.165,accuracy:0.972\n","120/201,train_loss:0.187,accuracy:0.976\n","130/201,train_loss:0.165,accuracy:0.977\n","140/201,train_loss:0.223,accuracy:0.960\n","150/201,train_loss:0.142,accuracy:0.979\n","160/201,train_loss:0.148,accuracy:0.981\n","170/201,train_loss:0.209,accuracy:0.961\n","180/201,train_loss:0.146,accuracy:0.979\n","190/201,train_loss:0.188,accuracy:0.963\n","200/201,train_loss:0.145,accuracy:0.979\n","epoch 11 loss:0.178 accuracy:0.968 \n","Training complete in 1m 55s\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"4WxI5bwAJQG3"},"source":["## Function to predict\n","def seisfacies_predict(section,patch_size=256,overlap=0,onehot=0): \n"," m1,m2 = section.shape\n"," os = overlap \n"," n1,n2 = patch_size,patch_size \n"," c1 = int(np.round((m1+os)/(n1-os)+0.5))\n"," c2 = int(np.round((m2+os)/(n2-os)+0.5))\n"," p1 = (n1-os)*c1+os\n"," p2 = (n2-os)*c2+os\n","\n"," gp = np.zeros((p1,p2),dtype=np.single) \n"," gy = np.zeros((7,p1,p2),dtype=np.single) \n"," gs = np.zeros((n1,n2),dtype=np.single) \n"," \n"," gp[0:m1,0:m2]=section \n","\n"," for k1 in range(c1):\n"," for k2 in range(c2):\n"," b1 = k1*n1-k1*os\n"," e1 = b1+n1\n"," b2 = k2*n2-k2*os\n"," e2 = b2+n2 \n"," #predict\n"," gs[:,:]=gp[b1:e1,b2:e2]\n"," x=gs.reshape(1,1,256,256)\n"," Y_patch= model(torch.from_numpy(x)).squeeze()\n"," p=F.softmax(Y_patch, dim=0).detach().numpy()\n"," gy[:,b1:e1,b2:e2]= gy[:,b1:e1,b2:e2]+p\n"," \n"," gy_onehot = gy[:,0:m1,0:m2] \n"," #onehot2label\n"," gy_label =np.argmax(gy_onehot,axis=0)\n","\n"," if onehot==0:\n"," return gy_label\n"," if onehot==1:\n"," return gy_label,gy_onehot"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"hn0bpfnC4S_4"},"source":["### Loading Test Data"]},{"cell_type":"code","metadata":{"id":"0JPlcswMMucV","executionInfo":{"status":"ok","timestamp":1601663189780,"user_tz":-330,"elapsed":24178,"user":{"displayName":"Mani Kandan","photoUrl":"","userId":"16019920751672798074"}},"outputId":"4d92636f-da70-4db9-ccc9-585ce77dc01d","colab":{"base_uri":"https://localhost:8080/","height":66,"referenced_widgets":["4d86fb4b312641a3adec510933db7fbb","e927fa08f72a4406a9eecdc3b3e01b77","701d1708da484cd9b6dedc1dcf85a2ac","edfc4455bfc242e7ab01550b4659c76a","f8fb31dd39c647269059b5f1201081ae","18dc11f4daf642018da4e247ae97e958","53f3daf48d934e9695f0a2065066fc04","ba095a1eb12e475c90811383b5600c79"]}},"source":["test_seismic = np.load('/content/data_test_1.npz')['data']\n","testing_img_data = []\n","for i in tqdm(range(0, 1006)):\n"," img = test_seismic[i,:,:]\n"," img = np.expand_dims(img, axis=2).astype('float32')\n"," img = cv2.resize(img, (256, 256))\n"," testing_img_data.append(img) \n"," \n","testing_img_data = np.asarray(testing_img_data)\n"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"4d86fb4b312641a3adec510933db7fbb","version_minor":0,"version_major":2},"text/plain":["HBox(children=(FloatProgress(value=0.0, max=1006.0), HTML(value='')))"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"SVZLZbiA4A-e"},"source":["### Testing Predictions for One Data"]},{"cell_type":"code","metadata":{"id":"NuogSaK8MxGi","executionInfo":{"status":"ok","timestamp":1601821115530,"user_tz":-330,"elapsed":7374,"user":{"displayName":"mani DILLS","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GgX08ZK-rB1oDNubY9CHyhzUQ-aOYpijsySU8uQ=s64","userId":"00181444102423808384"}},"outputId":"0823b072-fd8c-47b9-f0c5-1a638785df10","colab":{"base_uri":"https://localhost:8080/","height":176}},"source":["#loading the Saved Model\n","model = torch.load(\"model_0.pth\",map_location='cpu')\n","gy_label,gy_onehot=seisfacies_predict(training_img_data[180],onehot=1)\n","gy_label"],"execution_count":null,"outputs":[{"output_type":"stream","text":["/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:67: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n"],"name":"stderr"},{"output_type":"execute_result","data":{"text/plain":["array([[2, 2, 2, ..., 2, 2, 2],\n"," [2, 2, 2, ..., 2, 2, 2],\n"," [2, 6, 6, ..., 2, 2, 2],\n"," ...,\n"," [6, 6, 6, ..., 4, 4, 4],\n"," [6, 6, 6, ..., 4, 4, 4],\n"," [2, 6, 6, ..., 4, 4, 4]])"]},"metadata":{"tags":[]},"execution_count":14}]},{"cell_type":"code","metadata":{"id":"AU7bIlHsM4gQ","executionInfo":{"status":"ok","timestamp":1601821120525,"user_tz":-330,"elapsed":1172,"user":{"displayName":"mani DILLS","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GgX08ZK-rB1oDNubY9CHyhzUQ-aOYpijsySU8uQ=s64","userId":"00181444102423808384"}},"outputId":"e470bafc-1029-4a6c-ef7b-5d5d06159007","colab":{"base_uri":"https://localhost:8080/","height":139}},"source":["training_label_data[180]"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[6, 6, 6, ..., 2, 2, 2],\n"," [6, 6, 6, ..., 2, 2, 2],\n"," [6, 6, 6, ..., 2, 2, 2],\n"," ...,\n"," [6, 6, 6, ..., 4, 4, 4],\n"," [6, 6, 6, ..., 4, 4, 4],\n"," [6, 6, 6, ..., 4, 4, 4]])"]},"metadata":{"tags":[]},"execution_count":15}]},{"cell_type":"markdown","metadata":{"id":"9zBBTnLW39xO"},"source":["### Predictions"]},{"cell_type":"code","metadata":{"id":"OqRSmjtQM5jQ"},"source":["preds = []\n","for i in tqdm(range(0, 1006)):\n"," gy_label,gy_onehot=seisfacies_predict(testing_img_data[i],onehot=1)\n"," label = gy_label\n"," label = np.expand_dims(label, axis=2).astype('float32')\n"," label = cv2.resize(label, (251,782))\n"," preds.append(label)"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"1-xy2j2H2Oy8"},"source":["final_preds = np.asarray(preds)\n","final_preds = np.array(final_preds,dtype=int)"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"hpsSCWbl2R0j"},"source":["np.savez_compressed('submission.npz', prediction = final_preds)"],"execution_count":null,"outputs":[]}]}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment