Files
deeplearn-torch/Chapter_13.ipynb

3510 lines
2.0 MiB
Plaintext
Raw Permalink Normal View History

2026-01-14 15:19:22 +08:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:30:11.016992Z",
"start_time": "2021-04-11T19:30:09.745993Z"
},
"tags": [
"remove_cell"
]
},
"outputs": [],
"source": [
"import torch\n",
"import torch.nn as nn\n",
"import torch.nn.functional as F\n",
"import torchvision \n",
"import math\n",
"from torch.nn.utils.rnn import pack_padded_sequence, pad_packed_sequence\n",
"from torchvision import transforms\n",
"\n",
"from torch.utils.data import Dataset, DataLoader\n",
"\n",
"from tqdm.autonotebook import tqdm\n",
"\n",
"from idlmam import set_seed\n",
"\n",
"import numpy as np\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.pyplot import imshow\n",
"\n",
"import pandas as pd\n",
"\n",
"from sklearn.metrics import accuracy_score\n",
"\n",
"import time\n",
"\n",
"from idlmam import LastTimeStep, train_network, Flatten, weight_reset, View, LambdaLayer\n",
"from idlmam import AttentionAvg, GeneralScore, DotScore, AdditiveAttentionScore, getMaskByFill\n",
"\n",
"import os"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:30:11.022967Z",
"start_time": "2021-04-11T19:30:11.018856Z"
},
"tags": [
"remove_cell"
]
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"from IPython.display import set_matplotlib_formats\n",
"set_matplotlib_formats('png', 'pdf')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:30:11.039548Z",
"start_time": "2021-04-11T19:30:11.024349Z"
},
"tags": [
"remove_cell"
]
},
"outputs": [],
"source": [
"device = torch.device(\"cuda\") if torch.cuda.is_available() else torch.device(\"cpu\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:30:11.044610Z",
"start_time": "2021-04-11T19:30:11.040656Z"
},
"tags": [
"remove_cell"
]
},
"outputs": [],
"source": [
"torch.backends.cudnn.deterministic=True\n",
"set_seed(42)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:30:11.056044Z",
"start_time": "2021-04-11T19:30:11.052147Z"
}
},
"outputs": [],
"source": [
"data_url_zip = \"https://download.microsoft.com/download/3/E/1/3E1C3F21-ECDB-4869-8368-6DEBA77B919F/kagglecatsanddogs_3367a.zip\"\n",
"from io import BytesIO\n",
"from zipfile import ZipFile\n",
"from urllib.request import urlopen\n",
"import re\n",
"\n",
"#Download this dataset if we have not already done so! \n",
"if not os.path.isdir('./data/PetImages'):\n",
" resp = urlopen(data_url_zip)\n",
" zipfile = ZipFile(BytesIO(resp.read()))\n",
" zipfile.extractall(path = './data')\n",
"\n",
"#This file is bad and will screw up the data loader! \n",
"bad_files = [\n",
" './data/PetImages/Dog/11702.jpg',\n",
" \"./data/PetImages/Cat/666.jpg\"\n",
"]\n",
"for f in bad_files:\n",
" if os.path.isfile(f):\n",
" os.remove(f)\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:30:11.061418Z",
"start_time": "2021-04-11T19:30:11.058018Z"
}
},
"outputs": [],
"source": [
"import warnings\n",
"warnings.filterwarnings(\"ignore\", \"(Possibly )?corrupt EXIF data\", UserWarning) #Don't bother us about these bad files, thank you."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:30:11.148671Z",
"start_time": "2021-04-11T19:30:11.063119Z"
}
},
"outputs": [],
"source": [
"all_images = torchvision.datasets.ImageFolder(\"./data/PetImages\", transform=transforms.Compose(\n",
" [\n",
" transforms.Resize(130), #The smallest of width/height will become 130 pixels. \n",
" transforms.CenterCrop(128), # Take the center 128 x 128 image\n",
" transforms.ToTensor(), #Convert to a PyTorch tensor\n",
" ]))\n",
"\n",
"train_size = int(len(all_images)*0.8) #Pick 80% for training \n",
"test_size = len(all_images)-train_size #20% remainder for testing\n",
"\n",
"train_data, test_data = torch.utils.data.random_split(all_images, (train_size, test_size)) #Create the random splits of the specified sizes"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:30:11.152869Z",
"start_time": "2021-04-11T19:30:11.150208Z"
}
},
"outputs": [],
"source": [
"B = 128\n",
"train_loader = DataLoader(train_data, batch_size=B, shuffle=True)\n",
"test_loader = DataLoader(test_data, batch_size=B)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:30:12.785385Z",
"start_time": "2021-04-11T19:30:11.154225Z"
}
},
"outputs": [
{
"data": {
"application/pdf": "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
"image/png": "iVBORw0KGgoAAAANSUhEUgAABIQAAAJHCAYAAADhfo0WAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOz9W+ht27onBv2+1nrv4/a/zOta+3JudYqqVOUhETGJWBQx9RBKwShYBBUVQYmKQaJ5sF7zEPBFjJGIFBgwKCgqeIFAEiSCSRBCNAhqVarOqVNVJ2ff1l5rzTn/lzFG7619PnyX9vU+xn+utfdee++55h7fWmOO/xijX1pvl+/ya9+FmBkXutCFLnShC13oQhe60IUudKELXehCF/rNofTrbsCFLnShC13oQhe60IUudKELXehCF7rQhX61dAGELnShC13oQhe60IUudKELXehCF7rQhX7D6AIIXehCF7rQhS50oQtd6EIXutCFLnShC/2G0QUQutCFLnShC13oQhe60IUudKELXehCF/oNowsgdKELXehCF7rQhS50oQtd6EIXutCFLvQbRhdA6EIXutCFLnShC13oQhe60IUudKELXeg3jC6A0IUudKELXehCF7rQhS50oQtd6EIXutBvGH24gBDRb4HoXwbRn4DoAKI/AtG/AKLnv+6mXehCF/oNogsvutCFLvTrJqK/AqL/KYj+7yB6CyIG0f/q192sC13oQr+BdNGLLnShj4qImX/dbTgloj8N4N8B8AmA/xOAvw7gHwbwjwH4GwD+Aph/+utr4IUudKHfCLrwogtd6EIfAhH9+wD+QQB3AP4YwJ8D8L8G83/519msC13oQr9hdNGLLnShj44+VA+h/xmE0fx3wfyfA/NfBfNfAvA/BvD3Afjnf62tu9CFLvSbQhdedKELXehDoP8egD8L4AbAf/vX3JYLXehCv7l00YsudKGPjD48DyGi3wfwBwD+CMCfBnMNv10D+AEAAvAJmO9/HU280IUu9BtAF150oQtd6EMkov8kgH8TFw+hC13oQr9KuuhFF7rQR0kfoofQX9L3f33GaACA+R2AfxvAFsB//Ffcrgtd6EK/WXThRRe60IUudKELXehCQhe96EIX+gjpQwSE/j59/w+e+P1v6vuf/RW05UIXutBvLl140YUudKELXehCF7qQ0EUvutCFPkL6EAGh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
"text/plain": [
"<Figure size 1440x720 with 8 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"f, axarr = plt.subplots(2,4, figsize=(20,10)) #Create a grid of 8 images (2 x 4)\n",
"for i in range(2): # Rows\n",
" for j in range(4): #Columns\n",
" x, y = test_data[i*4+j] # Grab an image from the test corpus\n",
" axarr[i,j].imshow(x.numpy().transpose(1,2,0)) #Plot the image \n",
" axarr[i,j].text(0.0, 0.5, str(round(y,2)), dict(size=20, color='red')) #Draw the label in the top left corner."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:30:12.961890Z",
"start_time": "2021-04-11T19:30:12.786876Z"
}
},
"outputs": [],
"source": [
"model = torchvision.models.resnet18()\n",
"#We are going to perfrom some \"surgery\"\n",
"model.fc = nn.Linear(model.fc.in_features, 2)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:45:50.625177Z",
"start_time": "2021-04-11T19:30:12.963123Z"
},
"tags": [
"remove_output"
]
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "9e707205c09a4d9c8b5fc1867243863f",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Epoch'), FloatProgress(value=0.0, max=10.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"loss = nn.CrossEntropyLoss()\n",
"normal_results = train_network(model, loss, train_loader, epochs=10, device=device, test_loader=test_loader, score_funcs={'Accuracy': accuracy_score})"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:45:50.826688Z",
"start_time": "2021-04-11T19:45:50.626402Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:xlabel='epoch', ylabel='test Accuracy'>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"application/pdf": "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
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sns.lineplot(x='epoch', y='test Accuracy', data=normal_results, label='Regular')"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:45:51.061693Z",
"start_time": "2021-04-11T19:45:50.828269Z"
}
},
"outputs": [],
"source": [
"model_pretrained = torchvision.models.resnet18(pretrained=True) # a model that has already been trained on some dataset\n",
"#We are going to perfrom some \"surgery\"\n",
"model_pretrained.fc = nn.Linear(model_pretrained.fc.in_features, 2)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:45:51.066097Z",
"start_time": "2021-04-11T19:45:51.063190Z"
}
},
"outputs": [],
"source": [
"filters_pretrained = model_pretrained.conv1.weight.data.cpu().numpy() #Grabbing the first convolutional filters weights, moving them to the CPU, and turning them into a numpy tensor"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:45:51.070853Z",
"start_time": "2021-04-11T19:45:51.067873Z"
}
},
"outputs": [],
"source": [
"#Normalize so that the min=0, and max=1\n",
"filters_pretrained = filters_pretrained-np.min(filters_pretrained) #shift so everything is in the range [0, Max value]\n",
"filters_pretrained = filters_pretrained/np.max(filters_pretrained) #Re-scale so everything is [0, 1]"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:45:51.074631Z",
"start_time": "2021-04-11T19:45:51.072302Z"
}
},
"outputs": [],
"source": [
"#The weights are shaped as (#Filters, C, W, H)\n",
"#matplotlib expects (W, H, C), so we will move the channel dimension \n",
"filters_pretrained = np.moveaxis(filters_pretrained, 1, -1)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:45:52.996116Z",
"start_time": "2021-04-11T19:45:51.076037Z"
},
"tags": [
"remove_output"
]
},
"outputs": [
{
"data": {
"application/pdf": "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
"image/png": "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
"text/plain": [
"<Figure size 720x720 with 64 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"i_max = int(round(np.sqrt(filters_pretrained.shape[0]))) #take sqrt(# items) to make a square grid of images\n",
"j_max = int(np.floor(filters_pretrained.shape[0]/float(i_max))) #divide by # of rows\n",
"f, axarr = plt.subplots(i_max,j_max, figsize=(10,10)) # make the grid to plot the images in\n",
"for i in range(i_max): #each row\n",
" for j in range(j_max): #each column\n",
" indx = i*j_max+j #index into the filters\n",
" axarr[i,j].imshow(filters_pretrained[indx,:]) #plot the specific filter\n",
" axarr[i,j].set_axis_off() # turn off the numbered axis to avoid clutter"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:45:53.001865Z",
"start_time": "2021-04-11T19:45:52.997439Z"
},
"tags": [
"remove_cell"
]
},
"outputs": [],
"source": [
"def visualizeFilters(conv_filters):\n",
" #Normalize so that the min=0, and max=1\n",
" conv_filters = conv_filters-np.min(conv_filters)\n",
" conv_filters = conv_filters/np.max(conv_filters)\n",
" #The weights are shaped as (#Filters, C, W, H)\n",
" #matplotlib expects (W, H, C), so we will move the channel dimension \n",
" conv_filters = np.moveaxis(conv_filters, 1, -1)\n",
" \n",
" i_max = int(round(np.sqrt(conv_filters.shape[0])))\n",
" j_max = int(np.floor(conv_filters.shape[0]/float(i_max)))\n",
" f, axarr = plt.subplots(i_max,j_max, figsize=(10,10))\n",
" for i in range(i_max):\n",
" for j in range(j_max):\n",
" indx = i*j_max+j\n",
" axarr[i,j].imshow(conv_filters[indx,:])\n",
" axarr[i,j].set_axis_off()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:45:54.859046Z",
"start_time": "2021-04-11T19:45:53.003049Z"
},
"scrolled": true,
"tags": [
"remove_output"
]
},
"outputs": [
{
"data": {
"application/pdf": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1BhZ2VzIDIgMCBSIC9UeXBlIC9DYXRhbG9nID4+CmVuZG9iago4IDAgb2JqCjw8IC9FeHRHU3RhdGUgNCAwIFIgL0ZvbnQgMyAwIFIgL1BhdHRlcm4gNSAwIFIKL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gL1NoYWRpbmcgNiAwIFIKL1hPYmplY3QgNyAwIFIgPj4KZW5kb2JqCjEwIDAgb2JqCjw8IC9Bbm5vdHMgWyBdIC9Db250ZW50cyA5IDAgUgovR3JvdXAgPDwgL0NTIC9EZXZpY2VSR0IgL1MgL1RyYW5zcGFyZW5jeSAvVHlwZSAvR3JvdXAgPj4KL01lZGlhQm94IFsgMCAwIDU3MC44NjgwODUxMDY0IDU1OCBdIC9QYXJlbnQgMiAwIFIgL1Jlc291cmNlcyA4IDAgUgovVHlwZSAvUGFnZSA+PgplbmRvYmoKOSAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDExIDAgUiA+PgpzdHJlYW0KeJytmctOG0EURPfzFf0F7X4/lkRIVpZkkw9AKAkKoAQp+f2M50KMx11Xo1EtLMs2OnXUNCUovHmcDjfefHs1zjzOj7/Gm6M53D78+XH/8OX4ydy/Tm5+/2nK1dlWmmt5fvnz48uc2/yGe3v+Pk3P0y9TbTCpB9urCz7UUkyutoVeWw0xXb74/WC+mmdzuAknET+L+FnEmePMmZmn/Pnpmnj/ZA6fvbl9MXfTnZkzm00xuRRyjrvTJ5CusBePcPbwqduynI13JZFFVPhiEs8mITjb5cPcC9lEhS8m6YPJ/KmPxS9f0NgmGnwxyWeTWKKN/z/limjsxaOcPebrZItcKN89WUSFLyb1bJJdti2+R5BNVPhi0j78BJ9+xkO0uaYkd5xTG5fIJbXD3tiZv604Bibe4erY5TKhs9DpIuNxe3BldLrIBFwgZBmVLjIRdgj3xqhwUUm4RrjnotNFJuMm4crodJEpl2USc7JeQlyKlDJZISW2ojbZK7CpTYYqDbbJPpetbTKU6bBNyDI6XX5Dc7BN2DIqXWQ8ahPyjVHhohJgm5DPRaeLTIRtQpbR6SKTLtsktGQrCN3ZJiukxGbUJnsFNrXJUKXANtnnsrVNhjIVtglZRqeLTINtwpZR6SLTUZuQb4wKl78+HWwT8rnodJHxsE3IMjpdZMKqTXy28a1wAmcfWSElNsI22SmwrU1GKgm3yS6XzW0yksm4TbgyOl1kCm4TsoxKF5kK24R7Y1S4qDTcJtxz0eki03GbcGV0umxr7rJNfMq2d59aP31zKW2yQkos3Fv3Cmxqk6EKnlz3uWxtk6EMXl3JMjpdZPDwypZR6SIDt1fyjVHhooLnV/K56HSRwQssWUani8xqhK3F5v42rnRKmVwSJRRusDvjN1XJQCTjBZZrosJFBe+vXBUVLip4fSWraHBRgdsr10RjiwheXrkmKlxU8O7KVVHhorJaXU8PSmfMDwmA+yol6ooooXhJZaQOkBKLN1NG7AAp/5nE6ygl9hopsXAHZaReEyUUL56M1AFSYvG2yYgdICX2vbOmfwZMHvgKZW5kc3RyZWFtCmVuZG9iagoxMSAwIG9iago3OTQKZW5kb2JqCjMgMCBvYmoKPDwgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9DQSAwIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KL0EyIDw8IC9DQSAxIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0kxIDEyIDAgUiAvSTEwIDIxIDAgUiAvSTExIDIyIDAgUiAvSTEyIDIzIDAgUiAvSTEzIDI0IDAgUiAvSTE0IDI1IDAgUgovSTE1IDI2IDAgUiAvSTE2IDI3IDAgUiAvSTE3IDI4IDAgUiAvSTE4IDI5IDAgUiAvSTE5IDMwIDAgUiAvSTIgMTMgMCBSCi9JMjAgMzEgMCBSIC9JMjEgMzIgMCBSIC9JMjIgMzMgMCBSIC9JMjMgMzQgMCBSIC9JMjQgMzUgMCBSIC9JMjUgMzYgMCBSCi9JMjYgMzcgMCBSIC9JMjcgMzggMCBSIC9JMjggMzkgMCBSIC9JMjkgNDAgMCBSIC9JMyAxNCAwIFIgL0kzMCA0MSAwIFIKL0kzMSA0MiAwIFIgL0kzMiA0MyAwIFIgL0kzMyA0NCAwIFIgL0kzNCA0NSAwIFIgL0kzNSA0NiAwIFIgL0kzNiA0NyAwIFIKL0kzNyA0OCAwIFIgL0kzOCA0OSAwIFIgL0kzOSA1MCAwIFIgL0k0IDE1IDAgUiAvSTQwIDUxIDAgUiAvSTQxIDUyIDAgUgovSTQyIDUzIDAgUiAvSTQzIDU0IDAgUiAvSTQ0IDU1IDAgUiAvSTQ1IDU2IDAgUiAvSTQ2IDU3IDAgUiAvSTQ3IDU4IDAgUgovSTQ4IDU5IDAgUiAvSTQ5IDYwIDAgUiAvSTUgMTYgMCBSIC9JNTAgNjEgMCBSIC9JNTEgNjIgMCBSIC9JNTIgNjMgMCBSCi9JNTMgNjQgMCBSIC9JNTQgNjUgMCBSIC9JNTUgNjYgMCBSIC9JNTYgNjcgMCBSIC9JNTcgNjggMCBSIC9JNTggNjkgMCBSCi9JNTkgNzAgMCBSIC9JNiAxNyAwIFIgL0k2MCA3MSAwIFIgL0k2MSA3MiAwIFIgL0k2MiA3MyAwIFIgL0k2MyA3NCAwIFIKL0k2NCA3NSAwIFIgL0k3IDE4IDAgUiAvSTggMTkgMCBSIC9JOSAyMCAwIFIgPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9CaXRzUGVyQ29tcG9uZW50IDggL0NvbG9yU3BhY2UgL0RldmljZVJHQgovRGVjb2RlUGFybXMgPDwgL0NvbG9ycyAzIC9Db2x1bW5zIDU4IC9QcmVkaWN0b3IgMTAgPj4gL0ZpbHRlciAvRmxhdGVEZWNvZGUKL0hlaWdodCA1OCAvTGVuZ3RoIDc2IDAgUiAvU3VidHlwZSAvSW1hZ2UgL1R5cGUgL1hPYmplY3QgL1dpZHRoIDU4ID4+CnN0cmVhbQp4nO2YsUrDUBSGz02CbaRaLNKuFRQbhS4ugg8giovia+kjCI6iu+AqiINol4jVdChYC6URGhIprbG+wH/GA71wvvG7HM7HHZIQc9k6I8T4exN6IloNMujbwx70B70T6J/KD9wKP61C73AD84nmSqK5kmiuJOb84gYelJqL3Ix7m0P/s1WEvuW70Mede27F3tsf9JbdruZKormSaK4kluV6I28KD9b6M25m1uhDb+Ia9PUMf7YvvSxwKz5NAr1lt6u5kmiuJJoriVcJY3gQfkXcTDZJoc83htC3E/x5vpw12K5CCWrLbldzJdFcSTRXEu/XMfCgPsWeiMLchz6L8PN1J76C/s495FZUdwPoLbtdzZVEcyXRXEm8zuADHhQD/NOAiJzCAPpm9wj61zL+lXG6P+ZWpM/XeDU3MJ9oriSaK4nmSmJZrldjHtVZ9M7NjJIJ9N0khH79GP8uWXnErw8iqpht6C27Xc2VRHMl0VxJ/gFIE1ANCmVuZHN0cmVhbQplbmRvYmoKNzYgMCBvYmoKMzczCmVuZG9iagoxMyAwIG9iago8PCAvQml0c1BlckNvbXBvbmVudCA4IC9Db2xvclNwYWNlIC9EZXZpY2VSR0IKL0RlY29kZVBhcm1zIDw8IC9Db2xvcnMgMyAvQ29sdW1ucyA1OCAvUHJlZGljdG9yIDEwID4+IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlCi9IZWlnaHQgNTggL0xlbmd0aCA3NyAwIFIgL1N1YnR5cGUgL0ltYWdlIC9UeXBlIC9YT2JqZWN0IC9XaWR0aCA1OCA+PgpzdHJlY
"image/png": "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
"text/plain": [
"<Figure size 720x720 with 64 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"filters_catdog = model.conv1.weight.data.cpu().numpy() #filters from the model we trained at the start of this chapter\n",
"visualizeFilters(filters_catdog) #plot the results"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:45:54.864708Z",
"start_time": "2021-04-11T19:45:54.860375Z"
}
},
"outputs": [],
"source": [
"class NormalizeInput(nn.Module):\n",
" def __init__(self, baseModel):\n",
" \"\"\"\n",
" baseModel: the original ResNet model that needs to have it's inputs pre-processed\n",
" \"\"\"\n",
" super(NormalizeInput, self).__init__()\n",
" self.baseModel = baseModel #The model that we want to use, but needs its input normalized first. \n",
" #The mean and standard deviation used for ImageNet normalization. We just have to accept these “magic” numbers that everyone uses. \n",
" self.mean = nn.Parameter(torch.tensor([0.485, 0.456, 0.406]).view(1,3,1,1), requires_grad=False) #Notice requires_grad=False, we don't want these to change during training!\n",
" self.std = nn.Parameter(torch.tensor([0.229, 0.224, 0.225]).view(1,3,1,1), requires_grad=False)\n",
" \n",
" def forward(self, input):\n",
" #Normalize the input, then feed it into the model we want to use\n",
" input = (input-self.mean)/self.std\n",
" return self.baseModel(input)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T19:45:54.870891Z",
"start_time": "2021-04-11T19:45:54.865798Z"
}
},
"outputs": [],
"source": [
"model_pretrained = NormalizeInput(model_pretrained)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:01:28.203482Z",
"start_time": "2021-04-11T19:45:54.871978Z"
},
"tags": [
"remove_output"
]
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "252397e5f22a4e5c80d562f35027a218",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Epoch'), FloatProgress(value=0.0, max=10.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"warmstart_results = train_network(model_pretrained, loss, train_loader, epochs=10, device=device, test_loader=test_loader, score_funcs={'Accuracy': accuracy_score})"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:01:28.442285Z",
"start_time": "2021-04-11T20:01:28.208148Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:xlabel='epoch', ylabel='test Accuracy'>"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"application/pdf": "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
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sns.lineplot(x='epoch', y='test Accuracy', data=normal_results, label='Regular')\n",
"sns.lineplot(x='epoch', y='test Accuracy', data=warmstart_results, label='Warm')"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:01:30.293313Z",
"start_time": "2021-04-11T20:01:28.444370Z"
}
},
"outputs": [
{
"data": {
"application/pdf": "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
"image/png": "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
"text/plain": [
"<Figure size 720x720 with 64 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"filters_catdog_finetuned = model_pretrained.baseModel.conv1.weight.data.cpu().numpy() #grab the filters after fine-tuning the warm started model\n",
"visualizeFilters(filters_catdog_finetuned) #Plot the filters, which will look very similar to the pre-trained model's initial filters"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:15:17.112899Z",
"start_time": "2021-04-11T20:01:30.294705Z"
},
"tags": [
"remove_output"
]
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "f7f2a0fb1a2c421db2ba7985f19aa9e8",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Epoch'), FloatProgress(value=0.0, max=10.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"model_frozen = torchvision.models.resnet18(pretrained=True)\n",
"#First, turn off gradient updating for all parameters!\n",
"for param in model_frozen.parameters():\n",
" param.requires_grad = False\n",
"#Our new FC layer has requires_grad = True by default!\n",
"model_frozen.fc = nn.Linear(model_frozen.fc.in_features, 2)\n",
"model_frozen = NormalizeInput(model_frozen)\n",
"frozen_transfer_results = train_network(model_frozen, loss, train_loader, epochs=10, device=device, test_loader=test_loader, score_funcs={'Accuracy': accuracy_score})"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:15:17.370790Z",
"start_time": "2021-04-11T20:15:17.114058Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:xlabel='epoch', ylabel='test Accuracy'>"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"application/pdf": "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
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sns.lineplot(x='epoch', y='test Accuracy', data=normal_results, label='Regular')\n",
"sns.lineplot(x='epoch', y='test Accuracy', data=warmstart_results, label='Warm Start')\n",
"sns.lineplot(x='epoch', y='test Accuracy', data=frozen_transfer_results, label='Frozen')"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:15:17.375034Z",
"start_time": "2021-04-11T20:15:17.371968Z"
}
},
"outputs": [],
"source": [
"train_data_small, _ = torch.utils.data.random_split(train_data, (B*2,len(train_data)-B*2)) #Make the small dataset = 2* the batch size\n",
"train_loader_small = DataLoader(train_data_small, batch_size=B, shuffle=True) #Make the loader for this tiny dataset"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:34:55.042026Z",
"start_time": "2021-04-11T20:15:17.376101Z"
},
"tags": [
"remove_output"
]
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4a766130b20c420590c167cc40ebd78a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Epoch'), FloatProgress(value=0.0, max=10.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "034d0561242d47e0b2740325d6b2cf00",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Epoch'), FloatProgress(value=0.0, max=10.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=2.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "cc923252ad5549dc8e29c6f3331483b5",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Epoch'), FloatProgress(value=0.0, max=10.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=157.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"#1) Training from scratch\n",
"model = torchvision.models.resnet18()\n",
"model.fc = nn.Linear(model.fc.in_features, 2)\n",
"\n",
"normal_small_results = train_network(model, loss, train_loader_small, epochs=10, device=device, test_loader=test_loader, score_funcs={'Accuracy': accuracy_score})\n",
"\n",
"#2) Now lets train the warm model\n",
"model = torchvision.models.resnet18(pretrained=True)\n",
"model.fc = nn.Linear(model.fc.in_features, 2) #We are going to perfrom some \"surgery\"\n",
"model = NormalizeInput(model)\n",
"\n",
"warmstart_small_results = train_network(model, loss, train_loader_small, epochs=10, device=device, test_loader=test_loader, score_funcs={'Accuracy': accuracy_score})\n",
"\n",
"#3) Training with frozen weights\n",
"model = torchvision.models.resnet18(pretrained=True)\n",
"#First, turn off gradient updating for all parameters!\n",
"for param in model.parameters():\n",
" param.requires_grad = False \n",
"#Ouew new FC layer has requires_grad = True by default!\n",
"model.fc = nn.Linear(model.fc.in_features, 2)\n",
"\n",
"model = NormalizeInput(model)\n",
"\n",
"frozen_transfer_small_results = train_network(model, loss, train_loader, epochs=10, device=device, test_loader=test_loader, score_funcs={'Accuracy': accuracy_score})"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:34:55.292408Z",
"start_time": "2021-04-11T20:34:55.045284Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:xlabel='epoch', ylabel='test Accuracy'>"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"application/pdf": "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
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sns.lineplot(x='epoch', y='test Accuracy', data=normal_small_results, label='Regular')\n",
"sns.lineplot(x='epoch', y='test Accuracy', data=warmstart_small_results, label='Warm Start')\n",
"sns.lineplot(x='epoch', y='test Accuracy', data=frozen_transfer_small_results, label='Frozen')"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:34:55.295514Z",
"start_time": "2021-04-11T20:34:55.293623Z"
},
"tags": [
"remove_cell"
]
},
"outputs": [],
"source": [
"# If you did not before, you'll need to install the `torchtext` and `sentencepiece` libraries. \n",
"# pip install torchtext \n",
"# pip install sentencepiece "
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:34:58.711996Z",
"start_time": "2021-04-11T20:34:55.296695Z"
},
"tags": [
"remove_cell"
]
},
"outputs": [],
"source": [
"import torchtext\n",
"from torchtext.datasets import AG_NEWS\n",
"\n",
"train_iter, test_iter = AG_NEWS(root='./data', split=('train', 'test'))\n",
"train_dataset_text = list(train_iter)\n",
"test_dataset_text = list(test_iter)\n",
"\n",
"from torchtext.data.utils import get_tokenizer#tokenizers break strings like \"this is a string\" into lists of tokens like ['this', 'is', 'a', 'string']\n",
"tokenizer = get_tokenizer('basic_english') #we will be fine with the default english style tokenizer\n",
"\n",
"from collections import Counter #how many lines in this dataset\n",
"from torchtext.vocab import Vocab #we need to create a vocabulary of all the words in the training set\n",
"\n",
"counter = Counter() \n",
"for (label, line) in train_dataset_text: #loop through the training data \n",
" counter.update(tokenizer(line)) #count the number of unique tokens we see and how often we see them (e.g., we will see \"the\" a lot, but \"sasquatch\" maybe once or not at all.)\n",
"vocab = Vocab(counter, min_freq=10, specials=('<unk>', '<BOS>', '<EOS>', '<PAD>')) #create a vocab object, removing any word that didn't occur at least 10 times, and add special vocab items for unkown, begining of sentance, end of sentance, and \"padding\"\n",
"\n",
"def text_transform(x): #string -> list of integers\n",
" return [vocab['<BOS>']] + [vocab[token] for token in tokenizer(x)] + [vocab['<EOS>']] #vocab acts like a dictionary, handls unkown tokens for us, and we can make it pre and post-pend with the start and end markers respectively.\n",
"\n",
"def label_transform(x): \n",
" return x-1 #labes are originally [1, 2, 3, 4] but we need them as [0, 1, 2, 3] \n",
"\n",
"VOCAB_SIZE = len(vocab)\n",
"NUN_CLASS = len(np.unique([z[0] for z in train_dataset_text]))\n",
"padding_idx = VOCAB_SIZE\n",
"VOCAB_SIZE += 1"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:34:58.715627Z",
"start_time": "2021-04-11T20:34:58.713460Z"
}
},
"outputs": [],
"source": [
"# import torchtext\n",
"# from torchtext.datasets import text_classification\n",
"\n",
"# train_dataset_text, test_dataset_text = text_classification.DATASETS['AG_NEWS'](root=\"./data/\", ngrams=1, vocab=None)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:34:58.727251Z",
"start_time": "2021-04-11T20:34:58.716801Z"
}
},
"outputs": [],
"source": [
"train_data_text_small, _ = torch.utils.data.random_split(train_dataset_text, (256,len(train_dataset_text)-256)) #Slice off a tiny dataset"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:34:58.733035Z",
"start_time": "2021-04-11T20:34:58.728618Z"
},
"tags": [
"remove_cell"
]
},
"outputs": [],
"source": [
"def pad_batch(batch):\n",
" \"\"\"\n",
" Pad items in the batch to the length of the longest item in the batch. \n",
" Also, re-order so that the values are returned (input, label)\n",
" \"\"\"\n",
" labels = [label_transform(z[0]) for z in batch]\n",
" texts = [torch.tensor(text_transform(z[1]), dtype=torch.int64) for z in batch]\n",
" \n",
" max_len = max([text.size(0) for text in texts])\n",
" \n",
" PAD = padding_idx\n",
" \n",
" texts = [F.pad(text, (0,max_len-text.size(0)), value=PAD) for text in texts]\n",
" \n",
" x, y = torch.stack(texts), torch.tensor(labels, dtype=torch.int64)\n",
" \n",
" return x, y"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:35:15.394871Z",
"start_time": "2021-04-11T20:34:58.734330Z"
},
"tags": [
"remove_output"
]
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e2bcd8665ea04a6c86ca4c70e498f8a2",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Epoch'), FloatProgress(value=0.0, max=10.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"embed_dim = 128\n",
"gru = nn.Sequential(\n",
" nn.Embedding(VOCAB_SIZE, embed_dim), #(B, T) -> (B, T, D)\n",
" nn.GRU(embed_dim, embed_dim, num_layers=3, batch_first=True, bidirectional=True), #(B, T, D) -> ( (B,T,D) , (S, B, D) )\n",
" LastTimeStep(rnn_layers=3, bidirectional=True), #We need to take the RNN output and reduce it to one item, (B, 2*D)\n",
" nn.Linear(embed_dim*2, NUN_CLASS), #(B, D) -> (B, classes)\n",
")\n",
"\n",
"#Create train & test loader using this collate_fn\n",
"train_text_loader = DataLoader(train_data_text_small, batch_size=32, shuffle=True, collate_fn=pad_batch)\n",
"test_text_loader = DataLoader(test_dataset_text, batch_size=32, collate_fn=pad_batch)\n",
"#Train our baseline GRU model\n",
"gru_results = train_network(gru, nn.CrossEntropyLoss(), train_text_loader, test_loader=test_text_loader, device=device, epochs=10, score_funcs={'Accuracy': accuracy_score})"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:35:15.397949Z",
"start_time": "2021-04-11T20:35:15.396090Z"
},
"tags": [
"remove_cell"
]
},
"outputs": [],
"source": [
"# pip install transformers"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:35:17.641746Z",
"start_time": "2021-04-11T20:35:15.399087Z"
}
},
"outputs": [],
"source": [
"from transformers import DistilBertTokenizer, DistilBertModel #Load the DistilBert classes\n",
"#initialize the tokenizer (converts strings-> input tensors) and the model (input tensorts -> output tensors)\n",
"tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased')\n",
"bert_model = DistilBertModel.from_pretrained('distilbert-base-uncased')"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:35:17.646606Z",
"start_time": "2021-04-11T20:35:17.642988Z"
}
},
"outputs": [],
"source": [
"def huggingface_batch(batch):\n",
" \"\"\"\n",
" Pad items in the batch to the length of the longest item in the batch. \n",
" Also, re-order so that the values are returned (input, label)\n",
" \"\"\"\n",
" labels = [label_transform(z[0]) for z in batch] #these first three lines are the same as before\n",
" texts = [z[1] for z in batch] #CHANGED: Don't use our old text_transform, just get the raw texts\n",
" \n",
" #New: Let huggingface encode a batch of strhings for us\n",
" texts = tokenizer.batch_encode_plus(texts, return_tensors='pt', padding=True)['input_ids']\n",
" \n",
" #Now back to old code, stack them up and return the tensors\n",
" x, y = texts, torch.tensor(labels, dtype=torch.int64)\n",
" return x, y\n",
"#This is normal too, just making our data loaders with this new collage_fn\n",
"train_text_bert_loader = DataLoader(train_data_text_small, batch_size=32, shuffle=True, collate_fn=huggingface_batch)\n",
"test_text_bert_loader = DataLoader(test_dataset_text, batch_size=32, collate_fn=huggingface_batch)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:38:30.199501Z",
"start_time": "2021-04-11T20:35:17.648025Z"
},
"tags": [
"remove_output"
]
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "2b7f3d1f889e427bab06592d6e64309a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Epoch'), FloatProgress(value=0.0, max=10.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Training'), FloatProgress(value=0.0, max=8.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(HTML(value='Testing'), FloatProgress(value=0.0, max=238.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"class BertBasedClassifier(nn.Module): #our new class for frozen training of BERT models\n",
"\n",
" def __init__(self, bert_model, classes):\n",
" \"\"\"\n",
" bert_model: the BERT based classification model to use as a forzen initial layer of the network\n",
" classes: the number of output neurons / target classes for this classifier. \n",
" \"\"\"\n",
" super(BertBasedClassifier, self).__init__()\n",
" self.bert_model = bert_model #We will get a tensort of (B, T, D) shape out from bert\n",
" #So we will define a few of our own layers to get from (B, T, D) -> a prediction of shape (B, classes)\n",
" self.attn = AttentionAvg(AdditiveAttentionScore(bert_model.config.dim)) #Attention to get down to (B, D) shape\n",
" self.fc1 = nn.Linear(bert_model.config.dim, bert_model.config.dim) #Do a little feature extraction\n",
" self.pred = nn.Linear(bert_model.config.dim, classes) #Make a prediction about the class\n",
" \n",
" \n",
" def forward(self, input):\n",
" #Input is (B, T)\n",
" mask = getMaskByFill(input)\n",
" #This \"with no_grad() does the freezing\"\n",
" with torch.no_grad():\n",
" #huggingface returns a tuple, so unpack it!\n",
" x = self.bert_model(input)[0] # (B, T, D)\n",
" cntxt = x.sum(dim=1)/(mask.sum(dim=1).unsqueeze(1)+1e-5) #Compute the average embedding\n",
" x = self.attn(x, cntxt, mask) #apply attention\n",
" x = F.relu(self.fc1(x)) #Make preditions and return \n",
" return self.pred(x)\n",
" \n",
"bertClassifier = BertBasedClassifier(bert_model, NUN_CLASS) #Build the classifier!\n",
"bert_results = train_network(bertClassifier, nn.CrossEntropyLoss(), train_text_bert_loader, test_loader=test_text_bert_loader, device=device, epochs=10, score_funcs={'Accuracy': accuracy_score})"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-11T20:38:30.424691Z",
"start_time": "2021-04-11T20:38:30.201580Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:xlabel='epoch', ylabel='test Accuracy'>"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"application/pdf": "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
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sns.lineplot(x='epoch', y='test Accuracy', data=gru_results, label='Regular-GRU')\n",
"sns.lineplot(x='epoch', y='test Accuracy', data=bert_results, label='Frozen-BERT')"
]
}
],
"metadata": {
"author": "Warm Starts Outside Transfer Learning",
"celltoolbar": "Tags",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.9"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
"autoclose": false,
"autocomplete": false,
"bibliofile": "library.bib",
"cite_by": "apalike",
"current_citInitial": 1,
"eqLabelWithNumbers": false,
"eqNumInitial": 1,
"hotkeys": {
"equation": "Ctrl-E",
"itemize": "Ctrl-I"
},
"labels_anchors": false,
"latex_user_defs": false,
"report_style_numbering": false,
"user_envs_cfg": false
},
"latex_metadata": {
"title": "Transfer Learning"
}
},
"nbformat": 4,
"nbformat_minor": 2
}