{"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":"<img src = 'https://storage.googleapis.com/kaggle-competitions/kaggle/22962/logos/header.png?t=2021-03-17-22-44-09'>\n<center>\n<img role=\"presentation\" alt class=\"competition-header__org-thumbnail-image\" src=\"https://storage.googleapis.com/kaggle-organizations/3774/thumbnail.jpeg\">\n</center>\n<br>\n\n\n\n**This Notebook helpful to anyone who is looking for and EDA.** <br>\nThe model training process is commented out. beacase, It takes a lot of time.<br>\nIf you want to training Process. I hope turn on GPU.\n<br>\n**This content is completely written from EDA to submission.**\n<br>\n# Contents\n-  Import and Setup\n-  load Data and species Info\n-  Replace Duplicate Features\n-  Whale and Dolphin barplot\n-  Whale and Dolphin barplot\n-  Top10 Whale & Dolphin\n-  load Image and Visualization Whale & Dolphin\n-  Prepare labeling and Transforms\n-  Load Dataset\n-  Model\n-  Conclusion and Submission\n-  Reference Link\n<br>\n\n**If you helpful, Don't forget upvote!**","metadata":{}},{"cell_type":"markdown","source":"<a id=\"top\"></a>\n\n<div class=\"list-group\" id=\"list-tab\" role=\"tablist\">\n<h3 class=\"list-group-item list-group-item-action active\" data-toggle=\"list\" style='color:white; background:skyblue; border:0' role=\"tab\" aria-controls=\"home\">\n<center>Import and Setup</center></h3>","metadata":{}},{"cell_type":"markdown","source":"# 1. Import and Setup","metadata":{}},{"cell_type":"code","source":"import os\nimport albumentations\nimport albumentations.pytorch as AT\nimport numpy as np\nimport pandas as pd\nimport cv2\nimport time\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nimport torchvision.transforms as transforms\nimport torchvision\nfrom torchvision.models import vgg16\nfrom torch.optim import lr_scheduler\nfrom torch.utils.data import DataLoader, Dataset\nfrom torch.utils.data.sampler import SubsetRandomSampler\nfrom PIL import Image\nfrom sklearn.preprocessing import LabelEncoder, OneHotEncoder\nfrom tqdm import tqdm\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n%matplotlib inline\n\nimport warnings\nwarnings.simplefilter(\"ignore\", category=DeprecationWarning)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-02-16T13:04:33.133263Z","iopub.execute_input":"2022-02-16T13:04:33.133908Z","iopub.status.idle":"2022-02-16T13:04:33.143899Z","shell.execute_reply.started":"2022-02-16T13:04:33.133869Z","shell.execute_reply":"2022-02-16T13:04:33.143244Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"top\"></a>\n<div class=\"list-group\" id=\"list-tab\" role=\"tablist\">\n<h3 class=\"list-group-item list-group-item-action active\" data-toggle=\"list\" style='color:white; background:skyblue; border:0' role=\"tab\" aria-controls=\"home\">\n<center>load Data and species Info</center></h3>","metadata":{}},{"cell_type":"markdown","source":"# 2. load Data and species Info","metadata":{}},{"cell_type":"code","source":"train_df = pd.read_csv('../input/happy-whale-and-dolphin/train.csv')\ntrain_df.head()\n\nprint('Individual_ID Unique Value', train_df['individual_id'].nunique())\nnum_classes = train_df['individual_id'].nunique()\nprint()\ntrain_df['species'].unique()","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:04:34.701068Z","iopub.execute_input":"2022-02-16T13:04:34.701617Z","iopub.status.idle":"2022-02-16T13:04:34.771780Z","shell.execute_reply.started":"2022-02-16T13:04:34.701578Z","shell.execute_reply":"2022-02-16T13:04:34.770975Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**There are cases where certain values are dupliates, so you need to fix the duplicate cases.**","metadata":{}},{"cell_type":"markdown","source":"<a id=\"top\"></a>\n<div class=\"list-group\" id=\"list-tab\" role=\"tablist\">\n<h3 class=\"list-group-item list-group-item-action active\" data-toggle=\"list\" style='color:white; background:skyblue; border:0' role=\"tab\" aria-controls=\"home\">\n<center>Replace Duplicate Features</center></h3>","metadata":{}},{"cell_type":"markdown","source":"# 3. Replace Duplicate Features","metadata":{}},{"cell_type":"code","source":"def duplicate_feature(data, species):\n    for duplicate, change in species:\n        data['species'] = data['species'].str.replace(duplicate, change)\n        \n    return data\n\ndup_species = [['bottlenose_dolpin','bottlenose_dolphin'], ['kiler_whale','killer_whale']]\ntrain_df = duplicate_feature(train_df, dup_species)","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:04:35.291158Z","iopub.execute_input":"2022-02-16T13:04:35.291435Z","iopub.status.idle":"2022-02-16T13:04:35.369391Z","shell.execute_reply.started":"2022-02-16T13:04:35.291404Z","shell.execute_reply":"2022-02-16T13:04:35.368677Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**We can identify sone of the speices as being dolphine and other as whales, therefore, we also observe it.**","metadata":{}},{"cell_type":"markdown","source":"<a id=\"top\"></a>\n<div class=\"list-group\" id=\"list-tab\" role=\"tablist\">\n<h3 class=\"list-group-item list-group-item-action active\" data-toggle=\"list\" style='color:white; background:skyblue; border:0' role=\"tab\" aria-controls=\"home\">\n<center>Whale & Dolphin barplot</center></h3>","metadata":{}},{"cell_type":"markdown","source":"# 4. Whale and Dolphin barplot","metadata":{}},{"cell_type":"code","source":"train_df['class'] = train_df.species.map(lambda x: 'whale' if 'whale' in x else 'dolphin')\n\ntemp = train_df['class'].value_counts()\ntemp_df = pd.DataFrame({'Classes':temp.index,\n                        'Species':temp.values})\nplt.figure(figsize = (20, 10))\nsns.barplot(x = 'Classes', y = 'Species', data = temp_df)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:04:35.868474Z","iopub.execute_input":"2022-02-16T13:04:35.869092Z","iopub.status.idle":"2022-02-16T13:04:36.065428Z","shell.execute_reply.started":"2022-02-16T13:04:35.869048Z","shell.execute_reply":"2022-02-16T13:04:36.064694Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (20, 10))\nsns.kdeplot(np.log(train_df.loc[train_df['class'] == 'whale']['individual_id'].value_counts()))\nsns.kdeplot(np.log(train_df.loc[train_df['class'] == 'dolphin']['individual_id'].value_counts()))\nplt.legend(labels = ['whale', 'dolphin'])\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:04:36.066956Z","iopub.execute_input":"2022-02-16T13:04:36.067641Z","iopub.status.idle":"2022-02-16T13:04:36.405848Z","shell.execute_reply.started":"2022-02-16T13:04:36.067590Z","shell.execute_reply":"2022-02-16T13:04:36.405177Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig, ax  = plt.subplots(figsize=(16, 8))\nfig.suptitle('Whales and Dolphins ', size = 20, font=\"Serif\")\nexplode = (0.05, 0.05)\nlabels = list(train_df['class'].value_counts().index)\nsizes = train_df['class'].value_counts().values\nax.pie(sizes, explode=explode,startangle=60, labels=labels,autopct='%1.0f%%', pctdistance=0.7, colors=[\"#0077b6\",\"#90e0ef\"])\nax.add_artist(plt.Circle((0,0),0.4,fc='white'))\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:04:36.407512Z","iopub.execute_input":"2022-02-16T13:04:36.407974Z","iopub.status.idle":"2022-02-16T13:04:36.530449Z","shell.execute_reply.started":"2022-02-16T13:04:36.407936Z","shell.execute_reply":"2022-02-16T13:04:36.529681Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"top\"></a>\n<div class=\"list-group\" id=\"list-tab\" role=\"tablist\">\n<h3 class=\"list-group-item list-group-item-action active\" data-toggle=\"list\" style='color:white; background:skyblue; border:0' role=\"tab\" aria-controls=\"home\">\n<center>Top10 Whale & Dolphin</center></h3>","metadata":{}},{"cell_type":"markdown","source":"# 5. Top10 Whale & Dolphin","metadata":{}},{"cell_type":"code","source":"print('Top 10 Whale & Dolphin')\ntrain_df['species'].value_counts().head(10)","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:04:36.564897Z","iopub.execute_input":"2022-02-16T13:04:36.565229Z","iopub.status.idle":"2022-02-16T13:04:36.584548Z","shell.execute_reply.started":"2022-02-16T13:04:36.565191Z","shell.execute_reply":"2022-02-16T13:04:36.583870Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport numpy as np\narray = train_df['species'].value_counts().head(10)[::-1]\ntmp = array.index.tolist()\ncount = array.values.tolist()\ny = np.arange(10)\nplt.figure(figsize = (20, 10))\nplt.barh(y, count, color='dodgerblue')\nplt.axvline(np.mean(count), ls = '--', color = 'r', linewidth = 5)\nplt.yticks(y, tmp)\nplt.xlabel('count')\nplt.ylabel('Whale and Dolphin')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:04:36.715804Z","iopub.execute_input":"2022-02-16T13:04:36.716065Z","iopub.status.idle":"2022-02-16T13:04:36.957503Z","shell.execute_reply.started":"2022-02-16T13:04:36.716036Z","shell.execute_reply":"2022-02-16T13:04:36.956783Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_jpg_directory = '../input/happy-whale-and-dolphin/train_images'\ntest_jpg_directory = '../input/happy-whale-and-dolphin/test_images'\n\ndef getImagesPaths(directory):\n    images_names = []\n    for dirname, _, filenames in os.walk(directory):\n        for filename in filenames:\n            fullpath = os.path.join(dirname, filename)\n            images_names.append(fullpath)\n    return images_names\n\ntrain_jpg = getImagesPaths(train_jpg_directory)\ntest_jpg = getImagesPaths(test_jpg_directory)\n\ndef image_directory(df):\n    df['image_dir'] = train_jpg_directory + '/'+ df['image']\n    \n    return df\n\ntrain_df = image_directory(train_df)\nprint('Train Images : ', len(train_jpg))\nprint('Test Images : ', len(test_jpg))","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2022-02-16T13:04:36.959039Z","iopub.execute_input":"2022-02-16T13:04:36.959459Z","iopub.status.idle":"2022-02-16T13:04:53.129549Z","shell.execute_reply.started":"2022-02-16T13:04:36.959418Z","shell.execute_reply":"2022-02-16T13:04:53.127993Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def display_img(images_path, rows, cols, title):\n    figure, ax = plt.subplots(nrows= rows, ncols=cols, figsize = (16, 8))\n    plt.suptitle(title, fontsize = 20)\n    for ind, image_path in enumerate(images_path):\n        image = cv2.imread(image_path)\n        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n        try:\n            ax.ravel()[ind].imshow(image)\n            ax.ravel()[ind].set_axis_off()\n        except:\n            continue\n    plt.tight_layout()\n    plt.show()","metadata":{"_kg_hide-input":true,"_kg_hide-output":true,"execution":{"iopub.status.busy":"2022-02-16T13:04:53.131287Z","iopub.execute_input":"2022-02-16T13:04:53.131554Z","iopub.status.idle":"2022-02-16T13:04:53.138095Z","shell.execute_reply.started":"2022-02-16T13:04:53.131512Z","shell.execute_reply":"2022-02-16T13:04:53.137184Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"top\"></a>\n<div class=\"list-group\" id=\"list-tab\" role=\"tablist\">\n<h3 class=\"list-group-item list-group-item-action active\" data-toggle=\"list\" style='color:white; background:skyblue; border:0' role=\"tab\" aria-controls=\"home\">\n<center>load Image and Visualization Whale & Dolphin</center></h3>","metadata":{}},{"cell_type":"markdown","source":"# 6. load Image and Visualization Whale & Dolphin","metadata":{}},{"cell_type":"code","source":"display_img(train_df.loc[train_df['species']=='bottlenose_dolphin']['image_dir'][:25], 5, 5, 'bottlenose_dolphin')","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:04:53.139884Z","iopub.execute_input":"2022-02-16T13:04:53.140401Z","iopub.status.idle":"2022-02-16T13:05:07.202804Z","shell.execute_reply.started":"2022-02-16T13:04:53.140364Z","shell.execute_reply":"2022-02-16T13:05:07.202057Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"display_img(train_df.loc[train_df['species']=='humpback_whale']['image_dir'][:25], 5, 5, 'humpback_whale')","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:07.204578Z","iopub.execute_input":"2022-02-16T13:05:07.204923Z","iopub.status.idle":"2022-02-16T13:05:18.882741Z","shell.execute_reply.started":"2022-02-16T13:05:07.204891Z","shell.execute_reply":"2022-02-16T13:05:18.879558Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"display_img(train_df.loc[train_df['species']=='spinner_dolphin']['image_dir'][:25], 5, 5, 'spinner_dolphin')","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:18.884028Z","iopub.execute_input":"2022-02-16T13:05:18.884760Z","iopub.status.idle":"2022-02-16T13:05:25.258403Z","shell.execute_reply.started":"2022-02-16T13:05:18.884719Z","shell.execute_reply":"2022-02-16T13:05:25.257397Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"display_img(train_df.loc[train_df['species']=='dusky_dolphin']['image_dir'][:25], 5, 5, 'dusky_dolphin')","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:25.260065Z","iopub.execute_input":"2022-02-16T13:05:25.261964Z","iopub.status.idle":"2022-02-16T13:05:28.845940Z","shell.execute_reply.started":"2022-02-16T13:05:25.261929Z","shell.execute_reply":"2022-02-16T13:05:28.845193Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"display_img(train_df.loc[train_df['species']=='melon_headed_whale']['image_dir'][:25], 5, 5, 'melon_headed_whale')","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:28.847308Z","iopub.execute_input":"2022-02-16T13:05:28.847754Z","iopub.status.idle":"2022-02-16T13:05:34.066869Z","shell.execute_reply.started":"2022-02-16T13:05:28.847719Z","shell.execute_reply":"2022-02-16T13:05:34.066092Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"top\"></a>\n<div class=\"list-group\" id=\"list-tab\" role=\"tablist\">\n<h3 class=\"list-group-item list-group-item-action active\" data-toggle=\"list\" style='color:white; background:skyblue; border:0' role=\"tab\" aria-controls=\"home\">\n<center>Prepare labeling and Transforms</center></h3>","metadata":{}},{"cell_type":"markdown","source":"# 7. Prepare labeling and Transforms","metadata":{}},{"cell_type":"code","source":"def prepare_labeling(y):\n    values = np.array(y)\n    label_encoder = LabelEncoder()\n    integer_encoded = label_encoder.fit_transform(values)\n    onehot_encoder = OneHotEncoder(sparse = False)\n    integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)\n    onehot_encoded = onehot_encoder.fit_transform(integer_encoded)\n    y = onehot_encoded\n    \n    return y, label_encoder\n\ntarget, label_encoder = prepare_labeling(train_df['individual_id'])\nunique_individual_ids = train_df['individual_id'].unique()\nNUM_classes = train_df['individual_id'].nunique()\n# train_df = train_df.drop('individual_id', axis = 1)","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:34.068322Z","iopub.execute_input":"2022-02-16T13:05:34.068580Z","iopub.status.idle":"2022-02-16T13:05:34.368242Z","shell.execute_reply.started":"2022-02-16T13:05:34.068548Z","shell.execute_reply":"2022-02-16T13:05:34.367494Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_transforms = transforms.Compose([transforms.ToPILImage(),\n                                       transforms.Resize((56,56)),\n                                       transforms.RandomHorizontalFlip(),\n                                       transforms.ToTensor(),\n                                       transforms.Normalize([0.5,0.5,0.5],\n                                                            [0.5,0.5,0.5])])","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:34.369642Z","iopub.execute_input":"2022-02-16T13:05:34.369904Z","iopub.status.idle":"2022-02-16T13:05:34.375696Z","shell.execute_reply.started":"2022-02-16T13:05:34.369870Z","shell.execute_reply":"2022-02-16T13:05:34.375006Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"top\"></a>\n<div class=\"list-group\" id=\"list-tab\" role=\"tablist\">\n<h3 class=\"list-group-item list-group-item-action active\" data-toggle=\"list\" style='color:white; background:skyblue; border:0' role=\"tab\" aria-controls=\"home\">\n<center>Load Dataset</center></h3>","metadata":{}},{"cell_type":"markdown","source":"# 8. Load Dataset","metadata":{}},{"cell_type":"code","source":"class CustomDataset(Dataset):\n    def __init__(self, root_dir, df, label_to_id, transform):\n        self.root_dir = root_dir\n        self.df = df\n        self.label_to_id = label_to_id\n        self.transform = transform\n    \n    def __len__(self):\n        return len(self.df)\n    \n    def __getitem__(self, index):\n        image_path = os.path.join(self.root_dir, self.df.iloc[index, 0])\n        image = cv2.imread(image_path, cv2.IMREAD_COLOR)\n        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n        \n        label = self.df.iloc[index, 2]\n        target = self.label_to_id[label]\n        \n        image = self.transform(image)\n        return image, torch.tensor(target)","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:34.378253Z","iopub.execute_input":"2022-02-16T13:05:34.378990Z","iopub.status.idle":"2022-02-16T13:05:34.386949Z","shell.execute_reply.started":"2022-02-16T13:05:34.378950Z","shell.execute_reply":"2022-02-16T13:05:34.386143Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label_to_id = {}\nid_to_label = {}\nidx = 0\nfor label in unique_individual_ids:\n    label_to_id[label] = idx\n    id_to_label[idx] = label\n    idx += 1","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:34.388056Z","iopub.execute_input":"2022-02-16T13:05:34.389755Z","iopub.status.idle":"2022-02-16T13:05:34.401396Z","shell.execute_reply.started":"2022-02-16T13:05:34.389717Z","shell.execute_reply":"2022-02-16T13:05:34.400727Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"root_dir = '../input/happy-whale-and-dolphin/train_images'\n\ndataset = CustomDataset(root_dir,\n                        train_df,\n                        label_to_id,\n                        train_transforms)\n\ntrain_loader = DataLoader(dataset, batch_size=8, shuffle=True)","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:34.402628Z","iopub.execute_input":"2022-02-16T13:05:34.403060Z","iopub.status.idle":"2022-02-16T13:05:34.410490Z","shell.execute_reply.started":"2022-02-16T13:05:34.403025Z","shell.execute_reply":"2022-02-16T13:05:34.409810Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"top\"></a>\n<div class=\"list-group\" id=\"list-tab\" role=\"tablist\">\n<h3 class=\"list-group-item list-group-item-action active\" data-toggle=\"list\" style='color:white; background:skyblue; border:0' role=\"tab\" aria-controls=\"home\">\n<center>Model</center></h3>","metadata":{}},{"cell_type":"markdown","source":"# 9. Model","metadata":{}},{"cell_type":"code","source":"model = vgg16(pretrained=True)\n\nmodel.classifier = nn.Sequential(\n    nn.Linear(25088, 4096),\n    nn.ReLU(),\n    nn.Dropout(),\n    nn.Linear(4096, len(label_to_id))\n)\n\nfor name, param in model.named_parameters():\n    if 'classifier' not in name:\n        param.requires_grad = False\n        \nimages, targets = next(iter(train_loader))\nimages.shape, targets.shape        ","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:34.411845Z","iopub.execute_input":"2022-02-16T13:05:34.412297Z","iopub.status.idle":"2022-02-16T13:05:37.932093Z","shell.execute_reply.started":"2022-02-16T13:05:34.412262Z","shell.execute_reply":"2022-02-16T13:05:37.931249Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# device = 'cuda' if torch.cuda.is_available() else 'cpu'\n# model.to(device)\n# EPOCHS = 3\n# criterion = nn.CrossEntropyLoss()\n# optimizer = torch.optim.Adam(model.parameters(), lr=0.0001)\n# last_train_loss = 0\n\n# for epoch in range(EPOCHS):\n#     print(f'Epoch: {epoch+1}/{EPOCHS}')\n    \n#     correct = 0\n#     total = 0\n#     losses = []\n    \n#     for batch_idx, data in enumerate(tqdm(train_loader)):\n#         images, targets = data\n#         images = images.to(device)\n#         targets = targets.to(device)\n        \n#         output = model(images)  # (batch_size, num_classes)\n        \n#         loss = criterion(output, targets)\n        \n#         optimizer.zero_grad()\n#         loss.backward()\n#         optimizer.step()\n        \n#         _, pred = torch.max(output, 1)\n#         correct += (pred == targets).sum().item()\n#         total += pred.size(0)\n        \n#         losses.append(loss.item())\n        \n#     train_loss = np.mean(losses)\n#     train_acc = correct * 1.0 / total\n    \n#     last_train_loss = train_loss\n#     print(f'Train Loss: {train_loss}\\tTrain Acc: {train_acc}')\n    \n# torch.save({\n#     'epoch': EPOCHS,\n#     'model_state_dict': model.state_dict(),\n#     'optimizer_state_dict': optimizer.state_dict(),\n#     'loss': last_train_loss\n# }, 'last_checkpoint.pth.tar')    ","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:37.933288Z","iopub.execute_input":"2022-02-16T13:05:37.933571Z","iopub.status.idle":"2022-02-16T13:05:37.938389Z","shell.execute_reply.started":"2022-02-16T13:05:37.933531Z","shell.execute_reply":"2022-02-16T13:05:37.937598Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# torch.save({\n#     'epoch': EPOCHS,\n#     'model_state_dict': model.state_dict(),\n#     'optimizer_state_dict': optimizer.state_dict(),\n#     'loss': last_train_loss\n# }, 'last_checkpoint.pth.tar')","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:37.939832Z","iopub.execute_input":"2022-02-16T13:05:37.940222Z","iopub.status.idle":"2022-02-16T13:05:37.948366Z","shell.execute_reply.started":"2022-02-16T13:05:37.940185Z","shell.execute_reply":"2022-02-16T13:05:37.947652Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"top\"></a>\n<div class=\"list-group\" id=\"list-tab\" role=\"tablist\">\n<h3 class=\"list-group-item list-group-item-action active\" data-toggle=\"list\" style='color:white; background:skyblue; border:0' role=\"tab\" aria-controls=\"home\">\n<center>Conclusion and Submission</center></h3>","metadata":{}},{"cell_type":"markdown","source":"# 10. Conclusion and Submission\n<br>\nIt's take lot of time. I hope turn on gpu.","metadata":{}},{"cell_type":"code","source":"# sample_df = pd.read_csv('../input/happy-whale-and-dolphin/sample_submission.csv')\n# sample_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:37.950727Z","iopub.execute_input":"2022-02-16T13:05:37.951011Z","iopub.status.idle":"2022-02-16T13:05:37.959619Z","shell.execute_reply.started":"2022-02-16T13:05:37.950972Z","shell.execute_reply":"2022-02-16T13:05:37.958775Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# test_transforms = transforms.Compose([transforms.ToPILImage(),\n#                                      transforms.Resize(56),\n#                                      transforms.ToTensor(),\n#                                      transforms.Normalize([0.5,0.5,0.5],\n#                                                           [0.5,0.5,0.5])])","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:37.960723Z","iopub.execute_input":"2022-02-16T13:05:37.961419Z","iopub.status.idle":"2022-02-16T13:05:37.967668Z","shell.execute_reply.started":"2022-02-16T13:05:37.961382Z","shell.execute_reply":"2022-02-16T13:05:37.966941Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# test_img_dir = '../input/happy-whale-and-dolphin/test_images'\n\n# res = []\n\n# for i in tqdm(range(sample_df.shape[0])):\n#     image_path = os.path.join(test_img_dir, sample_df.iloc[i,0])\n#     image = cv2.imread(image_path, cv2.IMREAD_COLOR)\n#     image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n    \n#     image = test_transforms(image)\n#     image = image.unsqueeze(0)\n\n#     output = model(image.to(device))\n#     _, tk = torch.topk(output, 5, dim=1)\n#     pred = []\n#     for j in range(len(tk[0])):\n#         pred.append(id_to_label[tk[0][j].item()])\n#     pred = ' '.join(pred)\n    \n#     sample_df.iloc[i, 1] = pred\n    \n# sample_df.to_csv('submission.csv', index=False)    ","metadata":{"execution":{"iopub.status.busy":"2022-02-16T13:05:37.969166Z","iopub.execute_input":"2022-02-16T13:05:37.969699Z","iopub.status.idle":"2022-02-16T13:05:37.976926Z","shell.execute_reply.started":"2022-02-16T13:05:37.969660Z","shell.execute_reply":"2022-02-16T13:05:37.976137Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 11. Reference Link\n- https://www.kaggle.com/palash97/happywhale-pytorch-vgg16-starter\n- https://www.kaggle.com/ruchi798/and-identification-eda-augmentation","metadata":{}},{"cell_type":"markdown","source":"# 12. Don't Forget Upvote!","metadata":{}}]}