{"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\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":"2023-03-09T02:05:30.607186Z","iopub.execute_input":"2023-03-09T02:05:30.607592Z","iopub.status.idle":"2023-03-09T02:05:35.058377Z","shell.execute_reply.started":"2023-03-09T02:05:30.607504Z","shell.execute_reply":"2023-03-09T02:05:35.057454Z"},"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":"2023-03-09T02:05:40.824432Z","iopub.execute_input":"2023-03-09T02:05:40.825161Z","iopub.status.idle":"2023-03-09T02:05:40.947555Z","shell.execute_reply.started":"2023-03-09T02:05:40.825125Z","shell.execute_reply":"2023-03-09T02:05:40.946873Z"},"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":"2023-03-09T02:05:45.499856Z","iopub.execute_input":"2023-03-09T02:05:45.500122Z","iopub.status.idle":"2023-03-09T02:05:45.562858Z","shell.execute_reply.started":"2023-03-09T02:05:45.500092Z","shell.execute_reply":"2023-03-09T02:05:45.562093Z"},"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":"2023-03-09T02:05:56.852659Z","iopub.execute_input":"2023-03-09T02:05:56.852911Z","iopub.status.idle":"2023-03-09T02:05:57.192264Z","shell.execute_reply.started":"2023-03-09T02:05:56.852882Z","shell.execute_reply":"2023-03-09T02:05:57.191455Z"},"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":"2023-03-09T02:08:28.158016Z","iopub.execute_input":"2023-03-09T02:08:28.158318Z","iopub.status.idle":"2023-03-09T02:08:28.533855Z","shell.execute_reply.started":"2023-03-09T02:08:28.158284Z","shell.execute_reply":"2023-03-09T02:08:28.533151Z"},"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":"2023-03-09T02:08:31.67801Z","iopub.execute_input":"2023-03-09T02:08:31.678266Z","iopub.status.idle":"2023-03-09T02:08:31.81986Z","shell.execute_reply.started":"2023-03-09T02:08:31.678236Z","shell.execute_reply":"2023-03-09T02:08:31.819131Z"},"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":"2023-03-09T02:08:35.222968Z","iopub.execute_input":"2023-03-09T02:08:35.223253Z","iopub.status.idle":"2023-03-09T02:08:35.2367Z","shell.execute_reply.started":"2023-03-09T02:08:35.22322Z","shell.execute_reply":"2023-03-09T02:08:35.235732Z"},"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":"2023-03-09T02:08:44.724614Z","iopub.execute_input":"2023-03-09T02:08:44.725191Z","iopub.status.idle":"2023-03-09T02:08:44.997179Z","shell.execute_reply.started":"2023-03-09T02:08:44.725155Z","shell.execute_reply":"2023-03-09T02:08:44.996513Z"},"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":"2023-03-09T02:08:48.502322Z","iopub.execute_input":"2023-03-09T02:08:48.50289Z","iopub.status.idle":"2023-03-09T02:10:14.110149Z","shell.execute_reply.started":"2023-03-09T02:08:48.502852Z","shell.execute_reply":"2023-03-09T02:10:14.109173Z"},"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":"2023-03-08T13:24:47.708773Z","iopub.execute_input":"2023-03-08T13:24:47.7094Z","iopub.status.idle":"2023-03-08T13:24:47.715522Z","shell.execute_reply.started":"2023-03-08T13:24:47.709359Z","shell.execute_reply":"2023-03-08T13:24:47.714585Z"},"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":"2023-03-08T13:24:55.751176Z","iopub.execute_input":"2023-03-08T13:24:55.751466Z","iopub.status.idle":"2023-03-08T13:25:10.388267Z","shell.execute_reply.started":"2023-03-08T13:24:55.751434Z","shell.execute_reply":"2023-03-08T13:25:10.387043Z"},"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":"2023-03-08T13:25:16.673764Z","iopub.execute_input":"2023-03-08T13:25:16.674041Z","iopub.status.idle":"2023-03-08T13:25:27.713694Z","shell.execute_reply.started":"2023-03-08T13:25:16.67401Z","shell.execute_reply":"2023-03-08T13:25:27.713078Z"},"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":"2023-03-08T13:25:34.063764Z","iopub.execute_input":"2023-03-08T13:25:34.06438Z","iopub.status.idle":"2023-03-08T13:25:40.471925Z","shell.execute_reply.started":"2023-03-08T13:25:34.064342Z","shell.execute_reply":"2023-03-08T13:25:40.470887Z"},"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":"2023-03-07T07:09:33.084405Z","iopub.status.idle":"2023-03-07T07:09:33.08486Z","shell.execute_reply.started":"2023-03-07T07:09:33.084614Z","shell.execute_reply":"2023-03-07T07:09:33.084637Z"},"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":"2023-03-07T07:09:33.086326Z","iopub.status.idle":"2023-03-07T07:09:33.086767Z","shell.execute_reply.started":"2023-03-07T07:09:33.086519Z","shell.execute_reply":"2023-03-07T07:09:33.086558Z"},"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":"train_df","metadata":{"execution":{"iopub.status.busy":"2023-03-09T02:13:51.28445Z","iopub.execute_input":"2023-03-09T02:13:51.285159Z","iopub.status.idle":"2023-03-09T02:13:51.30707Z","shell.execute_reply.started":"2023-03-09T02:13:51.285106Z","shell.execute_reply":"2023-03-09T02:13:51.306388Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df2 = train_df.copy()\ntrain_df2.loc[train_df2['class'] == 'dolphin', 'class'] = 1\ntrain_df2.loc[train_df2['class'] == 'whale', 'class'] = 0\n# 定义一个字典将species映射为数字\nspecies_map = {'melon_headed_whale':0, 'humpback_whale':1, 'false_killer_whale':2,\n       'bottlenose_dolphin':3, 'beluga':4, 'minke_whale':5, 'fin_whale':6,\n       'blue_whale':7, 'gray_whale':8, 'southern_right_whale':9,\n       'common_dolphin':10, 'kiler_whale':11, 'pilot_whale':12, 'dusky_dolphin':13,\n       'killer_whale':14, 'long_finned_pilot_whale':15, 'sei_whale':16,\n       'spinner_dolphin':17, 'bottlenose_dolpin':18, 'cuviers_beaked_whale':19,\n       'spotted_dolphin':20, 'globis':21, 'brydes_whale':22, 'commersons_dolphin':23,\n       'white_sided_dolphin':24, 'short_finned_pilot_whale':25,\n       'rough_toothed_dolphin':26, 'pantropic_spotted_dolphin':27,\n       'pygmy_killer_whale':28, 'frasiers_dolphin':29}\n\n# 将species映射为数字\ntrain_df2['species'] = train_df2['species'].map(species_map)\n\n# 保存修改后的数据表格\ntrain_df2.to_csv('train_df2.csv', index=False)\ntrain_df2","metadata":{"execution":{"iopub.status.busy":"2023-03-09T02:14:02.844239Z","iopub.execute_input":"2023-03-09T02:14:02.844522Z","iopub.status.idle":"2023-03-09T02:14:03.01559Z","shell.execute_reply.started":"2023-03-09T02:14:02.844484Z","shell.execute_reply":"2023-03-09T02:14:03.014754Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 划分\nfrom sklearn.model_selection import train_test_split\n\n# 根据species列分组，然后将每个分组分别划分为训练集、验证集和测试集\ntrain_data, test_data = train_test_split(train_df2, test_size=0.2, random_state=42, stratify=train_df2['species'])\ntrain_data, val_data = train_test_split(train_data, test_size=0.2, random_state=42, stratify=train_data['species'])\n\n# 输出各个数据集的大小\nprint(\"训练集大小：\", len(train_data))\nprint(\"验证集大小：\", len(val_data))\nprint(\"测试集大小：\", len(test_data))","metadata":{"execution":{"iopub.status.busy":"2023-03-09T02:15:14.498352Z","iopub.execute_input":"2023-03-09T02:15:14.498986Z","iopub.status.idle":"2023-03-09T02:15:14.563989Z","shell.execute_reply.started":"2023-03-09T02:15:14.498944Z","shell.execute_reply":"2023-03-09T02:15:14.563164Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (20, 10))\nsns.kdeplot(np.log(train_data.loc[train_data['class'] == 0]['individual_id'].value_counts()))\nsns.kdeplot(np.log(train_data.loc[train_data['class'] == 1]['individual_id'].value_counts()))\nplt.legend(labels = ['whale', 'dolphin'])\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-03-09T02:16:23.653719Z","iopub.execute_input":"2023-03-09T02:16:23.654462Z","iopub.status.idle":"2023-03-09T02:16:24.012907Z","shell.execute_reply.started":"2023-03-09T02:16:23.654423Z","shell.execute_reply":"2023-03-09T02:16:24.011842Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig, ax  = plt.subplots(figsize=(16, 8))\nfig.suptitle('Train Whales and Dolphins ', size = 20, font=\"Serif\")\nexplode = (0.05, 0.05)\nlabels = list(train_data['class'].value_counts().index)\nsizes = train_data['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":"2023-03-09T02:16:53.782852Z","iopub.execute_input":"2023-03-09T02:16:53.783133Z","iopub.status.idle":"2023-03-09T02:16:53.908994Z","shell.execute_reply.started":"2023-03-09T02:16:53.783103Z","shell.execute_reply":"2023-03-09T02:16:53.907991Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (20, 10))\nsns.kdeplot(np.log(test_data.loc[test_data['class'] == 0]['individual_id'].value_counts()))\nsns.kdeplot(np.log(test_data.loc[test_data['class'] == 1]['individual_id'].value_counts()))\nplt.legend(labels = ['whale', 'dolphin'])\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-03-09T02:17:29.805103Z","iopub.execute_input":"2023-03-09T02:17:29.805376Z","iopub.status.idle":"2023-03-09T02:17:30.243305Z","shell.execute_reply.started":"2023-03-09T02:17:29.805344Z","shell.execute_reply":"2023-03-09T02:17:30.242452Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig, ax  = plt.subplots(figsize=(16, 8))\nfig.suptitle('Test Whales and Dolphins ', size = 20, font=\"Serif\")\nexplode = (0.05, 0.05)\nlabels = list(test_data['class'].value_counts().index)\nsizes = test_data['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":"2023-03-09T02:17:50.248722Z","iopub.execute_input":"2023-03-09T02:17:50.24945Z","iopub.status.idle":"2023-03-09T02:17:50.380384Z","shell.execute_reply.started":"2023-03-09T02:17:50.249412Z","shell.execute_reply":"2023-03-09T02:17:50.379507Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"target_size = 16","metadata":{"execution":{"iopub.status.busy":"2023-03-08T17:20:13.456743Z","iopub.execute_input":"2023-03-08T17:20:13.456999Z","iopub.status.idle":"2023-03-08T17:20:13.462556Z","shell.execute_reply.started":"2023-03-08T17:20:13.45697Z","shell.execute_reply":"2023-03-08T17:20:13.46176Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_transforms = transforms.Compose([transforms.ToPILImage(),\n                                       transforms.Resize((32,32)),\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":"2023-03-09T02:18:14.587654Z","iopub.execute_input":"2023-03-09T02:18:14.587921Z","iopub.status.idle":"2023-03-09T02:18:14.592998Z","shell.execute_reply.started":"2023-03-09T02:18:14.587891Z","shell.execute_reply":"2023-03-09T02:18:14.592316Z"},"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 MyDataset(Dataset):\n    def __init__(self, df, transform):\n        self.df = df\n        self.transform = transform\n    \n    def __len__(self):\n        return len(self.df)\n    \n    def __getitem__(self, index):\n        image_path = self.df.iloc[index, 4]\n        image = cv2.imread(image_path, cv2.IMREAD_COLOR)\n        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n        \n        label = self.df.iloc[index, 3]\n        \n        image = self.transform(image)\n        return image, torch.tensor(label)","metadata":{"execution":{"iopub.status.busy":"2023-03-09T02:18:32.073318Z","iopub.execute_input":"2023-03-09T02:18:32.073597Z","iopub.status.idle":"2023-03-09T02:18:32.079429Z","shell.execute_reply.started":"2023-03-09T02:18:32.073565Z","shell.execute_reply":"2023-03-09T02:18:32.078675Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dataset = MyDataset(train_data,train_transforms)\n\ntrain_loader = DataLoader(dataset, batch_size=16, shuffle=True)\n","metadata":{"execution":{"iopub.status.busy":"2023-03-09T02:31:23.155517Z","iopub.execute_input":"2023-03-09T02:31:23.155801Z","iopub.status.idle":"2023-03-09T02:31:23.160174Z","shell.execute_reply.started":"2023-03-09T02:31:23.155771Z","shell.execute_reply":"2023-03-09T02:31:23.159251Z"},"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":"code","source":"class VGG16(nn.Module):\n    def __init__(self):\n        super(VGG16, self).__init__()\n        self.layer1 = nn.Sequential(\n            nn.Conv2d(3, 64, 3, 1, 1),\n            nn.BatchNorm2d(64),\n            nn.ReLU(),\n            nn.Conv2d(64, 64, 3, 1, 1),\n            nn.BatchNorm2d(64),\n            nn.ReLU(),\n            nn.MaxPool2d(2, 2)\n        )\n        self.layer2 = nn.Sequential(\n            nn.Conv2d(64, 128, 3, 1, 1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(),\n            nn.Conv2d(128, 128, 3, 1, 1),\n            nn.BatchNorm2d(128),\n            nn.ReLU(),\n            nn.MaxPool2d(2, 2)\n        )\n        self.layer3 = nn.Sequential(\n            nn.Conv2d(128, 256, 3, 1, 1),\n            nn.BatchNorm2d(256),\n            nn.ReLU(),\n            nn.Conv2d(256, 256, 3, 1, 1),\n            nn.BatchNorm2d(256),\n            nn.ReLU(),\n            nn.Conv2d(256, 256, 3, 1, 1),\n            nn.BatchNorm2d(256),\n            nn.ReLU(),\n            nn.MaxPool2d(2, 2)\n        )\n        self.layer4 = nn.Sequential(\n            nn.Conv2d(256, 512, 3, 1, 1),\n            nn.BatchNorm2d(512),\n            nn.ReLU(),\n            nn.Conv2d(512, 512, 3, 1, 1),\n            nn.BatchNorm2d(512),\n            nn.ReLU(),\n            nn.Conv2d(512, 512, 3, 1, 1),\n            nn.BatchNorm2d(512),\n            nn.ReLU(),\n            nn.MaxPool2d(2, 2)\n        )\n        self.layer5 = nn.Sequential(\n            nn.Conv2d(512, 512, 3, 1, 1),\n            nn.BatchNorm2d(512),\n            nn.ReLU(),\n            nn.Conv2d(512, 512, 3, 1, 1),\n            nn.BatchNorm2d(512),\n            nn.ReLU(),\n            nn.Conv2d(512, 512, 3, 1, 1),\n            nn.BatchNorm2d(512),\n            nn.ReLU(),\n            nn.MaxPool2d(2, 2)\n        )\n        self.fc1 = nn.Sequential(\n            nn.Flatten(),\n            nn.Linear(512, 512),\n            nn.ReLU(),\n            nn.Dropout()\n        )\n        self.fc2 = nn.Sequential(\n            nn.Linear(512, 256),\n            nn.ReLU(),\n            nn.Dropout()\n        )\n        self.fc3 = nn.Linear(256, 2)\n        \n \n    def forward(self, x):\n        x = self.layer1(x)\n        x = self.layer2(x)\n        x = self.layer3(x)\n        x = self.layer4(x)\n        x = self.layer5(x)\n        x = self.fc1(x)\n        x = self.fc2(x)\n        x = self.fc3(x)\n \n        return x","metadata":{"execution":{"iopub.status.busy":"2023-03-09T02:31:24.936393Z","iopub.execute_input":"2023-03-09T02:31:24.93692Z","iopub.status.idle":"2023-03-09T02:31:24.955396Z","shell.execute_reply.started":"2023-03-09T02:31:24.936884Z","shell.execute_reply":"2023-03-09T02:31:24.954699Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"vgg16 = VGG16().cuda() ","metadata":{"execution":{"iopub.status.busy":"2023-03-09T02:31:29.479845Z","iopub.execute_input":"2023-03-09T02:31:29.480101Z","iopub.status.idle":"2023-03-09T02:31:29.617173Z","shell.execute_reply.started":"2023-03-09T02:31:29.480071Z","shell.execute_reply":"2023-03-09T02:31:29.616511Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"epoch = 50\ntrain_step = 0\ntest_step = 0\n \nloss_fn = nn.CrossEntropyLoss().cuda()  \n \nlearning_rate = 1e-2\n# optimizer = optim.SGD(vgg16.parameters(), lr=learning_rate, momentum=0.9)\noptimizer = optim.Adam(vgg16.parameters(), lr=learning_rate)\n \nlosses = []  # 用于存储损失值，便于后面画损失变化曲线图","metadata":{"execution":{"iopub.status.busy":"2023-03-09T02:31:31.490164Z","iopub.execute_input":"2023-03-09T02:31:31.490449Z","iopub.status.idle":"2023-03-09T02:31:31.496655Z","shell.execute_reply.started":"2023-03-09T02:31:31.490416Z","shell.execute_reply":"2023-03-09T02:31:31.495849Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#  for i, (inputs, labels) in enumerate(train_loader):\n\n#         print(\"epoch：\", epoch, \"的第\", i, \"个inputs length{}, list中第0个shape{}\".format(\n#             len(inputs), inputs[0].shape))","metadata":{"execution":{"iopub.status.busy":"2023-03-08T17:26:40.614686Z","iopub.execute_input":"2023-03-08T17:26:40.615383Z","iopub.status.idle":"2023-03-08T17:26:52.179805Z","shell.execute_reply.started":"2023-03-08T17:26:40.615345Z","shell.execute_reply":"2023-03-08T17:26:52.178446Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\ndevice","metadata":{"execution":{"iopub.status.busy":"2023-03-09T02:31:34.434301Z","iopub.execute_input":"2023-03-09T02:31:34.434576Z","iopub.status.idle":"2023-03-09T02:31:34.440549Z","shell.execute_reply.started":"2023-03-09T02:31:34.434546Z","shell.execute_reply":"2023-03-09T02:31:34.439523Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(epoch):\n    print('-----epoch{}-----'.format(i))\n \n    # 训练步骤开始\n    vgg16.train()\n    for data in train_loader:\n        images, targets = data\n        images = images.cuda()\n        targets = targets.cuda()\n        output = vgg16(images)\n        loss = loss_fn(output, targets)\n \n        # 优化器优化模型\n        optimizer.zero_grad()\n        loss.backward()\n        optimizer.step()\n        train_step += 1\n        if train_step % 50 == 0:\n            print('train_step:{},loss:{}'.format(train_step, loss.item()))\n            losses.append(loss.item())\n \n    # 测试步骤开始\n    vgg16.eval()\n    accuracy = 0\n    with torch.no_grad():\n        for data in train_loader:\n            images, targets = data\n            images = images.cuda()\n            targets = targets.cuda()\n            output = vgg16(images)\n            current_acc = (output.argmax(1) == targets).sum()\n            accuracy += current_acc\n \n    acc = accuracy / test_data_size\n    print('-------eval accuracy:{}'.format(acc))\n ","metadata":{"execution":{"iopub.status.busy":"2023-03-09T02:31:36.529386Z","iopub.execute_input":"2023-03-09T02:31:36.529687Z","iopub.status.idle":"2023-03-09T02:39:06.425481Z","shell.execute_reply.started":"2023-03-09T02:31:36.529657Z","shell.execute_reply":"2023-03-09T02:39:06.424053Z"},"trusted":true},"execution_count":null,"outputs":[]}]}