Skip to content

Instantly share code, notes, and snippets.

@danielpaz6
Created February 24, 2020 21:20
Show Gist options
  • Save danielpaz6/4d515ea342e87ecf15b5b73b8baf411e to your computer and use it in GitHub Desktop.
Save danielpaz6/4d515ea342e87ecf15b5b73b8baf411e to your computer and use it in GitHub Desktop.
NN_Optimization_Algorithms
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "LKKOH-18oy0b"
},
"source": [
"# Implementation and exploration of different optimization algorithms\n",
"\n",
"In this assignment we will explore and implement different optimization algorithms."
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "f7mw1_NDo1AI"
},
"outputs": [],
"source": [
"import torch\n",
"import torch.nn as nn\n",
"import torchvision\n",
"import torchvision.transforms as transforms\n",
"import torch.nn.functional as F\n",
"import math\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "FrSt4rcmf7Xo"
},
"source": [
"# Data Preparation\n",
"The output of torchvision datasets are PILImage images of range [0, 1].<br />\n",
"PILImage is created by the package Pillow, a python package for image processing.<br />\n",
"https://pillow.readthedocs.io/en/3.1.x/index.html"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 87
},
"colab_type": "code",
"id": "yorzCv1df8wN",
"outputId": "8f3113da-eeeb-44e5-a401-03785b0d6b41"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" 0%| | 0/170498071 [00:00<?, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ./data/cifar-10-python.tar.gz\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"170500096it [00:01, 87810305.40it/s] \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Extracting ./data/cifar-10-python.tar.gz to ./data\n",
"Files already downloaded and verified\n"
]
}
],
"source": [
"import torch\n",
"import torch.nn as nn\n",
"import torchvision\n",
"import torchvision.transforms as transforms\n",
"import torch.nn.functional as F\n",
"\n",
"# The output of torchvision datasets are PILImage images of range [0, 1].\n",
"# PILImage is created by the package Pillow, a python package for image processing.\n",
"# https://pillow.readthedocs.io/en/3.1.x/index.html\n",
"\n",
"# Filter the data, keep only planes and frogs.\n",
"class SubLoader(torchvision.datasets.CIFAR10):\n",
" def __init__(self, *args, exclude_list=[], **kwargs):\n",
" super(SubLoader, self).__init__(*args, **kwargs)\n",
"\n",
" if exclude_list == []:\n",
" return\n",
" \n",
" labels = np.array(self.targets)\n",
" exclude = np.array(exclude_list).reshape(1, -1)\n",
" mask = ~(labels.reshape(-1, 1) == exclude).any(axis=1)\n",
"\n",
" self.data = self.data[mask]\n",
" self.targets = labels[mask].tolist()\n",
"\n",
"\n",
"trainset = torchvision.datasets.CIFAR10(root='./data', train=True,\n",
" download=True, transform=transforms.ToTensor())\n",
"\n",
"testset = torchvision.datasets.CIFAR10(root='./data', train=False,\n",
" download=True, transform=transforms.ToTensor())\n",
"\n",
"classes = ('plane', 'car', 'bird', 'cat',\n",
" 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')\n",
"\n",
"trainset = list(filter(lambda x : x[1] == 0 or x[1] == 6, trainset))\n",
"testset = list(filter(lambda x : x[1] == 0 or x[1] == 6, testset))"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "Q25RcZvGc532"
},
"outputs": [],
"source": [
"# Use dataloaders for train and test\n",
"\n",
"trainloader = torch.utils.data.DataLoader(trainset, batch_size=32,\n",
" shuffle=True)\n",
"\n",
"testloader = torch.utils.data.DataLoader(testset, batch_size=32,\n",
" shuffle=False)"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "P8MK0EiGdIhm"
},
"outputs": [],
"source": [
"class CNN(nn.Module):\n",
"\n",
" def __init__(self):\n",
" super(CNN, self).__init__()\n",
" self.conv1 = nn.Conv2d(3, 6, 5)\n",
" self.conv2 = nn.Conv2d(6, 16, 5)\n",
" \n",
" # now a few fully connected layers\n",
" self.fc1 = nn.Linear(16 * 5 * 5, 120)\n",
" self.fc2 = nn.Linear(120, 84)\n",
" self.fc3 = nn.Linear(84, 10)\n",
"\n",
" def forward(self, x):\n",
" x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))\n",
" x = F.max_pool2d(F.relu(self.conv2(x)), 2)\n",
" x = x.view(-1, self.num_flat_features(x))\n",
" x = F.relu(self.fc1(x))\n",
" x = F.relu(self.fc2(x))\n",
" x = self.fc3(x)\n",
" return x\n",
"\n",
" def num_flat_features(self, x):\n",
" size = x.size()[1:] # all dimensions except the batch dimension\n",
" num_features = 1\n",
" for s in size:\n",
" num_features *= s\n",
" return num_features\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "5syoetUIf4ag"
},
"source": [
"# Standard Optimization Algorithms\n",
"\n",
"In this we will write a few optimization algorithms. All algorithms will be implemented in the same class, with a different procedure, using member variables to store infomation as needed. The parameters argument, given to the init function, is a dictionary of all parameters provided by calling your module's parameter() method."
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "Pc59lz8nfqBL"
},
"outputs": [],
"source": [
"import sys\n",
"\n",
"class MyOptimizer(torch.optim.Optimizer):\n",
"\n",
" def __init__(self, params, lr=0.001, momentum=0.9, delta=0.999):\n",
" defaults = dict(lr=lr, momentum=momentum, alpha=momentum, delta=delta)\n",
" self.adam_lr_buffer = []\n",
" super(MyOptimizer, self).__init__(params, defaults)\n",
"\n",
" def step_sgd(self):\n",
" '''Standard SGD'''\n",
" for group in self.param_groups:\n",
" lr = group['lr']\n",
"\n",
" for p in group['params']:\n",
" if p.grad is None:\n",
" continue\n",
" \n",
" d_p = p.grad.data\n",
" p.data.add_(-lr, d_p) # w = w - lr * dw\n",
" \n",
" def step_sgd_momentum(self):\n",
" '''Momentum'''\n",
" for group in self.param_groups:\n",
" momentum = group['momentum']\n",
" lr = group['lr']\n",
"\n",
" for p in group['params']:\n",
" if p.grad is None:\n",
" continue\n",
" \n",
" d_p = p.grad.data\n",
" if momentum != 0:\n",
" param_state = self.state[p]\n",
" if 'momentum_buffer' not in param_state:\n",
" param_state['momentum_buffer'] = torch.zeros_like(p.data)\n",
" \n",
" buf = param_state['momentum_buffer']\n",
" \n",
" buf.mul_(momentum).add_(d_p) # v = momentum * v + dw\n",
" d_p = buf\n",
"\n",
" p.data.add_(-lr, d_p) # w = w - lr * v\n",
" \n",
" def step_rmsprop(self):\n",
" '''RMSProp'''\n",
" for group in self.param_groups:\n",
" alpha = group['alpha']\n",
" lr = group['lr']\n",
" for p in group['params']:\n",
"\n",
" if p.grad is None:\n",
" continue\n",
" \n",
" param_state = self.state[p]\n",
" if 'rms_buffer' not in param_state:\n",
" param_state['rms_buffer'] = torch.zeros_like(p.data)\n",
" \n",
" square_avg = param_state['rms_buffer']\n",
"\n",
" # gi = alpha * gi + (1-alpha) * (dw)^2\n",
" square_avg.mul_(alpha).addcmul_(1-alpha, p.grad.data, p.grad.data)\n",
"\n",
" # square_avg won't change (sqrt returns new Tensor, and on that we'll do in-place add_ method)\n",
" # since we need that square_avg for the next iteration without the sqrt and the epsilon.\n",
"\n",
" avg = square_avg.sqrt().add_(1e-8) # sqrt(gi) + epsilon\n",
"\n",
" p.data.addcdiv_(-lr, p.grad.data, avg) # w = w - lr * grad / avg\n",
" \n",
" def step_adam(self):\n",
" '''ADAM'''\n",
" for group in self.param_groups:\n",
" beta1, beta2 = group['alpha'], group['delta']\n",
" lr = group['lr']\n",
" \n",
" max_lr = 0\n",
" min_lr = sys.maxsize\n",
" for p in group['params']:\n",
"\n",
" if p.grad is None:\n",
" continue\n",
"\n",
" param_state = self.state[p]\n",
" \n",
" if 'step' not in param_state:\n",
" param_state['step'] = 0\n",
" param_state['adam_exp_avg_buffer'] = torch.zeros_like(p.data)\n",
" param_state['adam_exp_avg_sq_buffer'] = torch.zeros_like(p.data)\n",
" \n",
" m = param_state['adam_exp_avg_buffer']\n",
" v = param_state['adam_exp_avg_sq_buffer']\n",
" \n",
" param_state['step'] += 1\n",
"\n",
"\n",
" m.mul_(beta1).add_(1-beta1, p.grad.data)\n",
" v.mul_(beta2).addcmul_(1-beta2, p.grad.data, p.grad.data)\n",
"\n",
" \n",
" # Bias correction, according to: <https://arxiv.org/pdf/1412.6980.pdf>\n",
" # The Mathematical development we made can be found here:\n",
" # https://drive.google.com/file/d/1xUYPigo2EIdyxTXwfhlIqpYcLEYsYPf_/view?usp=sharing\n",
" \n",
" m_bias_correction = 1 - beta1 ** param_state['step']\n",
" v_bias_correction = 1 - beta2 ** param_state['step']\n",
" new_scalar = -lr * math.sqrt(v_bias_correction) / m_bias_correction\n",
"\n",
" d = v.sqrt().add_(1e-8)\n",
"\n",
" p.data.addcdiv_(new_scalar, m, d)\n",
"\n",
" # For plotting\n",
"\n",
" v_hat = v.div(v_bias_correction)\n",
" lr_value = lr / (torch.sqrt(v_hat).add_(1e-8))\n",
"\n",
" tmp_max_lr = torch.max(lr_value).item()\n",
" tmp_min_lr = torch.min(lr_value).item()\n",
"\n",
" if tmp_max_lr > max_lr:\n",
" max_lr = tmp_max_lr\n",
"\n",
" if tmp_min_lr < min_lr:\n",
" min_lr = tmp_min_lr\n",
"\n",
" self.adam_lr_buffer.append((min_lr, max_lr))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "eGN9NIUrmOvj"
},
"source": [
"# Train and eval\n",
"In this part, we will train our network on the training set and eval on the eval set. This time, we'll use our own optimizer. we'll train the network 4 times, each time with a different optimizer. The final output is to plot the loss values on both, train and eval, for all 4 optimizers (all 8 curves on the same plot). Then, running each training for 100 epochs, report train loss every 200 batches, and test loss every epoch."
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"colab_type": "code",
"id": "ks52jW-GmOG7",
"outputId": "871f69b3-63d4-4730-b0a9-045c97309777"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SGD Train - [1, 200] loss: 2.229148\n",
"SGD Test - [1, 63] loss: 2.946099\n",
"SGD Train - [2, 200] loss: 1.267861\n",
"SGD Test - [2, 63] loss: 1.709008\n",
"SGD Train - [3, 200] loss: 0.685000\n",
"SGD Test - [3, 63] loss: 1.678670\n",
"SGD Train - [4, 200] loss: 0.664214\n",
"SGD Test - [4, 63] loss: 1.671089\n",
"SGD Train - [5, 200] loss: 0.650929\n",
"SGD Test - [5, 63] loss: 1.655042\n",
"SGD Train - [6, 200] loss: 0.642770\n",
"SGD Test - [6, 63] loss: 1.645914\n",
"SGD Train - [7, 200] loss: 0.636173\n",
"SGD Test - [7, 63] loss: 1.638216\n",
"SGD Train - [8, 200] loss: 0.625729\n",
"SGD Test - [8, 63] loss: 1.632513\n",
"SGD Train - [9, 200] loss: 0.617119\n",
"SGD Test - [9, 63] loss: 1.628715\n",
"SGD Train - [10, 200] loss: 0.614233\n",
"SGD Test - [10, 63] loss: 1.619651\n",
"SGD Train - [11, 200] loss: 0.606389\n",
"SGD Test - [11, 63] loss: 1.614651\n",
"SGD Train - [12, 200] loss: 0.600617\n",
"SGD Test - [12, 63] loss: 1.607622\n",
"SGD Train - [13, 200] loss: 0.595338\n",
"SGD Test - [13, 63] loss: 1.601368\n",
"SGD Train - [14, 200] loss: 0.588777\n",
"SGD Test - [14, 63] loss: 1.598346\n",
"SGD Train - [15, 200] loss: 0.585596\n",
"SGD Test - [15, 63] loss: 1.588600\n",
"SGD Train - [16, 200] loss: 0.578298\n",
"SGD Test - [16, 63] loss: 1.589057\n",
"SGD Train - [17, 200] loss: 0.570863\n",
"SGD Test - [17, 63] loss: 1.571430\n",
"SGD Train - [18, 200] loss: 0.561118\n",
"SGD Test - [18, 63] loss: 1.557587\n",
"SGD Train - [19, 200] loss: 0.544511\n",
"SGD Test - [19, 63] loss: 1.550734\n",
"SGD Train - [20, 200] loss: 0.528011\n",
"SGD Test - [20, 63] loss: 1.522115\n",
"SGD Train - [21, 200] loss: 0.503783\n",
"SGD Test - [21, 63] loss: 1.478322\n",
"SGD Train - [22, 200] loss: 0.460754\n",
"SGD Test - [22, 63] loss: 1.424895\n",
"SGD Train - [23, 200] loss: 0.396375\n",
"SGD Test - [23, 63] loss: 1.345113\n",
"SGD Train - [24, 200] loss: 0.337755\n",
"SGD Test - [24, 63] loss: 1.327240\n",
"SGD Train - [25, 200] loss: 0.320740\n",
"SGD Test - [25, 63] loss: 1.292387\n",
"SGD Train - [26, 200] loss: 0.312889\n",
"SGD Test - [26, 63] loss: 1.284361\n",
"SGD Train - [27, 200] loss: 0.304453\n",
"SGD Test - [27, 63] loss: 1.281565\n",
"SGD Train - [28, 200] loss: 0.304735\n",
"SGD Test - [28, 63] loss: 1.276305\n",
"SGD Train - [29, 200] loss: 0.303222\n",
"SGD Test - [29, 63] loss: 1.276587\n",
"SGD Train - [30, 200] loss: 0.305652\n",
"SGD Test - [30, 63] loss: 1.270780\n",
"SGD Train - [31, 200] loss: 0.296455\n",
"SGD Test - [31, 63] loss: 1.268951\n",
"SGD Train - [32, 200] loss: 0.294662\n",
"SGD Test - [32, 63] loss: 1.267345\n",
"SGD Train - [33, 200] loss: 0.292344\n",
"SGD Test - [33, 63] loss: 1.269702\n",
"SGD Train - [34, 200] loss: 0.296962\n",
"SGD Test - [34, 63] loss: 1.266023\n",
"SGD Train - [35, 200] loss: 0.286640\n",
"SGD Test - [35, 63] loss: 1.265162\n",
"SGD Train - [36, 200] loss: 0.286787\n",
"SGD Test - [36, 63] loss: 1.269316\n",
"SGD Train - [37, 200] loss: 0.276939\n",
"SGD Test - [37, 63] loss: 1.259019\n",
"SGD Train - [38, 200] loss: 0.280291\n",
"SGD Test - [38, 63] loss: 1.256739\n",
"SGD Train - [39, 200] loss: 0.277618\n",
"SGD Test - [39, 63] loss: 1.258157\n",
"SGD Train - [40, 200] loss: 0.278584\n",
"SGD Test - [40, 63] loss: 1.257211\n",
"SGD Train - [41, 200] loss: 0.279899\n",
"SGD Test - [41, 63] loss: 1.256743\n",
"SGD Train - [42, 200] loss: 0.278432\n",
"SGD Test - [42, 63] loss: 1.256451\n",
"SGD Train - [43, 200] loss: 0.272107\n",
"SGD Test - [43, 63] loss: 1.249342\n",
"SGD Train - [44, 200] loss: 0.264969\n",
"SGD Test - [44, 63] loss: 1.246131\n",
"SGD Train - [45, 200] loss: 0.261461\n",
"SGD Test - [45, 63] loss: 1.280196\n",
"SGD Train - [46, 200] loss: 0.265359\n",
"SGD Test - [46, 63] loss: 1.240715\n",
"SGD Train - [47, 200] loss: 0.263292\n",
"SGD Test - [47, 63] loss: 1.242347\n",
"SGD Train - [48, 200] loss: 0.264835\n",
"SGD Test - [48, 63] loss: 1.258986\n",
"SGD Train - [49, 200] loss: 0.264650\n",
"SGD Test - [49, 63] loss: 1.237363\n",
"SGD Train - [50, 200] loss: 0.254014\n",
"SGD Test - [50, 63] loss: 1.250425\n",
"SGD Train - [51, 200] loss: 0.254732\n",
"SGD Test - [51, 63] loss: 1.273443\n",
"SGD Train - [52, 200] loss: 0.256512\n",
"SGD Test - [52, 63] loss: 1.233822\n",
"SGD Train - [53, 200] loss: 0.255350\n",
"SGD Test - [53, 63] loss: 1.234152\n",
"SGD Train - [54, 200] loss: 0.246444\n",
"SGD Test - [54, 63] loss: 1.236732\n",
"SGD Train - [55, 200] loss: 0.253571\n",
"SGD Test - [55, 63] loss: 1.291129\n",
"SGD Train - [56, 200] loss: 0.244754\n",
"SGD Test - [56, 63] loss: 1.223073\n",
"SGD Train - [57, 200] loss: 0.242347\n",
"SGD Test - [57, 63] loss: 1.241343\n",
"SGD Train - [58, 200] loss: 0.246981\n",
"SGD Test - [58, 63] loss: 1.244836\n",
"SGD Train - [59, 200] loss: 0.241788\n",
"SGD Test - [59, 63] loss: 1.223393\n",
"SGD Train - [60, 200] loss: 0.241495\n",
"SGD Test - [60, 63] loss: 1.222736\n",
"SGD Train - [61, 200] loss: 0.238343\n",
"SGD Test - [61, 63] loss: 1.216935\n",
"SGD Train - [62, 200] loss: 0.235322\n",
"SGD Test - [62, 63] loss: 1.224532\n",
"SGD Train - [63, 200] loss: 0.244371\n",
"SGD Test - [63, 63] loss: 1.332417\n",
"SGD Train - [64, 200] loss: 0.235627\n",
"SGD Test - [64, 63] loss: 1.228323\n",
"SGD Train - [65, 200] loss: 0.232205\n",
"SGD Test - [65, 63] loss: 1.228285\n",
"SGD Train - [66, 200] loss: 0.236459\n",
"SGD Test - [66, 63] loss: 1.210309\n",
"SGD Train - [67, 200] loss: 0.226260\n",
"SGD Test - [67, 63] loss: 1.370837\n",
"SGD Train - [68, 200] loss: 0.228986\n",
"SGD Test - [68, 63] loss: 1.208640\n",
"SGD Train - [69, 200] loss: 0.233941\n",
"SGD Test - [69, 63] loss: 1.333060\n",
"SGD Train - [70, 200] loss: 0.226983\n",
"SGD Test - [70, 63] loss: 1.207059\n",
"SGD Train - [71, 200] loss: 0.223737\n",
"SGD Test - [71, 63] loss: 1.206570\n",
"SGD Train - [72, 200] loss: 0.222939\n",
"SGD Test - [72, 63] loss: 1.204699\n",
"SGD Train - [73, 200] loss: 0.225209\n",
"SGD Test - [73, 63] loss: 1.267952\n",
"SGD Train - [74, 200] loss: 0.221510\n",
"SGD Test - [74, 63] loss: 1.243363\n",
"SGD Train - [75, 200] loss: 0.224669\n",
"SGD Test - [75, 63] loss: 1.200943\n",
"SGD Train - [76, 200] loss: 0.219087\n",
"SGD Test - [76, 63] loss: 1.204366\n",
"SGD Train - [77, 200] loss: 0.219028\n",
"SGD Test - [77, 63] loss: 1.205369\n",
"SGD Train - [78, 200] loss: 0.219724\n",
"SGD Test - [78, 63] loss: 1.227981\n",
"SGD Train - [79, 200] loss: 0.216667\n",
"SGD Test - [79, 63] loss: 1.217768\n",
"SGD Train - [80, 200] loss: 0.221667\n",
"SGD Test - [80, 63] loss: 1.213198\n",
"SGD Train - [81, 200] loss: 0.210942\n",
"SGD Test - [81, 63] loss: 1.196451\n",
"SGD Train - [82, 200] loss: 0.219757\n",
"SGD Test - [82, 63] loss: 1.208508\n",
"SGD Train - [83, 200] loss: 0.211566\n",
"SGD Test - [83, 63] loss: 1.234623\n",
"SGD Train - [84, 200] loss: 0.214625\n",
"SGD Test - [84, 63] loss: 1.196915\n",
"SGD Train - [85, 200] loss: 0.217289\n",
"SGD Test - [85, 63] loss: 1.203383\n",
"SGD Train - [86, 200] loss: 0.215739\n",
"SGD Test - [86, 63] loss: 1.194585\n",
"SGD Train - [87, 200] loss: 0.208814\n",
"SGD Test - [87, 63] loss: 1.197877\n",
"SGD Train - [88, 200] loss: 0.206624\n",
"SGD Test - [88, 63] loss: 1.198204\n",
"SGD Train - [89, 200] loss: 0.206988\n",
"SGD Test - [89, 63] loss: 1.202824\n",
"SGD Train - [90, 200] loss: 0.208319\n",
"SGD Test - [90, 63] loss: 1.191217\n",
"SGD Train - [91, 200] loss: 0.208511\n",
"SGD Test - [91, 63] loss: 1.222357\n",
"SGD Train - [92, 200] loss: 0.210145\n",
"SGD Test - [92, 63] loss: 1.189246\n",
"SGD Train - [93, 200] loss: 0.208742\n",
"SGD Test - [93, 63] loss: 1.210294\n",
"SGD Train - [94, 200] loss: 0.205809\n",
"SGD Test - [94, 63] loss: 1.192315\n",
"SGD Train - [95, 200] loss: 0.204523\n",
"SGD Test - [95, 63] loss: 1.245311\n",
"SGD Train - [96, 200] loss: 0.209471\n",
"SGD Test - [96, 63] loss: 1.246112\n",
"SGD Train - [97, 200] loss: 0.211821\n",
"SGD Test - [97, 63] loss: 1.188534\n",
"SGD Train - [98, 200] loss: 0.200081\n",
"SGD Test - [98, 63] loss: 1.197677\n",
"SGD Train - [99, 200] loss: 0.200061\n",
"SGD Test - [99, 63] loss: 1.185507\n",
"SGD Train - [100, 200] loss: 0.207467\n",
"SGD Test - [100, 63] loss: 1.204948\n",
"SGD Momentum Train - [1, 200] loss: 1.315169\n",
"SGD Momentum Test - [1, 63] loss: 1.657384\n",
"SGD Momentum Train - [2, 200] loss: 0.557349\n",
"SGD Momentum Test - [2, 63] loss: 1.320345\n",
"SGD Momentum Train - [3, 200] loss: 0.313793\n",
"SGD Momentum Test - [3, 63] loss: 1.277835\n",
"SGD Momentum Train - [4, 200] loss: 0.296841\n",
"SGD Momentum Test - [4, 63] loss: 1.291155\n",
"SGD Momentum Train - [5, 200] loss: 0.296154\n",
"SGD Momentum Test - [5, 63] loss: 1.470740\n",
"SGD Momentum Train - [6, 200] loss: 0.284587\n",
"SGD Momentum Test - [6, 63] loss: 1.245702\n",
"SGD Momentum Train - [7, 200] loss: 0.267995\n",
"SGD Momentum Test - [7, 63] loss: 1.248010\n",
"SGD Momentum Train - [8, 200] loss: 0.256609\n",
"SGD Momentum Test - [8, 63] loss: 1.229938\n",
"SGD Momentum Train - [9, 200] loss: 0.244406\n",
"SGD Momentum Test - [9, 63] loss: 1.214136\n",
"SGD Momentum Train - [10, 200] loss: 0.229963\n",
"SGD Momentum Test - [10, 63] loss: 1.210497\n",
"SGD Momentum Train - [11, 200] loss: 0.212926\n",
"SGD Momentum Test - [11, 63] loss: 1.198750\n",
"SGD Momentum Train - [12, 200] loss: 0.204654\n",
"SGD Momentum Test - [12, 63] loss: 1.202148\n",
"SGD Momentum Train - [13, 200] loss: 0.205919\n",
"SGD Momentum Test - [13, 63] loss: 1.185611\n",
"SGD Momentum Train - [14, 200] loss: 0.189511\n",
"SGD Momentum Test - [14, 63] loss: 1.192863\n",
"SGD Momentum Train - [15, 200] loss: 0.196849\n",
"SGD Momentum Test - [15, 63] loss: 1.176696\n",
"SGD Momentum Train - [16, 200] loss: 0.181966\n",
"SGD Momentum Test - [16, 63] loss: 1.188377\n",
"SGD Momentum Train - [17, 200] loss: 0.175629\n",
"SGD Momentum Test - [17, 63] loss: 1.200639\n",
"SGD Momentum Train - [18, 200] loss: 0.176339\n",
"SGD Momentum Test - [18, 63] loss: 1.195567\n",
"SGD Momentum Train - [19, 200] loss: 0.168587\n",
"SGD Momentum Test - [19, 63] loss: 1.169613\n",
"SGD Momentum Train - [20, 200] loss: 0.167687\n",
"SGD Momentum Test - [20, 63] loss: 1.161750\n",
"SGD Momentum Train - [21, 200] loss: 0.169787\n",
"SGD Momentum Test - [21, 63] loss: 1.161022\n",
"SGD Momentum Train - [22, 200] loss: 0.164807\n",
"SGD Momentum Test - [22, 63] loss: 1.157704\n",
"SGD Momentum Train - [23, 200] loss: 0.161112\n",
"SGD Momentum Test - [23, 63] loss: 1.165061\n",
"SGD Momentum Train - [24, 200] loss: 0.157413\n",
"SGD Momentum Test - [24, 63] loss: 1.167729\n",
"SGD Momentum Train - [25, 200] loss: 0.150446\n",
"SGD Momentum Test - [25, 63] loss: 1.158057\n",
"SGD Momentum Train - [26, 200] loss: 0.153354\n",
"SGD Momentum Test - [26, 63] loss: 1.160752\n",
"SGD Momentum Train - [27, 200] loss: 0.141220\n",
"SGD Momentum Test - [27, 63] loss: 1.148953\n",
"SGD Momentum Train - [28, 200] loss: 0.137719\n",
"SGD Momentum Test - [28, 63] loss: 1.173316\n",
"SGD Momentum Train - [29, 200] loss: 0.128466\n",
"SGD Momentum Test - [29, 63] loss: 1.146360\n",
"SGD Momentum Train - [30, 200] loss: 0.134422\n",
"SGD Momentum Test - [30, 63] loss: 1.179464\n",
"SGD Momentum Train - [31, 200] loss: 0.127924\n",
"SGD Momentum Test - [31, 63] loss: 1.149037\n",
"SGD Momentum Train - [32, 200] loss: 0.133141\n",
"SGD Momentum Test - [32, 63] loss: 1.141898\n",
"SGD Momentum Train - [33, 200] loss: 0.121273\n",
"SGD Momentum Test - [33, 63] loss: 1.142365\n",
"SGD Momentum Train - [34, 200] loss: 0.117119\n",
"SGD Momentum Test - [34, 63] loss: 1.149952\n",
"SGD Momentum Train - [35, 200] loss: 0.107250\n",
"SGD Momentum Test - [35, 63] loss: 1.134440\n",
"SGD Momentum Train - [36, 200] loss: 0.117173\n",
"SGD Momentum Test - [36, 63] loss: 1.135877\n",
"SGD Momentum Train - [37, 200] loss: 0.099652\n",
"SGD Momentum Test - [37, 63] loss: 1.127623\n",
"SGD Momentum Train - [38, 200] loss: 0.107602\n",
"SGD Momentum Test - [38, 63] loss: 1.130122\n",
"SGD Momentum Train - [39, 200] loss: 0.116753\n",
"SGD Momentum Test - [39, 63] loss: 1.129134\n",
"SGD Momentum Train - [40, 200] loss: 0.110567\n",
"SGD Momentum Test - [40, 63] loss: 1.202035\n",
"SGD Momentum Train - [41, 200] loss: 0.111822\n",
"SGD Momentum Test - [41, 63] loss: 1.127081\n",
"SGD Momentum Train - [42, 200] loss: 0.105100\n",
"SGD Momentum Test - [42, 63] loss: 1.124468\n",
"SGD Momentum Train - [43, 200] loss: 0.092459\n",
"SGD Momentum Test - [43, 63] loss: 1.128798\n",
"SGD Momentum Train - [44, 200] loss: 0.099278\n",
"SGD Momentum Test - [44, 63] loss: 1.122376\n",
"SGD Momentum Train - [45, 200] loss: 0.091278\n",
"SGD Momentum Test - [45, 63] loss: 1.124045\n",
"SGD Momentum Train - [46, 200] loss: 0.084034\n",
"SGD Momentum Test - [46, 63] loss: 1.122025\n",
"SGD Momentum Train - [47, 200] loss: 0.091728\n",
"SGD Momentum Test - [47, 63] loss: 1.122216\n",
"SGD Momentum Train - [48, 200] loss: 0.082791\n",
"SGD Momentum Test - [48, 63] loss: 1.120907\n",
"SGD Momentum Train - [49, 200] loss: 0.088520\n",
"SGD Momentum Test - [49, 63] loss: 1.118129\n",
"SGD Momentum Train - [50, 200] loss: 0.083931\n",
"SGD Momentum Test - [50, 63] loss: 1.140635\n",
"SGD Momentum Train - [51, 200] loss: 0.069959\n",
"SGD Momentum Test - [51, 63] loss: 1.124102\n",
"SGD Momentum Train - [52, 200] loss: 0.075359\n",
"SGD Momentum Test - [52, 63] loss: 1.123138\n",
"SGD Momentum Train - [53, 200] loss: 0.071202\n",
"SGD Momentum Test - [53, 63] loss: 1.134089\n",
"SGD Momentum Train - [54, 200] loss: 0.072104\n",
"SGD Momentum Test - [54, 63] loss: 1.118196\n",
"SGD Momentum Train - [55, 200] loss: 0.068884\n",
"SGD Momentum Test - [55, 63] loss: 1.125049\n",
"SGD Momentum Train - [56, 200] loss: 0.067880\n",
"SGD Momentum Test - [56, 63] loss: 1.128173\n",
"SGD Momentum Train - [57, 200] loss: 0.064114\n",
"SGD Momentum Test - [57, 63] loss: 1.137776\n",
"SGD Momentum Train - [58, 200] loss: 0.062655\n",
"SGD Momentum Test - [58, 63] loss: 1.222581\n",
"SGD Momentum Train - [59, 200] loss: 0.064595\n",
"SGD Momentum Test - [59, 63] loss: 1.147812\n",
"SGD Momentum Train - [60, 200] loss: 0.061091\n",
"SGD Momentum Test - [60, 63] loss: 1.133749\n",
"SGD Momentum Train - [61, 200] loss: 0.059103\n",
"SGD Momentum Test - [61, 63] loss: 1.130359\n",
"SGD Momentum Train - [62, 200] loss: 0.054693\n",
"SGD Momentum Test - [62, 63] loss: 1.128741\n",
"SGD Momentum Train - [63, 200] loss: 0.060713\n",
"SGD Momentum Test - [63, 63] loss: 1.131461\n",
"SGD Momentum Train - [64, 200] loss: 0.050065\n",
"SGD Momentum Test - [64, 63] loss: 1.143181\n",
"SGD Momentum Train - [65, 200] loss: 0.052313\n",
"SGD Momentum Test - [65, 63] loss: 1.130785\n",
"SGD Momentum Train - [66, 200] loss: 0.047127\n",
"SGD Momentum Test - [66, 63] loss: 1.144106\n",
"SGD Momentum Train - [67, 200] loss: 0.049603\n",
"SGD Momentum Test - [67, 63] loss: 1.175959\n",
"SGD Momentum Train - [68, 200] loss: 0.053536\n",
"SGD Momentum Test - [68, 63] loss: 1.183879\n",
"SGD Momentum Train - [69, 200] loss: 0.051680\n",
"SGD Momentum Test - [69, 63] loss: 1.154637\n",
"SGD Momentum Train - [70, 200] loss: 0.048192\n",
"SGD Momentum Test - [70, 63] loss: 1.137449\n",
"SGD Momentum Train - [71, 200] loss: 0.037467\n",
"SGD Momentum Test - [71, 63] loss: 1.178398\n",
"SGD Momentum Train - [72, 200] loss: 0.037171\n",
"SGD Momentum Test - [72, 63] loss: 1.149547\n",
"SGD Momentum Train - [73, 200] loss: 0.031023\n",
"SGD Momentum Test - [73, 63] loss: 1.151344\n",
"SGD Momentum Train - [74, 200] loss: 0.030281\n",
"SGD Momentum Test - [74, 63] loss: 1.160650\n",
"SGD Momentum Train - [75, 200] loss: 0.028289\n",
"SGD Momentum Test - [75, 63] loss: 1.178782\n",
"SGD Momentum Train - [76, 200] loss: 0.034421\n",
"SGD Momentum Test - [76, 63] loss: 1.153893\n",
"SGD Momentum Train - [77, 200] loss: 0.023460\n",
"SGD Momentum Test - [77, 63] loss: 1.154844\n",
"SGD Momentum Train - [78, 200] loss: 0.023558\n",
"SGD Momentum Test - [78, 63] loss: 1.161123\n",
"SGD Momentum Train - [79, 200] loss: 0.034467\n",
"SGD Momentum Test - [79, 63] loss: 1.164545\n",
"SGD Momentum Train - [80, 200] loss: 0.024106\n",
"SGD Momentum Test - [80, 63] loss: 1.177515\n",
"SGD Momentum Train - [81, 200] loss: 0.042452\n",
"SGD Momentum Test - [81, 63] loss: 1.177929\n",
"SGD Momentum Train - [82, 200] loss: 0.020370\n",
"SGD Momentum Test - [82, 63] loss: 1.163496\n",
"SGD Momentum Train - [83, 200] loss: 0.017851\n",
"SGD Momentum Test - [83, 63] loss: 1.178685\n",
"SGD Momentum Train - [84, 200] loss: 0.038877\n",
"SGD Momentum Test - [84, 63] loss: 1.172524\n",
"SGD Momentum Train - [85, 200] loss: 0.021197\n",
"SGD Momentum Test - [85, 63] loss: 1.186523\n",
"SGD Momentum Train - [86, 200] loss: 0.017058\n",
"SGD Momentum Test - [86, 63] loss: 1.260663\n",
"SGD Momentum Train - [87, 200] loss: 0.016927\n",
"SGD Momentum Test - [87, 63] loss: 1.213930\n",
"SGD Momentum Train - [88, 200] loss: 0.018962\n",
"SGD Momentum Test - [88, 63] loss: 1.194042\n",
"SGD Momentum Train - [89, 200] loss: 0.011538\n",
"SGD Momentum Test - [89, 63] loss: 1.190378\n",
"SGD Momentum Train - [90, 200] loss: 0.012524\n",
"SGD Momentum Test - [90, 63] loss: 1.192941\n",
"SGD Momentum Train - [91, 200] loss: 0.007788\n",
"SGD Momentum Test - [91, 63] loss: 1.200075\n",
"SGD Momentum Train - [92, 200] loss: 0.010057\n",
"SGD Momentum Test - [92, 63] loss: 1.197985\n",
"SGD Momentum Train - [93, 200] loss: 0.009504\n",
"SGD Momentum Test - [93, 63] loss: 1.211504\n",
"SGD Momentum Train - [94, 200] loss: 0.008038\n",
"SGD Momentum Test - [94, 63] loss: 1.215302\n",
"SGD Momentum Train - [95, 200] loss: 0.006895\n",
"SGD Momentum Test - [95, 63] loss: 1.233284\n",
"SGD Momentum Train - [96, 200] loss: 0.009160\n",
"SGD Momentum Test - [96, 63] loss: 1.223966\n",
"SGD Momentum Train - [97, 200] loss: 0.006414\n",
"SGD Momentum Test - [97, 63] loss: 1.214236\n",
"SGD Momentum Train - [98, 200] loss: 0.004821\n",
"SGD Momentum Test - [98, 63] loss: 1.223203\n",
"SGD Momentum Train - [99, 200] loss: 0.015464\n",
"SGD Momentum Test - [99, 63] loss: 1.212028\n",
"SGD Momentum Train - [100, 200] loss: 0.003885\n",
"SGD Momentum Test - [100, 63] loss: 1.221131\n",
"RMSprop Train - [1, 200] loss: 0.524255\n",
"RMSprop Test - [1, 63] loss: 1.265196\n",
"RMSprop Train - [2, 200] loss: 0.288921\n",
"RMSprop Test - [2, 63] loss: 1.295738\n",
"RMSprop Train - [3, 200] loss: 0.222047\n",
"RMSprop Test - [3, 63] loss: 1.181750\n",
"RMSprop Train - [4, 200] loss: 0.189723\n",
"RMSprop Test - [4, 63] loss: 1.246882\n",
"RMSprop Train - [5, 200] loss: 0.172037\n",
"RMSprop Test - [5, 63] loss: 1.155321\n",
"RMSprop Train - [6, 200] loss: 0.159403\n",
"RMSprop Test - [6, 63] loss: 1.144851\n",
"RMSprop Train - [7, 200] loss: 0.141744\n",
"RMSprop Test - [7, 63] loss: 1.247004\n",
"RMSprop Train - [8, 200] loss: 0.142273\n",
"RMSprop Test - [8, 63] loss: 1.131289\n",
"RMSprop Train - [9, 200] loss: 0.123937\n",
"RMSprop Test - [9, 63] loss: 1.227166\n",
"RMSprop Train - [10, 200] loss: 0.114853\n",
"RMSprop Test - [10, 63] loss: 1.151371\n",
"RMSprop Train - [11, 200] loss: 0.116062\n",
"RMSprop Test - [11, 63] loss: 1.148820\n",
"RMSprop Train - [12, 200] loss: 0.101376\n",
"RMSprop Test - [12, 63] loss: 1.137702\n",
"RMSprop Train - [13, 200] loss: 0.101726\n",
"RMSprop Test - [13, 63] loss: 1.168346\n",
"RMSprop Train - [14, 200] loss: 0.090015\n",
"RMSprop Test - [14, 63] loss: 1.129539\n",
"RMSprop Train - [15, 200] loss: 0.092758\n",
"RMSprop Test - [15, 63] loss: 1.153851\n",
"RMSprop Train - [16, 200] loss: 0.077455\n",
"RMSprop Test - [16, 63] loss: 1.144491\n",
"RMSprop Train - [17, 200] loss: 0.079663\n",
"RMSprop Test - [17, 63] loss: 1.207607\n",
"RMSprop Train - [18, 200] loss: 0.076097\n",
"RMSprop Test - [18, 63] loss: 1.197015\n",
"RMSprop Train - [19, 200] loss: 0.068045\n",
"RMSprop Test - [19, 63] loss: 1.157439\n",
"RMSprop Train - [20, 200] loss: 0.064443\n",
"RMSprop Test - [20, 63] loss: 1.172621\n",
"RMSprop Train - [21, 200] loss: 0.055707\n",
"RMSprop Test - [21, 63] loss: 1.149829\n",
"RMSprop Train - [22, 200] loss: 0.059653\n",
"RMSprop Test - [22, 63] loss: 1.230405\n",
"RMSprop Train - [23, 200] loss: 0.054598\n",
"RMSprop Test - [23, 63] loss: 1.300338\n",
"RMSprop Train - [24, 200] loss: 0.052946\n",
"RMSprop Test - [24, 63] loss: 1.222464\n",
"RMSprop Train - [25, 200] loss: 0.050882\n",
"RMSprop Test - [25, 63] loss: 1.206084\n",
"RMSprop Train - [26, 200] loss: 0.050105\n",
"RMSprop Test - [26, 63] loss: 1.224552\n",
"RMSprop Train - [27, 200] loss: 0.045807\n",
"RMSprop Test - [27, 63] loss: 1.227538\n",
"RMSprop Train - [28, 200] loss: 0.042133\n",
"RMSprop Test - [28, 63] loss: 1.198368\n",
"RMSprop Train - [29, 200] loss: 0.046683\n",
"RMSprop Test - [29, 63] loss: 1.240541\n",
"RMSprop Train - [30, 200] loss: 0.037722\n",
"RMSprop Test - [30, 63] loss: 1.261746\n",
"RMSprop Train - [31, 200] loss: 0.047722\n",
"RMSprop Test - [31, 63] loss: 1.236309\n",
"RMSprop Train - [32, 200] loss: 0.036946\n",
"RMSprop Test - [32, 63] loss: 1.230598\n",
"RMSprop Train - [33, 200] loss: 0.050457\n",
"RMSprop Test - [33, 63] loss: 1.242754\n",
"RMSprop Train - [34, 200] loss: 0.033947\n",
"RMSprop Test - [34, 63] loss: 1.270819\n",
"RMSprop Train - [35, 200] loss: 0.038053\n",
"RMSprop Test - [35, 63] loss: 1.314888\n",
"RMSprop Train - [36, 200] loss: 0.033431\n",
"RMSprop Test - [36, 63] loss: 1.263293\n",
"RMSprop Train - [37, 200] loss: 0.044215\n",
"RMSprop Test - [37, 63] loss: 1.326887\n",
"RMSprop Train - [38, 200] loss: 0.033303\n",
"RMSprop Test - [38, 63] loss: 1.333887\n",
"RMSprop Train - [39, 200] loss: 0.044178\n",
"RMSprop Test - [39, 63] loss: 1.361987\n",
"RMSprop Train - [40, 200] loss: 0.032526\n",
"RMSprop Test - [40, 63] loss: 1.398450\n",
"RMSprop Train - [41, 200] loss: 0.037202\n",
"RMSprop Test - [41, 63] loss: 1.346940\n",
"RMSprop Train - [42, 200] loss: 0.038079\n",
"RMSprop Test - [42, 63] loss: 1.262606\n",
"RMSprop Train - [43, 200] loss: 0.025179\n",
"RMSprop Test - [43, 63] loss: 1.339308\n",
"RMSprop Train - [44, 200] loss: 0.024040\n",
"RMSprop Test - [44, 63] loss: 1.326904\n",
"RMSprop Train - [45, 200] loss: 0.030807\n",
"RMSprop Test - [45, 63] loss: 1.344140\n",
"RMSprop Train - [46, 200] loss: 0.034713\n",
"RMSprop Test - [46, 63] loss: 1.359147\n",
"RMSprop Train - [47, 200] loss: 0.032561\n",
"RMSprop Test - [47, 63] loss: 1.367978\n",
"RMSprop Train - [48, 200] loss: 0.028888\n",
"RMSprop Test - [48, 63] loss: 1.405492\n",
"RMSprop Train - [49, 200] loss: 0.020704\n",
"RMSprop Test - [49, 63] loss: 1.366503\n",
"RMSprop Train - [50, 200] loss: 0.025238\n",
"RMSprop Test - [50, 63] loss: 1.352312\n",
"RMSprop Train - [51, 200] loss: 0.034223\n",
"RMSprop Test - [51, 63] loss: 1.316988\n",
"RMSprop Train - [52, 200] loss: 0.026588\n",
"RMSprop Test - [52, 63] loss: 1.326895\n",
"RMSprop Train - [53, 200] loss: 0.031066\n",
"RMSprop Test - [53, 63] loss: 1.431755\n",
"RMSprop Train - [54, 200] loss: 0.036976\n",
"RMSprop Test - [54, 63] loss: 1.533306\n",
"RMSprop Train - [55, 200] loss: 0.030064\n",
"RMSprop Test - [55, 63] loss: 1.445107\n",
"RMSprop Train - [56, 200] loss: 0.025877\n",
"RMSprop Test - [56, 63] loss: 1.425321\n",
"RMSprop Train - [57, 200] loss: 0.020620\n",
"RMSprop Test - [57, 63] loss: 1.383892\n",
"RMSprop Train - [58, 200] loss: 0.019033\n",
"RMSprop Test - [58, 63] loss: 1.423838\n",
"RMSprop Train - [59, 200] loss: 0.031304\n",
"RMSprop Test - [59, 63] loss: 1.361140\n",
"RMSprop Train - [60, 200] loss: 0.032867\n",
"RMSprop Test - [60, 63] loss: 1.450870\n",
"RMSprop Train - [61, 200] loss: 0.031714\n",
"RMSprop Test - [61, 63] loss: 1.461307\n",
"RMSprop Train - [62, 200] loss: 0.032333\n",
"RMSprop Test - [62, 63] loss: 1.486866\n",
"RMSprop Train - [63, 200] loss: 0.017613\n",
"RMSprop Test - [63, 63] loss: 1.444881\n",
"RMSprop Train - [64, 200] loss: 0.019908\n",
"RMSprop Test - [64, 63] loss: 1.454213\n",
"RMSprop Train - [65, 200] loss: 0.022598\n",
"RMSprop Test - [65, 63] loss: 1.512975\n",
"RMSprop Train - [66, 200] loss: 0.057801\n",
"RMSprop Test - [66, 63] loss: 1.553676\n",
"RMSprop Train - [67, 200] loss: 0.025135\n",
"RMSprop Test - [67, 63] loss: 1.486359\n",
"RMSprop Train - [68, 200] loss: 0.040423\n",
"RMSprop Test - [68, 63] loss: 1.330410\n",
"RMSprop Train - [69, 200] loss: 0.035239\n",
"RMSprop Test - [69, 63] loss: 1.565421\n",
"RMSprop Train - [70, 200] loss: 0.027580\n",
"RMSprop Test - [70, 63] loss: 1.504032\n",
"RMSprop Train - [71, 200] loss: 0.017222\n",
"RMSprop Test - [71, 63] loss: 1.903129\n",
"RMSprop Train - [72, 200] loss: 0.044106\n",
"RMSprop Test - [72, 63] loss: 1.445887\n",
"RMSprop Train - [73, 200] loss: 0.028370\n",
"RMSprop Test - [73, 63] loss: 1.536673\n",
"RMSprop Train - [74, 200] loss: 0.029073\n",
"RMSprop Test - [74, 63] loss: 1.424149\n",
"RMSprop Train - [75, 200] loss: 0.021749\n",
"RMSprop Test - [75, 63] loss: 1.405979\n",
"RMSprop Train - [76, 200] loss: 0.027444\n",
"RMSprop Test - [76, 63] loss: 1.553244\n",
"RMSprop Train - [77, 200] loss: 0.025474\n",
"RMSprop Test - [77, 63] loss: 1.618788\n",
"RMSprop Train - [78, 200] loss: 0.026391\n",
"RMSprop Test - [78, 63] loss: 1.768595\n",
"RMSprop Train - [79, 200] loss: 0.015646\n",
"RMSprop Test - [79, 63] loss: 1.452246\n",
"RMSprop Train - [80, 200] loss: 0.023585\n",
"RMSprop Test - [80, 63] loss: 1.511602\n",
"RMSprop Train - [81, 200] loss: 0.022827\n",
"RMSprop Test - [81, 63] loss: 1.480388\n",
"RMSprop Train - [82, 200] loss: 0.022755\n",
"RMSprop Test - [82, 63] loss: 1.428821\n",
"RMSprop Train - [83, 200] loss: 0.024668\n",
"RMSprop Test - [83, 63] loss: 1.482831\n",
"RMSprop Train - [84, 200] loss: 0.021707\n",
"RMSprop Test - [84, 63] loss: 1.388896\n",
"RMSprop Train - [85, 200] loss: 0.026464\n",
"RMSprop Test - [85, 63] loss: 1.733760\n",
"RMSprop Train - [86, 200] loss: 0.027312\n",
"RMSprop Test - [86, 63] loss: 2.056238\n",
"RMSprop Train - [87, 200] loss: 0.022843\n",
"RMSprop Test - [87, 63] loss: 1.494696\n",
"RMSprop Train - [88, 200] loss: 0.018225\n",
"RMSprop Test - [88, 63] loss: 1.575968\n",
"RMSprop Train - [89, 200] loss: 0.033367\n",
"RMSprop Test - [89, 63] loss: 1.391984\n",
"RMSprop Train - [90, 200] loss: 0.023534\n",
"RMSprop Test - [90, 63] loss: 1.613968\n",
"RMSprop Train - [91, 200] loss: 0.027093\n",
"RMSprop Test - [91, 63] loss: 1.568915\n",
"RMSprop Train - [92, 200] loss: 0.013763\n",
"RMSprop Test - [92, 63] loss: 1.379248\n",
"RMSprop Train - [93, 200] loss: 0.028271\n",
"RMSprop Test - [93, 63] loss: 1.468163\n",
"RMSprop Train - [94, 200] loss: 0.032594\n",
"RMSprop Test - [94, 63] loss: 1.634096\n",
"RMSprop Train - [95, 200] loss: 0.014291\n",
"RMSprop Test - [95, 63] loss: 1.660082\n",
"RMSprop Train - [96, 200] loss: 0.012648\n",
"RMSprop Test - [96, 63] loss: 1.479944\n",
"RMSprop Train - [97, 200] loss: 0.015978\n",
"RMSprop Test - [97, 63] loss: 1.964573\n",
"RMSprop Train - [98, 200] loss: 0.019306\n",
"RMSprop Test - [98, 63] loss: 1.570552\n",
"RMSprop Train - [99, 200] loss: 0.021850\n",
"RMSprop Test - [99, 63] loss: 1.375548\n",
"RMSprop Train - [100, 200] loss: 0.032853\n",
"RMSprop Test - [100, 63] loss: 1.942192\n",
"ADAM Train - [1, 200] loss: 0.546707\n",
"ADAM Test - [1, 63] loss: 1.281578\n",
"ADAM Train - [2, 200] loss: 0.304158\n",
"ADAM Test - [2, 63] loss: 1.257177\n",
"ADAM Train - [3, 200] loss: 0.280880\n",
"ADAM Test - [3, 63] loss: 1.228011\n",
"ADAM Train - [4, 200] loss: 0.251167\n",
"ADAM Test - [4, 63] loss: 1.201807\n",
"ADAM Train - [5, 200] loss: 0.219533\n",
"ADAM Test - [5, 63] loss: 1.210606\n",
"ADAM Train - [6, 200] loss: 0.198583\n",
"ADAM Test - [6, 63] loss: 1.186651\n",
"ADAM Train - [7, 200] loss: 0.181042\n",
"ADAM Test - [7, 63] loss: 1.167394\n",
"ADAM Train - [8, 200] loss: 0.164810\n",
"ADAM Test - [8, 63] loss: 1.163129\n",
"ADAM Train - [9, 200] loss: 0.145554\n",
"ADAM Test - [9, 63] loss: 1.176651\n",
"ADAM Train - [10, 200] loss: 0.138976\n",
"ADAM Test - [10, 63] loss: 1.146708\n",
"ADAM Train - [11, 200] loss: 0.137385\n",
"ADAM Test - [11, 63] loss: 1.144111\n",
"ADAM Train - [12, 200] loss: 0.125102\n",
"ADAM Test - [12, 63] loss: 1.169288\n",
"ADAM Train - [13, 200] loss: 0.113901\n",
"ADAM Test - [13, 63] loss: 1.149815\n",
"ADAM Train - [14, 200] loss: 0.104400\n",
"ADAM Test - [14, 63] loss: 1.144498\n",
"ADAM Train - [15, 200] loss: 0.100987\n",
"ADAM Test - [15, 63] loss: 1.147388\n",
"ADAM Train - [16, 200] loss: 0.094300\n",
"ADAM Test - [16, 63] loss: 1.149669\n",
"ADAM Train - [17, 200] loss: 0.079859\n",
"ADAM Test - [17, 63] loss: 1.159085\n",
"ADAM Train - [18, 200] loss: 0.075178\n",
"ADAM Test - [18, 63] loss: 1.161298\n",
"ADAM Train - [19, 200] loss: 0.077611\n",
"ADAM Test - [19, 63] loss: 1.147143\n",
"ADAM Train - [20, 200] loss: 0.071850\n",
"ADAM Test - [20, 63] loss: 1.161425\n",
"ADAM Train - [21, 200] loss: 0.056319\n",
"ADAM Test - [21, 63] loss: 1.191978\n",
"ADAM Train - [22, 200] loss: 0.057856\n",
"ADAM Test - [22, 63] loss: 1.198162\n",
"ADAM Train - [23, 200] loss: 0.050845\n",
"ADAM Test - [23, 63] loss: 1.178330\n",
"ADAM Train - [24, 200] loss: 0.041629\n",
"ADAM Test - [24, 63] loss: 1.197836\n",
"ADAM Train - [25, 200] loss: 0.041634\n",
"ADAM Test - [25, 63] loss: 1.192259\n",
"ADAM Train - [26, 200] loss: 0.039211\n",
"ADAM Test - [26, 63] loss: 1.210675\n",
"ADAM Train - [27, 200] loss: 0.032789\n",
"ADAM Test - [27, 63] loss: 1.232411\n",
"ADAM Train - [28, 200] loss: 0.030469\n",
"ADAM Test - [28, 63] loss: 1.243654\n",
"ADAM Train - [29, 200] loss: 0.035530\n",
"ADAM Test - [29, 63] loss: 1.220647\n",
"ADAM Train - [30, 200] loss: 0.023693\n",
"ADAM Test - [30, 63] loss: 1.284072\n",
"ADAM Train - [31, 200] loss: 0.032258\n",
"ADAM Test - [31, 63] loss: 1.405704\n",
"ADAM Train - [32, 200] loss: 0.031358\n",
"ADAM Test - [32, 63] loss: 1.256613\n",
"ADAM Train - [33, 200] loss: 0.012241\n",
"ADAM Test - [33, 63] loss: 1.272517\n",
"ADAM Train - [34, 200] loss: 0.013417\n",
"ADAM Test - [34, 63] loss: 1.280982\n",
"ADAM Train - [35, 200] loss: 0.019161\n",
"ADAM Test - [35, 63] loss: 1.304301\n",
"ADAM Train - [36, 200] loss: 0.017089\n",
"ADAM Test - [36, 63] loss: 1.265893\n",
"ADAM Train - [37, 200] loss: 0.017258\n",
"ADAM Test - [37, 63] loss: 1.280633\n",
"ADAM Train - [38, 200] loss: 0.012843\n",
"ADAM Test - [38, 63] loss: 1.221780\n",
"ADAM Train - [39, 200] loss: 0.014527\n",
"ADAM Test - [39, 63] loss: 1.275866\n",
"ADAM Train - [40, 200] loss: 0.019825\n",
"ADAM Test - [40, 63] loss: 1.301852\n",
"ADAM Train - [41, 200] loss: 0.002106\n",
"ADAM Test - [41, 63] loss: 1.342261\n",
"ADAM Train - [42, 200] loss: 0.022819\n",
"ADAM Test - [42, 63] loss: 1.298071\n",
"ADAM Train - [43, 200] loss: 0.009624\n",
"ADAM Test - [43, 63] loss: 1.235147\n",
"ADAM Train - [44, 200] loss: 0.008256\n",
"ADAM Test - [44, 63] loss: 1.235003\n",
"ADAM Train - [45, 200] loss: 0.008369\n",
"ADAM Test - [45, 63] loss: 1.326598\n",
"ADAM Train - [46, 200] loss: 0.012422\n",
"ADAM Test - [46, 63] loss: 1.347887\n",
"ADAM Train - [47, 200] loss: 0.015985\n",
"ADAM Test - [47, 63] loss: 1.300400\n",
"ADAM Train - [48, 200] loss: 0.020510\n",
"ADAM Test - [48, 63] loss: 1.307044\n",
"ADAM Train - [49, 200] loss: 0.002149\n",
"ADAM Test - [49, 63] loss: 1.364836\n",
"ADAM Train - [50, 200] loss: 0.008372\n",
"ADAM Test - [50, 63] loss: 1.305314\n",
"ADAM Train - [51, 200] loss: 0.012801\n",
"ADAM Test - [51, 63] loss: 1.349491\n",
"ADAM Train - [52, 200] loss: 0.000953\n",
"ADAM Test - [52, 63] loss: 1.382836\n",
"ADAM Train - [53, 200] loss: 0.000174\n",
"ADAM Test - [53, 63] loss: 1.409397\n",
"ADAM Train - [54, 200] loss: 0.000069\n",
"ADAM Test - [54, 63] loss: 1.427372\n",
"ADAM Train - [55, 200] loss: 0.000039\n",
"ADAM Test - [55, 63] loss: 1.437979\n",
"ADAM Train - [56, 200] loss: 0.000037\n",
"ADAM Test - [56, 63] loss: 1.453869\n",
"ADAM Train - [57, 200] loss: 0.000032\n",
"ADAM Test - [57, 63] loss: 1.464402\n",
"ADAM Train - [58, 200] loss: 0.000018\n",
"ADAM Test - [58, 63] loss: 1.476305\n",
"ADAM Train - [59, 200] loss: 0.000018\n",
"ADAM Test - [59, 63] loss: 1.484906\n",
"ADAM Train - [60, 200] loss: 0.000012\n",
"ADAM Test - [60, 63] loss: 1.500122\n",
"ADAM Train - [61, 200] loss: 0.000012\n",
"ADAM Test - [61, 63] loss: 1.508949\n",
"ADAM Train - [62, 200] loss: 0.000007\n",
"ADAM Test - [62, 63] loss: 1.517767\n",
"ADAM Train - [63, 200] loss: 0.000007\n",
"ADAM Test - [63, 63] loss: 1.533484\n",
"ADAM Train - [64, 200] loss: 0.000006\n",
"ADAM Test - [64, 63] loss: 1.542345\n",
"ADAM Train - [65, 200] loss: 0.000005\n",
"ADAM Test - [65, 63] loss: 1.549297\n",
"ADAM Train - [66, 200] loss: 0.000004\n",
"ADAM Test - [66, 63] loss: 1.565439\n",
"ADAM Train - [67, 200] loss: 0.000003\n",
"ADAM Test - [67, 63] loss: 1.569916\n",
"ADAM Train - [68, 200] loss: 0.000002\n",
"ADAM Test - [68, 63] loss: 1.585143\n",
"ADAM Train - [69, 200] loss: 0.000002\n",
"ADAM Test - [69, 63] loss: 1.597098\n",
"ADAM Train - [70, 200] loss: 0.000002\n",
"ADAM Test - [70, 63] loss: 1.606570\n",
"ADAM Train - [71, 200] loss: 0.000001\n",
"ADAM Test - [71, 63] loss: 1.616215\n",
"ADAM Train - [72, 200] loss: 0.000001\n",
"ADAM Test - [72, 63] loss: 1.625989\n",
"ADAM Train - [73, 200] loss: 0.000001\n",
"ADAM Test - [73, 63] loss: 1.633473\n",
"ADAM Train - [74, 200] loss: 0.000001\n",
"ADAM Test - [74, 63] loss: 1.643731\n",
"ADAM Train - [75, 200] loss: 0.000001\n",
"ADAM Test - [75, 63] loss: 1.660005\n",
"ADAM Train - [76, 200] loss: 0.000001\n",
"ADAM Test - [76, 63] loss: 1.667435\n",
"ADAM Train - [77, 200] loss: 0.000000\n",
"ADAM Test - [77, 63] loss: 1.674012\n",
"ADAM Train - [78, 200] loss: 0.000000\n",
"ADAM Test - [78, 63] loss: 1.687265\n",
"ADAM Train - [79, 200] loss: 0.000000\n",
"ADAM Test - [79, 63] loss: 1.693710\n",
"ADAM Train - [80, 200] loss: 0.000000\n",
"ADAM Test - [80, 63] loss: 1.705436\n",
"ADAM Train - [81, 200] loss: 0.000000\n",
"ADAM Test - [81, 63] loss: 1.718285\n",
"ADAM Train - [82, 200] loss: 0.000000\n",
"ADAM Test - [82, 63] loss: 1.727386\n",
"ADAM Train - [83, 200] loss: 0.000000\n",
"ADAM Test - [83, 63] loss: 1.736503\n",
"ADAM Train - [84, 200] loss: 0.000000\n",
"ADAM Test - [84, 63] loss: 1.740423\n",
"ADAM Train - [85, 200] loss: 0.000000\n",
"ADAM Test - [85, 63] loss: 1.757116\n",
"ADAM Train - [86, 200] loss: 0.000000\n",
"ADAM Test - [86, 63] loss: 1.758233\n",
"ADAM Train - [87, 200] loss: 0.000000\n",
"ADAM Test - [87, 63] loss: 1.774289\n",
"ADAM Train - [88, 200] loss: 0.000000\n",
"ADAM Test - [88, 63] loss: 1.781804\n",
"ADAM Train - [89, 200] loss: 0.000000\n",
"ADAM Test - [89, 63] loss: 1.791121\n",
"ADAM Train - [90, 200] loss: 0.000000\n",
"ADAM Test - [90, 63] loss: 1.801582\n",
"ADAM Train - [91, 200] loss: 0.000000\n",
"ADAM Test - [91, 63] loss: 1.810195\n",
"ADAM Train - [92, 200] loss: 0.000000\n",
"ADAM Test - [92, 63] loss: 1.819214\n",
"ADAM Train - [93, 200] loss: 0.000000\n",
"ADAM Test - [93, 63] loss: 1.828728\n",
"ADAM Train - [94, 200] loss: 0.000000\n",
"ADAM Test - [94, 63] loss: 1.840495\n",
"ADAM Train - [95, 200] loss: 0.000000\n",
"ADAM Test - [95, 63] loss: 1.853431\n",
"ADAM Train - [96, 200] loss: 0.000000\n",
"ADAM Test - [96, 63] loss: 1.855349\n",
"ADAM Train - [97, 200] loss: 0.000000\n",
"ADAM Test - [97, 63] loss: 1.866137\n",
"ADAM Train - [98, 200] loss: 0.000000\n",
"ADAM Test - [98, 63] loss: 1.874951\n",
"ADAM Train - [99, 200] loss: 0.000000\n",
"ADAM Test - [99, 63] loss: 1.882625\n",
"ADAM Train - [100, 200] loss: 0.000000\n",
"ADAM Test - [100, 63] loss: 1.890702\n",
"Finished Training\n"
]
}
],
"source": [
"sgd_train = []\n",
"sgd_test = []\n",
"\n",
"momentum_train = []\n",
"momentum_test = []\n",
"\n",
"rmsprop_train = []\n",
"rmsprop_test = []\n",
"\n",
"adam_train = []\n",
"adam_test = []\n",
"\n",
"\n",
"optimizer_choice_text = [\"SGD\", \"SGD Momentum\", \"RMSprop\", \"ADAM\"]\n",
"\n",
"for optimizer_choice in range(0, 4):\n",
" net = CNN().cuda() # -- For GPU\n",
"\n",
" # define loss function\n",
" criterion = nn.CrossEntropyLoss()\n",
"\n",
" # define the optimizer\n",
" optimizer = MyOptimizer(net.parameters(), lr=0.001, momentum=0.9)\n",
" \n",
" for epoch in range(100): \n",
" running_loss = 0.0\n",
" accu_train = 0.0\n",
" accu_test = 0.0\n",
"\n",
" for i, data in enumerate(trainloader, 0):\n",
" # get the inputs\n",
" inputs, labels = data\n",
"\n",
" inputs = inputs.cuda() # -- For GPU\n",
" labels = labels.cuda() # -- For GPU\n",
"\n",
" # zero the parameter gradients\n",
" optimizer.zero_grad()\n",
"\n",
" # forward + backward + optimize\n",
" outputs = net(inputs)\n",
" loss = criterion(outputs, labels)\n",
" loss.backward()\n",
" if(optimizer_choice == 0):\n",
" optimizer.step_sgd()\n",
" elif(optimizer_choice == 1):\n",
" optimizer.step_sgd_momentum()\n",
" elif(optimizer_choice == 2):\n",
" optimizer.step_rmsprop()\n",
" else:\n",
" optimizer.step_adam()\n",
"\n",
" loss_item = loss.item()\n",
"\n",
" # print statistics\n",
" running_loss += loss_item\n",
" accu_train += loss_item\n",
" if (i+1) % 200 == 0: \n",
" print('%s Train - [%d, %5d] loss: %f' %\n",
" (optimizer_choice_text[optimizer_choice], epoch + 1, i + 1, running_loss / 200))\n",
" running_loss = 0.0\n",
"\n",
" save_train_batches = i+1\n",
"\n",
" #accu_train /= i+1\n",
"\n",
" with torch.no_grad():\n",
" for i, data in enumerate(testloader, 0):\n",
" # get the inputs\n",
" inputs, labels = data\n",
" \n",
" inputs = inputs.cuda() # -- For GPU\n",
" labels = labels.cuda() # -- For GPU\n",
"\n",
" # forward \n",
" outputs = net(inputs)\n",
" loss = criterion(outputs, labels)\n",
"\n",
" accu_test += loss.item()\n",
" \n",
" print('%s Test - [%d, %5d] loss: %f' %\n",
" (optimizer_choice_text[optimizer_choice], epoch + 1, i + 1, accu_test / i+1))\n",
"\n",
" save_test_batches = i+1\n",
" #accu_test /= i+1\n",
" \n",
"\n",
" if(optimizer_choice == 0):\n",
" sgd_train.append(accu_train / save_train_batches)\n",
" sgd_test.append(accu_test / save_test_batches)\n",
" elif(optimizer_choice == 1):\n",
" momentum_train.append(accu_train / save_train_batches)\n",
" momentum_test.append(accu_test / save_test_batches)\n",
" elif(optimizer_choice == 2):\n",
" rmsprop_train.append(accu_train / save_train_batches)\n",
" rmsprop_test.append(accu_test / save_test_batches)\n",
" else:\n",
" adam_train.append(accu_train / save_train_batches)\n",
" adam_test.append(accu_test / save_test_batches)\n",
"\n",
"print('Finished Training')"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 388
},
"colab_type": "code",
"id": "RCOI0GiX-hzY",
"outputId": "bd366700-0475-42e5-dcdd-620a6e8fc75d"
},
"outputs": [
{
"data": {
"image/png": "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\nj49nyJAh7Nmz54rHjB8/nrfffts1CcJvfvMbPv30UxISEti8eTNWq7XB12+oJ554gpKSEuLi4oiJ\niXH9nF977TViYmKw2+3s27ePu+++m/DwcBITE4mLi2uWSRCM+maqaM2SkpLM6hk0Wtzy5fDQQ4wf\ncZrTZns+/7ylCxIRERHxHjk5OURHR7d0GeLl6vs9Mgwj0zTNpPr2VwfIHVXpOCSgRB0gEREREREv\noADkjqoA1NFXAUhERERExBsoALlDAUhERERExKsoALmjKgB1aFuiabBFRERERLyAApA7agSgkhKo\nmj5dRERERERaKQUgd1QFIFubEgBKS1uyGBERERER+TEKQO64JABpHJCIiIiId7FYLNjtdmJjYxk/\nfjynT58GwOFwYBgGCxcudO1bWFhI27ZtmTNnDlD5ItXk5GTsdjvR0dHce++9V63upUuXYrfbsdvt\nrnuw2+0899xzDT7H1q1beeCBB5qxytZJAcgdVQEoyKgMQBoHJCIiIuJdAgICyMrKYteuXQQHB/PC\nCy+4tkVGRvLee++5lt944w1iYmJcy/PmzeOBBx4gKyuLnJwc5s6d2+DrmqbJRTfGTzz66KNkZWWR\nlZXluoesrCzmzZtXa7+KiorLnuOGG27g2WefbXIN3koByB1VAciKOkAiIiIi3m7IkCF8//33ruXA\nwECio6PZvn07AK+//jpTpkxxbT98+DBdu3Z1LcfFxQGwZs0aJkyYQHJyMn369GHx4sVAZVfp+uuv\n55577iE2NpaCggIyMjKIi4sjNjaWRx55xHWuoKAgHnjgAWJiYrjppps4fvx4g+/j7rvv5r777mPQ\noEEsWLCALVu2MGTIEPr378+wYcPYv38/AB999BETJ04EYOHChcyaNYuRI0cSFRVVKwj+1Pi0dAFe\nrSoABZgKQCIiIiLuuH/j/WQdyfLoOe2d7awYu6JB+zqdTj7++GNmzZpVa/3UqVNZt24d4eHhWCwW\nIiIi+OGHHwB44IEHuPHGGxk6dCijR48mNTWVDh06ALBt2zZ27dpFYGAgAwcO5NZbbyUkJIT9+/ez\ndu1aBg8ezA8//MAjjzxCZmYmHTt2ZPTo0axfv56JEydSUlJCUlISzz77LEuWLGHx4sU8//zzDb73\nw4cPs2XLFtq0acOZM2f4/PPP8fHxYePGjSxcuJDXX3+9zjH79u3j448/5vTp00RHRzN79mwsFkuD\n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\nDRrEp59+SmFhIU6nk4yMDEaOHAnAxYsXefPNNwF47bXXGD58eIPvZdSoUbUmc8jKqny0MC8vj/j4\neP7whz8wYMAA9u7di81mo+gam8lLAchdCkAiIiIiPwn9+/cnPj6ejIyMWutjYmKYPn16nf0/+OAD\nYmNjSUhIYMyYMTz99NN07twZqAw3kydPJj4+nsmTJ5OUlFTn+C5duvDUU0/x85//nISEBBITE5kw\nYQJQ2Snatm0bsbGxfPLJJzz++OMNvo8XXniBL7/8kvj4ePr168dLL70EwDPPPENsbCzx8fEEBQUx\nevRo+vfvj9PpJCEh4ZqZBMEwTbOla2iUpKQks3omjlZhzx6IjibzoddISvsl27dDYmJLFyUiIiLS\n+uXk5BAdHd3SZXjcmjVr2L59e4MnLahPUFAQxfrLeoPU93tkGEamaZp1UyfqALmvqgNkRR0gERER\nEZHWTpMguKsqAAWaCkAiIiIiAjNmzGDGjBlunUPdn+ajDpC7qgKQv1MBSERERESktVMAcpevL1gs\nrgB0jU2iISIiIiLiVRSA3GUYYLXiV6EOkIiIiIhIa6cA5AlWK20vKACJiIiIiLR2CkCeYLXSpqwE\nPz8FIBERERFvs379egzDYM+ePa51DoeDgIAA+vfvT3R0NIMGDWLNmjV1jp04cSKDBw+utW7RokUY\nhkFubq5r3YoVKzAMg0tf53L77bdjt9vp3bs37du3x263Y7fb+eqrrxpc/wsvvMCrr77a4P2vdZoF\nzhOsVigpwWbTGCARERERb5ORkcHw4cPJyMhg8eLFrvW9evXim2++ASA/P59JkyZhmiapqakAnD59\nmszMTIKCgsjPzycqKsp1bFxcHOvWrWPhwoUAvPHGG8TExNS59ttvvw3Apk2beOaZZ3j33XfrrbGi\nogIfn/o/uv/2t79twl1fu9QB8oSqABQUpA6QiIiIiDcpLi7miy++4OWXX2bdunWX3S8qKorly5fz\n3HPPuda99dZbjB8/nqlTp9Y5duLEibzzzjsA5OXl0b59e0JCQhpVW9euXZk/fz79+/fn7bff5sUX\nX2TgwIEkJCRw5513UlZWBsDChQtZsWIFAMOHD2f+/PkMGjSI66+/vlGdpGtFs3WADMN4BRgHHDNN\nM7ae7cnAO8B3VaveMk1zSXPV06ysVigqUgASERERaarM++FUlmfP2dEOiSuuuMs777zD2LFj6du3\nL506dSIzM5PExMR69x0wYECtx+QyMjJ4/PHHCQ8PZ/LkySxYsMC1rV27dnTr1o1du3bxzjvvkJKS\nwurVqxt9C2FhYa4u1IkTJ5g9ezYA8+fPZ82aNdx33311jjFNk23btrFhwwaWLFnCxo0bG33dn7Lm\n7ACtAcb+yD6fm6Zpr/ryzvADlQGouFgBSERERMTLZGRkMHXqVACmTp1KRkbGZfc1TdP1/dGjR9m/\nfz/Dhw+nb9++tG3bll27dtXav7oztH79em6//fYm1ZeSkuL6/ttvv2XEiBGux+t2795d7zGTJk0C\nIDExEYfD0aTr/pQ1WwfINM3PDMPo2Vznb1WqxwB10RggERERkSb5kU5Nczh58iSffPIJO3fuxDAM\nnE4nhmHw9NNP17v/N998Q3R0NAB//etfOXXqFJGRkQCcPXuWjIwMli5d6tp/3Lhx/P73vycpKYl2\n7do1qUar1er6/p577uHvf/87sbGxrFq1ii1bttR7jJ+fHwAWi4WKioomXfenrKXHAA0xDOOfhmH8\n3TCMuqPCqhiGca9hGNsNw9h+/Pjxq1lfw2gMkIiIiIjXefPNN5k2bRoHDhzA4XBQUFBAZGQkn3/+\neZ19HQ4HDz/8MHPnzgUqO0cbN27E4XDgcDjIzMysMw4oMDCQZcuW8eijj3qk3pKSEjp37kx5eTmv\nvfaaR855LWrJALQD6GGaZgKwElh/uR1N00w3TTPJNM2k0NDQq1ZggykAiYiIiHidjIyMOo+mTZ48\n2fUYXF5enmsa7ClTpjBv3jxSU1NxOBwcOHCg1vTXkZGRtG/fnq1bt9Y639SpUxkwYIBH6l2yZAkD\nBw5k2LBh9OvXzyPnvBYZNZ9l9PjJKx+Be7e+SRDq2dcBJJmmWXil/ZKSksxL509vcY89BkuX8tvZ\nTv76hkFrbFKJiIiItDY5OTmuR8pEmqq+3yPDMDJN00yqb/8W6wAZhtHZMAyj6vtBVbWcaKl63GK1\ngmnS0b9MHSARERERkVasOafBzgCSgRDDMA4BTwBtAUzTfBG4A7jPMIwKoAyYajZnO6o5VQ1O6+hb\nwrlzgVRUwGXeUyUiIiIiIi2oOWeB++WPbH8eeL65rn9VVQWgDm1LgFBKSqB9+5YtSURERERE6mrp\nWeB+GqoCUHufEkBTYYuIiIiItFYKQJ5QFYDaWSoDkMYBiYiIiIi0TgpAnlAVgGxtFIBERERERFoz\nBSBPqApAQYYCkIiIiIi3Wb9+PYZhsGfPHtc6h8NBQECA6z1AgwYNYs2aNXWOnThxYq33AQEsWrQI\nwzDIzc11rVuxYgWGYXDp61xuv/127HY7vXv3pn379tjtdux2O1999VWj7uGTTz5hy5YtjTrmWqUA\n5AlVAciKxgCJiIiIeJuMjAyGDx/uegFqtV69evHNN9+Qk5PDunXrWLFiBatXr3ZtP336NJmZmZw5\nc4b8/Pxax8bFxbFu3TrX8htvvEFMTEyda7/99ttkZWWxatUqRowYQVZWFllZWQwdOrRR96AA1HAK\nQJ5QFYACTHWARERERLxJcXExX3zxBS+//HKtwHKpqKgoli9fznPPPeda99ZbbzF+/HimTp1a59iJ\nEyfyzjvvAJCXl0f79u0JCQlpVG1ff/01I0eOJDExkVtuuYWjR48C8Oyzz9KvXz/i4+O5++67ycvL\nY9WqVTz99NNN6h5da/S2Gk+oDkBOBSARERGRpsj8v/+XU3v3evScHa+/nsQ//OGK+7zzzjuMHTuW\nvn370qlTJzIzM0lMTKx33wEDBtR6TC4jI4PHH3+c8PBwJk+ezIIFC1zb2rVrR7du3di1axfvvPMO\nKSkptbpHP+b8+fP87ne/Y8OGDYSEhPDqq6/y2GOPkZ6ezh//+EcOHDiAr68vp0+fpkOHDvz6178m\nJCSE+++/v8HXuFapA+QJVQHIXwFIRERExKtkZGQwdepUAKZOnVrnMbiaTNN0fX/06FH279/P8OHD\n6du3L23btmXXrl219q/uDK1fv57bb7+9UXXl5OSwe/duRo0ahd1u56mnnqKgoACAmJgY7r77bl59\n9VXatm3bqPOKOkCeERAAhoFvucYAiYiIiDTFj3VqmsPJkyf55JNP2LlzJ4Zh4HQ6MQyDp59+ut79\nv/nmG6KjowH461//yqlTp4iMjATg7NmzZGRksHTpUtf+48aN4/e//z1JSUm0a9euUbWZpkl8fDyf\nf/55nW3vv/8+n376KRs2bOA///M/+fbbbxt17mudOkCeYBgQGEibshICAtQBEhEREfEGb775JtOm\nTePAgQM4HA4KCgqIjIysN3Q4HA4efvhh5s6dC1R2jjZu3IjD4cDhcJCZmVlnHFBgYCDLli3j0Ucf\nbXRt/fr14/vvv2fbtm0AXLhwgd27d+N0Ojl06BA33ngjf/zjHyksLKS0tBSbzUaR/grfIApAnmK1\nQkkJQUEKQCIiIiLeICMjo86jaZMnT3Y9BpeXl+eaBnvKlCnMmzeP1NRUHA4HBw4cqDX9dWRkJO3b\nt2fr1q21zjd16lQGDBjQ6Nr8/Px48803efDBB4mPj6d///5s3bqViooK7rrrLuLj4xkwYAAPP/ww\nNpuNCRMm8Ne//pX+/ftrEoQfYdR8ltEbJCUlmZfOn94qREXB0KH02vzfDB0Kf/lLSxckIiIi0rrl\n5OS4HikTaar6fo8Mw8g0TTOpvv3VAfIUdYBERERERFo9BSBPUQASEREREWn1FIA8RQFIRERERKTV\nUwDylKoAZLNpGmwRERGRhvK28ejSujTl90cByFPUARIRERFpFH9/f06cOKEQJE1imiYnTpzA39+/\nUcfpRaieogAkIiIi0ihdu3bl0KFDHD9+vKVLES/l7+9P165dG3WMApCnKACJiIiINErbtm2JjIxs\n6TLkGqNH4DylegxQkMn581Be3tIFiYiIiIjIpRSAPMVqBaeT9gEXAHWBRERERERaIwUgT7FaAWjv\nUwIoAImIiIiItEYKQJ6iACQiIiIi0uopAHnKJQFI7wISEREREWl9FIA8pSoA2dqoAyQiIiIi0lop\nAHlKVQAKMhSARERERERaKwUgT6kKQFb0CJyIiIiISGulAOQpVQEo0FQHSERERESktVIA8pSqAOTv\nVAASEREREWmtFIA8pSoA+SkAiYiIiIi0WgpAnlIVgNqUlmC1agyQiIiIiEhrpADkKYGBlf+WlBAU\npA6QiIiIiEhrpADkKRYL+PsrAImIiIiItGIKQJ5ktSoAiYiIiIi0YgpAnlQVgGw2jQESEREREWmN\nFIA8SR0gEREREZFWTQHIkxSARERERERaNQUgT6rxCJwCkIiIiIhI66MA5Ek1OkAaAyQiIiIi0voo\nAHmSHoETEREREWnVFIA8qUYAKi+HCxdauiAREREREalJAciTaowBAj0GJyIiIiLS2igAeVKNDhDo\nMTgRERERkdamQQHIMIxehmH4VX2fbBjGPMMwOjRvaV7IaoULF7AFVAAKQCIiIiIirU1DO0D/AzgN\nw+gNpAPdgNearSpvZbUC0N6nBFAAEhERERFpbRoagC6aplkB3A6sNE3z90CX5ivLS1U9+1YdgDQG\nSERERESkdWloACo3DOOXwHTg3ap1bZunJC9W1QEKMtQBEhERERFpjRoagFKBIcBS0zS/MwwjEvhL\n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\nGv8/BcVqyhZK1U4AAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 1008x432 with 1 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"x_axis = list(range(1, 101))\n",
"\n",
"plt.figure(figsize=(14,6))\n",
"plt.plot(x_axis, sgd_train, c=\"blue\", label=\"SGD Train\")\n",
"plt.plot(x_axis, sgd_test, c=\"red\", label=\"SGD Test\")\n",
"plt.plot(x_axis, momentum_train, c=\"purple\", label=\"SGD Momentum Train\")\n",
"plt.plot(x_axis, momentum_test, c=\"pink\", label=\"SGD Momentum Test\")\n",
"plt.plot(x_axis, rmsprop_train, c=\"green\", label=\"RMSprop Train\")\n",
"plt.plot(x_axis, rmsprop_test, c=\"lime\", label=\"RMSprop Test\")\n",
"\n",
"plt.plot(x_axis, adam_train, c=\"orange\", label=\"ADAM Train\")\n",
"plt.plot(x_axis, adam_test, c=\"brown\", label=\"ADAM Test\")\n",
"\n",
"plt.legend(loc='upper right')\n",
"\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Loss')\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "0w7qFDjnnJjC"
},
"source": [
"# ADAM analysis\n",
"One of the complaints about ADAM is that still, the adjusted learning rates, see third math line in: \n",
"\n",
"<img src=\"https://i.imgur.com/hNpESIe.png\" style=\"width: 350px;\" />\n",
"\n",
"can be extreme (very high or very low).\n",
"\n",
"Let's try to confirm this:<br />\n",
"We'll modify our step_adam code to calculate the smallest and largest adjusted rates in the network in every step, and plot that as a curve (X axis is step number, and Y axis is the adjusted LR value). We'll plot two curves: one for min and one for max."
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
},
"colab_type": "code",
"id": "1noSDqCjoYaz",
"outputId": "c9b073ee-7e5c-4f24-ad16-588ea3fef857"
},
"outputs": [
{
"data": {
"image/png": "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\nVZGnr2W46gAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"mins, maxs = zip(*optimizer.adam_lr_buffer)\n",
"\n",
"plt.xlabel('Step')\n",
"plt.ylabel('Adjusted Rate')\n",
"plt.title(\"Rates per Step\")\n",
"plt.plot(maxs,label=\"Maximum\");\n",
"plt.plot(mins,label=\"Minimum\");\n",
"plt.legend(loc='upper right')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "e8SS0I8gr-nG"
},
"source": [
"Confirmed that the rates are very high or low."
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "MF9FZrk9sBAF"
},
"outputs": [],
"source": []
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"collapsed_sections": [],
"name": "Solution - Assignment_3.ipynb",
"provenance": []
},
"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.1"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment