0% found this document useful (0 votes)
23 views13 pages

Mlp-Fromscratch Sigmoid-Mse

The document outlines the course STAT 453: Deep Learning taught by Sebastian Raschka in Spring 2021, including details on the course website, GitHub repository, and Python environment setup. It provides a comprehensive implementation of a multilayer perceptron from scratch using PyTorch, covering model architecture, training, and evaluation processes with the MNIST dataset. The training process includes logging of costs and mean squared error metrics across multiple epochs.

Uploaded by

pnqanh.gdsciu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views13 pages

Mlp-Fromscratch Sigmoid-Mse

The document outlines the course STAT 453: Deep Learning taught by Sebastian Raschka in Spring 2021, including details on the course website, GitHub repository, and Python environment setup. It provides a comprehensive implementation of a multilayer perceptron from scratch using PyTorch, covering model architecture, training, and evaluation processes with the MNIST dataset. The training process includes logging of costs and mean squared error metrics across multiple epochs.

Uploaded by

pnqanh.gdsciu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 13

STAT 453: Deep Learning (Spring 2021)

Instructor: Sebastian Raschka (sraschka@wisc.edu)

Course website: http://pages.stat.wisc.edu/~sraschka/teaching/stat453-ss2021/


GitHub repository: https://github.com/rasbt/stat453-deep-learning-ss21

%load_ext watermark
%watermark -a 'Sebastian Raschka' -v -p torch

Author: Sebastian Raschka

Python implementation: CPython


Python version : 3.9.2
IPython version : 7.20.0

torch: 1.9.0a0+d819a21

Multilayer Perceptron From Scratch (Sigmoid activation, MSE


Loss)
Implementation of a 1-hidden layer multi-layer perceptron from scratch using

sigmoid activation in the hidden layer


sigmoid activation in the output layer
Mean Squared Error loss function

Imports
import matplotlib.pyplot as plt
import pandas as pd
import torch
%matplotlib inline

import time
import numpy as np
from torchvision import datasets
from torchvision import transforms
from torch.utils.data import DataLoader
import torch.nn.functional as F
import torch

Settings and Dataset


##########################
### SETTINGS
##########################

RANDOM_SEED = 1
BATCH_SIZE = 100
NUM_EPOCHS = 50

##########################
### MNIST DATASET
##########################

# Note transforms.ToTensor() scales input images


# to 0-1 range
train_dataset = datasets.MNIST(root='data',
train=True,
transform=transforms.ToTensor(),
download=True)

test_dataset = datasets.MNIST(root='data',
train=False,
transform=transforms.ToTensor())

train_loader = DataLoader(dataset=train_dataset,
batch_size=BATCH_SIZE,
shuffle=True)

test_loader = DataLoader(dataset=test_dataset,
batch_size=BATCH_SIZE,
shuffle=False)

# Checking the dataset


for images, labels in train_loader:
print('Image batch dimensions:', images.shape)
print('Image label dimensions:', labels.shape)
break

Image batch dimensions: torch.Size([100, 1, 28, 28])


Image label dimensions: torch.Size([100])

Model Implementation
##########################
### MODEL
##########################

class MultilayerPerceptron():

def __init__(self, num_features, num_hidden, num_classes):


super(MultilayerPerceptron, self).__init__()

self.num_classes = num_classes

# hidden 1
self.weight_1 = torch.zeros(num_hidden, num_features,
dtype=torch.float).normal_(0.0, 0.1)
self.bias_1 = torch.zeros(num_hidden, dtype=torch.float)

# output
self.weight_o = torch.zeros(self.num_classes, num_hidden,
dtype=torch.float).normal_(0.0, 0.1)
self.bias_o = torch.zeros(self.num_classes, dtype=torch.float)

def forward(self, x):


# hidden 1

# input dim: [n_hidden, n_features] dot [n_features, n_examples] .T


# output dim: [n_examples, n_hidden]
z_1 = torch.mm(x, self.weight_1.t()) + self.bias_1
a_1 = torch.sigmoid(z_1)

# hidden 2
# input dim: [n_classes, n_hidden] dot [n_hidden, n_examples] .T
# output dim: [n_examples, n_classes]
z_2 = torch.mm(a_1, self.weight_o.t()) + self.bias_o
a_2 = torch.sigmoid(z_2)
return a_1, a_2

def backward(self, x, a_1, a_2, y):

#########################
### Output layer weights
#########################

# onehot encoding
y_onehot = torch.FloatTensor(y.size(0), self.num_classes)
y_onehot.zero_()
y_onehot.scatter_(1, y.view(-1, 1).long(), 1)

# Part 1: dLoss/dOutWeights
## = dLoss/dOutAct * dOutAct/dOutNet * dOutNet/dOutWeight
## where DeltaOut = dLoss/dOutAct * dOutAct/dOutNet
## for convenient re-use

# input/output dim: [n_examples, n_classes]


dloss_da2 = 2.*(a_2 - y_onehot) / y.size(0)

# input/output dim: [n_examples, n_classes]


da2_dz2 = a_2 * (1. - a_2) # sigmoid derivative

# output dim: [n_examples, n_classes]


delta_out = dloss_da2 * da2_dz2 # "delta (rule) placeholder"

# gradient for output weights

# [n_examples, n_hidden]
dz2__dw_out = a_1

# input dim: [n_classlabels, n_examples] dot [n_examples, n_hidden]


# output dim: [n_classlabels, n_hidden]
dloss__dw_out = torch.mm(delta_out.t(), dz2__dw_out)
dloss__db_out = torch.sum(delta_out, dim=0)

#################################
# Part 2: dLoss/dHiddenWeights
## = DeltaOut * dOutNet/dHiddenAct * dHiddenAct/dHiddenNet * dHiddenNet/dWeight

# [n_classes, n_hidden]
dz2__a1 = self.weight_o

# output dim: [n_examples, n_hidden]


dloss_a1 = torch.mm(delta_out, dz2__a1)

# [n_examples, n_hidden]
da1__dz1 = a_1 * (1. - a_1) # sigmoid derivative

# [n_examples, n_features]
dz1__dw1 = x

# output dim: [n_hidden, n_features]


dloss_dw1 = torch.mm((dloss_a1 * da1__dz1).t(), dz1__dw1)
dloss_db1 = torch.sum((dloss_a1 * da1__dz1), dim=0)

return dloss__dw_out, dloss__db_out, dloss_dw1, dloss_db1

Training
####################################################
##### Training and evaluation wrappers
###################################################

def to_onehot(y, num_classes):


y_onehot = torch.FloatTensor(y.size(0), num_classes)
y_onehot.zero_()
y_onehot.scatter_(1, y.view(-1, 1).long(), 1).float()
return y_onehot

def loss_func(targets_onehot, probas_onehot):


return torch.mean(torch.mean((targets_onehot - probas_onehot)**2, dim=0))

def compute_mse(net, data_loader):


curr_mse, num_examples = torch.zeros(model.num_classes).float(), 0
with torch.no_grad():
for features, targets in data_loader:
features = features.view(-1, 28*28)
logits, probas = net.forward(features)
y_onehot = to_onehot(targets, model.num_classes)
loss = torch.sum((y_onehot - probas)**2, dim=0)
num_examples += targets.size(0)
curr_mse += loss

curr_mse = torch.mean(curr_mse/num_examples, dim=0)


return curr_mse

def train(model, data_loader, num_epochs,


learning_rate=0.1):

minibatch_cost = []
epoch_cost = []

for e in range(num_epochs):

for batch_idx, (features, targets) in enumerate(train_loader):

features = features.view(-1, 28*28)

#### Compute outputs ####


a_1, a_2 = model.forward(features)

#### Compute gradients ####


dloss__dw_out, dloss__db_out, dloss_dw1, dloss_db1 = \
model.backward(features, a_1, a_2, targets)

#### Update weights ####


model.weight_1 -= learning_rate * dloss_dw1
model.bias_1 -= learning_rate * dloss_db1
model.weight_o -= learning_rate * dloss__dw_out
model.bias_o -= learning_rate * dloss__db_out

#### Logging ####


curr_cost = loss_func(to_onehot(targets, model.num_classes), a_2)
minibatch_cost.append(curr_cost)
if not batch_idx % 50:
print ('Epoch: %03d/%03d | Batch %03d/%03d | Cost: %.4f'
%(e+1, NUM_EPOCHS, batch_idx,
len(train_loader), curr_cost))

#### Logging ####


curr_cost = compute_mse(model, train_loader)
epoch_cost.append(curr_cost)
print('Epoch: %03d/%03d |' % (e+1, NUM_EPOCHS), end="")
print(' Train MSE: %.5f' % curr_cost)

return minibatch_cost, epoch_cost

####################################################
##### Training
###################################################

torch.manual_seed(RANDOM_SEED)
model = MultilayerPerceptron(num_features=28*28,
num_hidden=50,
num_classes=10)

minibatch_cost, epoch_cost = train(model,


train_loader,
num_epochs=NUM_EPOCHS,
learning_rate=0.1)

Epoch: 001/050 | Batch 000/600 | Cost: 0.2386


Epoch: 001/050 | Batch 050/600 | Cost: 0.0895
Epoch: 001/050 | Batch 100/600 | Cost: 0.0879
Epoch: 001/050 | Batch 150/600 | Cost: 0.0878
Epoch: 001/050 | Batch 200/600 | Cost: 0.0845
Epoch: 001/050 | Batch 250/600 | Cost: 0.0845
Epoch: 001/050 | Batch 300/600 | Cost: 0.0828
Epoch: 001/050 | Batch 350/600 | Cost: 0.0817
Epoch: 001/050 | Batch 400/600 | Cost: 0.0740
Epoch: 001/050 | Batch 450/600 | Cost: 0.0728
Epoch: 001/050 | Batch 500/600 | Cost: 0.0721
Epoch: 001/050 | Batch 550/600 | Cost: 0.0729
Epoch: 001/050 | Train MSE: 0.06567
Epoch: 002/050 | Batch 000/600 | Cost: 0.0652
Epoch: 002/050 | Batch 050/600 | Cost: 0.0585
Epoch: 002/050 | Batch 100/600 | Cost: 0.0616
Epoch: 002/050 | Batch 150/600 | Cost: 0.0625
Epoch: 002/050 | Batch 200/600 | Cost: 0.0586
Epoch: 002/050 | Batch 250/600 | Cost: 0.0613
Epoch: 002/050 | Batch 300/600 | Cost: 0.0502
Epoch: 002/050 | Batch 350/600 | Cost: 0.0513
Epoch: 002/050 | Batch 400/600 | Cost: 0.0465
Epoch: 002/050 | Batch 450/600 | Cost: 0.0519
Epoch: 002/050 | Batch 500/600 | Cost: 0.0458
Epoch: 002/050 | Batch 550/600 | Cost: 0.0408
Epoch: 002/050 | Train MSE: 0.04299
Epoch: 003/050 | Batch 000/600 | Cost: 0.0422
Epoch: 003/050 | Batch 050/600 | Cost: 0.0424
Epoch: 003/050 | Batch 100/600 | Cost: 0.0400
Epoch: 003/050 | Batch 150/600 | Cost: 0.0367
Epoch: 003/050 | Batch 200/600 | Cost: 0.0401
Epoch: 003/050 | Batch 250/600 | Cost: 0.0383
Epoch: 003/050 | Batch 300/600 | Cost: 0.0388
Epoch: 003/050 | Batch 350/600 | Cost: 0.0382
Epoch: 003/050 | Batch 400/600 | Cost: 0.0347
Epoch: 003/050 | Batch 450/600 | Cost: 0.0347
Epoch: 003/050 | Batch 500/600 | Cost: 0.0328
Epoch: 003/050 | Batch 550/600 | Cost: 0.0324
Epoch: 003/050 | Train MSE: 0.03255
Epoch: 004/050 | Batch 000/600 | Cost: 0.0280
Epoch: 004/050 | Batch 050/600 | Cost: 0.0296
Epoch: 004/050 | Batch 100/600 | Cost: 0.0296
Epoch: 004/050 | Batch 150/600 | Cost: 0.0276
Epoch: 004/050 | Batch 200/600 | Cost: 0.0298
Epoch: 004/050 | Batch 250/600 | Cost: 0.0282
Epoch: 004/050 | Batch 300/600 | Cost: 0.0297
Epoch: 004/050 | Batch 350/600 | Cost: 0.0277
Epoch: 004/050 | Batch 400/600 | Cost: 0.0292
Epoch: 004/050 | Batch 450/600 | Cost: 0.0279
Epoch: 004/050 | Batch 500/600 | Cost: 0.0305
Epoch: 004/050 | Batch 550/600 | Cost: 0.0250
Epoch: 004/050 | Train MSE: 0.02692
Epoch: 005/050 | Batch 000/600 | Cost: 0.0301
Epoch: 005/050 | Batch 050/600 | Cost: 0.0246
Epoch: 005/050 | Batch 100/600 | Cost: 0.0265
Epoch: 005/050 | Batch 150/600 | Cost: 0.0294
Epoch: 005/050 | Batch 200/600 | Cost: 0.0290
Epoch: 005/050 | Batch 250/600 | Cost: 0.0247
Epoch: 005/050 | Batch 300/600 | Cost: 0.0260
Epoch: 005/050 | Batch 350/600 | Cost: 0.0272
Epoch: 005/050 | Batch 400/600 | Cost: 0.0271
Epoch: 005/050 | Batch 450/600 | Cost: 0.0256
Epoch: 005/050 | Batch 500/600 | Cost: 0.0268
Epoch: 005/050 | Batch 550/600 | Cost: 0.0260
Epoch: 005/050 | Train MSE: 0.02366
Epoch: 006/050 | Batch 000/600 | Cost: 0.0246
Epoch: 006/050 | Batch 050/600 | Cost: 0.0253
Epoch: 006/050 | Batch 100/600 | Cost: 0.0192
Epoch: 006/050 | Batch 150/600 | Cost: 0.0244
Epoch: 006/050 | Batch 200/600 | Cost: 0.0249
Epoch: 006/050 | Batch 250/600 | Cost: 0.0226
Epoch: 006/050 | Batch 300/600 | Cost: 0.0246
Epoch: 006/050 | Batch 350/600 | Cost: 0.0195
Epoch: 006/050 | Batch 400/600 | Cost: 0.0288
Epoch: 006/050 | Batch 450/600 | Cost: 0.0242
Epoch: 006/050 | Batch 500/600 | Cost: 0.0187
Epoch: 006/050 | Batch 550/600 | Cost: 0.0250
Epoch: 006/050 | Train MSE: 0.02154
Epoch: 007/050 | Batch 000/600 | Cost: 0.0158
Epoch: 007/050 | Batch 050/600 | Cost: 0.0216
Epoch: 007/050 | Batch 100/600 | Cost: 0.0218
Epoch: 007/050 | Batch 150/600 | Cost: 0.0260
Epoch: 007/050 | Batch 200/600 | Cost: 0.0220
Epoch: 007/050 | Batch 250/600 | Cost: 0.0179
Epoch: 007/050 | Batch 300/600 | Cost: 0.0215
Epoch: 007/050 | Batch 350/600 | Cost: 0.0221
Epoch: 007/050 | Batch 400/600 | Cost: 0.0155
Epoch: 007/050 | Batch 450/600 | Cost: 0.0196
Epoch: 007/050 | Batch 500/600 | Cost: 0.0239
Epoch: 007/050 | Batch 550/600 | Cost: 0.0203
Epoch: 007/050 | Train MSE: 0.02007
Epoch: 008/050 | Batch 000/600 | Cost: 0.0156
Epoch: 008/050 | Batch 050/600 | Cost: 0.0194
Epoch: 008/050 | Batch 100/600 | Cost: 0.0198
Epoch: 008/050 | Batch 150/600 | Cost: 0.0191
Epoch: 008/050 | Batch 200/600 | Cost: 0.0176
Epoch: 008/050 | Batch 250/600 | Cost: 0.0198
Epoch: 008/050 | Batch 300/600 | Cost: 0.0208
Epoch: 008/050 | Batch 350/600 | Cost: 0.0193
Epoch: 008/050 | Batch 400/600 | Cost: 0.0169
Epoch: 008/050 | Batch 450/600 | Cost: 0.0230
Epoch: 008/050 | Batch 500/600 | Cost: 0.0211
Epoch: 008/050 | Batch 550/600 | Cost: 0.0179
Epoch: 008/050 | Train MSE: 0.01893
Epoch: 009/050 | Batch 000/600 | Cost: 0.0187
Epoch: 009/050 | Batch 050/600 | Cost: 0.0216
Epoch: 009/050 | Batch 100/600 | Cost: 0.0236
Epoch: 009/050 | Batch 150/600 | Cost: 0.0179
Epoch: 009/050 | Batch 200/600 | Cost: 0.0184
Epoch: 009/050 | Batch 250/600 | Cost: 0.0151
Epoch: 009/050 | Batch 300/600 | Cost: 0.0190
Epoch: 009/050 | Batch 350/600 | Cost: 0.0156
Epoch: 009/050 | Batch 400/600 | Cost: 0.0159
Epoch: 009/050 | Batch 450/600 | Cost: 0.0211
Epoch: 009/050 | Batch 500/600 | Cost: 0.0157
Epoch: 009/050 | Batch 550/600 | Cost: 0.0167
Epoch: 009/050 | Train MSE: 0.01804
Epoch: 010/050 | Batch 000/600 | Cost: 0.0154
Epoch: 010/050 | Batch 050/600 | Cost: 0.0152
Epoch: 010/050 | Batch 100/600 | Cost: 0.0146
Epoch: 010/050 | Batch 150/600 | Cost: 0.0188
Epoch: 010/050 | Batch 200/600 | Cost: 0.0182
Epoch: 010/050 | Batch 250/600 | Cost: 0.0173
Epoch: 010/050 | Batch 300/600 | Cost: 0.0209
Epoch: 010/050 | Batch 350/600 | Cost: 0.0138
Epoch: 010/050 | Batch 400/600 | Cost: 0.0132
Epoch: 010/050 | Batch 450/600 | Cost: 0.0153
Epoch: 010/050 | Batch 500/600 | Cost: 0.0155
Epoch: 010/050 | Batch 550/600 | Cost: 0.0202
Epoch: 010/050 | Train MSE: 0.01728
Epoch: 011/050 | Batch 000/600 | Cost: 0.0133
Epoch: 011/050 | Batch 050/600 | Cost: 0.0136
Epoch: 011/050 | Batch 100/600 | Cost: 0.0222
Epoch: 011/050 | Batch 150/600 | Cost: 0.0130
Epoch: 011/050 | Batch 200/600 | Cost: 0.0171
Epoch: 011/050 | Batch 250/600 | Cost: 0.0214
Epoch: 011/050 | Batch 300/600 | Cost: 0.0244
Epoch: 011/050 | Batch 350/600 | Cost: 0.0168
Epoch: 011/050 | Batch 400/600 | Cost: 0.0115
Epoch: 011/050 | Batch 450/600 | Cost: 0.0123
Epoch: 011/050 | Batch 500/600 | Cost: 0.0251
Epoch: 011/050 | Batch 550/600 | Cost: 0.0128
Epoch: 011/050 | Train MSE: 0.01664
Epoch: 012/050 | Batch 000/600 | Cost: 0.0147
Epoch: 012/050 | Batch 050/600 | Cost: 0.0173
Epoch: 012/050 | Batch 100/600 | Cost: 0.0240
Epoch: 012/050 | Batch 150/600 | Cost: 0.0147
Epoch: 012/050 | Batch 200/600 | Cost: 0.0155
Epoch: 012/050 | Batch 250/600 | Cost: 0.0141
Epoch: 012/050 | Batch 300/600 | Cost: 0.0209
Epoch: 012/050 | Batch 350/600 | Cost: 0.0170
Epoch: 012/050 | Batch 400/600 | Cost: 0.0166
Epoch: 012/050 | Batch 450/600 | Cost: 0.0194
Epoch: 012/050 | Batch 500/600 | Cost: 0.0213
Epoch: 012/050 | Batch 550/600 | Cost: 0.0171
Epoch: 012/050 | Train MSE: 0.01610
Epoch: 013/050 | Batch 000/600 | Cost: 0.0117
Epoch: 013/050 | Batch 050/600 | Cost: 0.0138
Epoch: 013/050 | Batch 100/600 | Cost: 0.0171
Epoch: 013/050 | Batch 150/600 | Cost: 0.0202
Epoch: 013/050 | Batch 200/600 | Cost: 0.0181
Epoch: 013/050 | Batch 250/600 | Cost: 0.0194
Epoch: 013/050 | Batch 300/600 | Cost: 0.0222
Epoch: 013/050 | Batch 350/600 | Cost: 0.0152
Epoch: 013/050 | Batch 400/600 | Cost: 0.0158
Epoch: 013/050 | Batch 450/600 | Cost: 0.0131
Epoch: 013/050 | Batch 500/600 | Cost: 0.0142
Epoch: 013/050 | Batch 550/600 | Cost: 0.0110
Epoch: 013/050 | Train MSE: 0.01561
Epoch: 014/050 | Batch 000/600 | Cost: 0.0186
Epoch: 014/050 | Batch 050/600 | Cost: 0.0157
Epoch: 014/050 | Batch 100/600 | Cost: 0.0168
Epoch: 014/050 | Batch 150/600 | Cost: 0.0136
Epoch: 014/050 | Batch 200/600 | Cost: 0.0214
Epoch: 014/050 | Batch 250/600 | Cost: 0.0192
Epoch: 014/050 | Batch 300/600 | Cost: 0.0102
Epoch: 014/050 | Batch 350/600 | Cost: 0.0087
Epoch: 014/050 | Batch 400/600 | Cost: 0.0140
Epoch: 014/050 | Batch 450/600 | Cost: 0.0110
Epoch: 014/050 | Batch 500/600 | Cost: 0.0208
Epoch: 014/050 | Batch 550/600 | Cost: 0.0156
Epoch: 014/050 | Train MSE: 0.01519
Epoch: 015/050 | Batch 000/600 | Cost: 0.0178
Epoch: 015/050 | Batch 050/600 | Cost: 0.0154
Epoch: 015/050 | Batch 100/600 | Cost: 0.0204
Epoch: 015/050 | Batch 150/600 | Cost: 0.0085
Epoch: 015/050 | Batch 200/600 | Cost: 0.0137
Epoch: 015/050 | Batch 250/600 | Cost: 0.0124
Epoch: 015/050 | Batch 300/600 | Cost: 0.0133
Epoch: 015/050 | Batch 350/600 | Cost: 0.0169
Epoch: 015/050 | Batch 400/600 | Cost: 0.0172
Epoch: 015/050 | Batch 450/600 | Cost: 0.0137
Epoch: 015/050 | Batch 500/600 | Cost: 0.0184
Epoch: 015/050 | Batch 550/600 | Cost: 0.0187
Epoch: 015/050 | Train MSE: 0.01481
Epoch: 016/050 | Batch 000/600 | Cost: 0.0161
Epoch: 016/050 | Batch 050/600 | Cost: 0.0138
Epoch: 016/050 | Batch 100/600 | Cost: 0.0149
Epoch: 016/050 | Batch 150/600 | Cost: 0.0149
Epoch: 016/050 | Batch 200/600 | Cost: 0.0166
Epoch: 016/050 | Batch 250/600 | Cost: 0.0127
Epoch: 016/050 | Batch 300/600 | Cost: 0.0128
Epoch: 016/050 | Batch 350/600 | Cost: 0.0111
Epoch: 016/050 | Batch 400/600 | Cost: 0.0131
Epoch: 016/050 | Batch 450/600 | Cost: 0.0180
Epoch: 016/050 | Batch 500/600 | Cost: 0.0101
Epoch: 016/050 | Batch 550/600 | Cost: 0.0188
Epoch: 016/050 | Train MSE: 0.01447
Epoch: 017/050 | Batch 000/600 | Cost: 0.0138
Epoch: 017/050 | Batch 050/600 | Cost: 0.0231
Epoch: 017/050 | Batch 100/600 | Cost: 0.0111
Epoch: 017/050 | Batch 150/600 | Cost: 0.0115
Epoch: 017/050 | Batch 200/600 | Cost: 0.0114
Epoch: 017/050 | Batch 250/600 | Cost: 0.0133
Epoch: 017/050 | Batch 300/600 | Cost: 0.0112
Epoch: 017/050 | Batch 350/600 | Cost: 0.0208
Epoch: 017/050 | Batch 400/600 | Cost: 0.0160
Epoch: 017/050 | Batch 450/600 | Cost: 0.0165
Epoch: 017/050 | Batch 500/600 | Cost: 0.0148
Epoch: 017/050 | Batch 550/600 | Cost: 0.0078
Epoch: 017/050 | Train MSE: 0.01416
Epoch: 018/050 | Batch 000/600 | Cost: 0.0161
Epoch: 018/050 | Batch 050/600 | Cost: 0.0130
Epoch: 018/050 | Batch 100/600 | Cost: 0.0158
Epoch: 018/050 | Batch 150/600 | Cost: 0.0194
Epoch: 018/050 | Batch 200/600 | Cost: 0.0082
Epoch: 018/050 | Batch 250/600 | Cost: 0.0140
Epoch: 018/050 | Batch 300/600 | Cost: 0.0120
Epoch: 018/050 | Batch 350/600 | Cost: 0.0142
Epoch: 018/050 | Batch 400/600 | Cost: 0.0133
Epoch: 018/050 | Batch 450/600 | Cost: 0.0147
Epoch: 018/050 | Batch 500/600 | Cost: 0.0133
Epoch: 018/050 | Batch 550/600 | Cost: 0.0170
Epoch: 018/050 | Train MSE: 0.01386
Epoch: 019/050 | Batch 000/600 | Cost: 0.0094
Epoch: 019/050 | Batch 050/600 | Cost: 0.0139
Epoch: 019/050 | Batch 100/600 | Cost: 0.0147
Epoch: 019/050 | Batch 150/600 | Cost: 0.0157
Epoch: 019/050 | Batch 200/600 | Cost: 0.0106
Epoch: 019/050 | Batch 250/600 | Cost: 0.0134
Epoch: 019/050 | Batch 300/600 | Cost: 0.0133
Epoch: 019/050 | Batch 350/600 | Cost: 0.0187
Epoch: 019/050 | Batch 400/600 | Cost: 0.0135
Epoch: 019/050 | Batch 450/600 | Cost: 0.0124
Epoch: 019/050 | Batch 500/600 | Cost: 0.0156
Epoch: 019/050 | Batch 550/600 | Cost: 0.0145
Epoch: 019/050 | Train MSE: 0.01361
Epoch: 020/050 | Batch 000/600 | Cost: 0.0169
Epoch: 020/050 | Batch 050/600 | Cost: 0.0079
Epoch: 020/050 | Batch 100/600 | Cost: 0.0163
Epoch: 020/050 | Batch 150/600 | Cost: 0.0164
Epoch: 020/050 | Batch 200/600 | Cost: 0.0149
Epoch: 020/050 | Batch 250/600 | Cost: 0.0157
Epoch: 020/050 | Batch 300/600 | Cost: 0.0133
Epoch: 020/050 | Batch 350/600 | Cost: 0.0089
Epoch: 020/050 | Batch 400/600 | Cost: 0.0136
Epoch: 020/050 | Batch 450/600 | Cost: 0.0110
Epoch: 020/050 | Batch 500/600 | Cost: 0.0140
Epoch: 020/050 | Batch 550/600 | Cost: 0.0168
Epoch: 020/050 | Train MSE: 0.01335
Epoch: 021/050 | Batch 000/600 | Cost: 0.0152
Epoch: 021/050 | Batch 050/600 | Cost: 0.0126
Epoch: 021/050 | Batch 100/600 | Cost: 0.0118
Epoch: 021/050 | Batch 150/600 | Cost: 0.0151
Epoch: 021/050 | Batch 200/600 | Cost: 0.0110
Epoch: 021/050 | Batch 250/600 | Cost: 0.0127
Epoch: 021/050 | Batch 300/600 | Cost: 0.0092
Epoch: 021/050 | Batch 350/600 | Cost: 0.0133
Epoch: 021/050 | Batch 400/600 | Cost: 0.0120
Epoch: 021/050 | Batch 450/600 | Cost: 0.0107
Epoch: 021/050 | Batch 500/600 | Cost: 0.0175
Epoch: 021/050 | Batch 550/600 | Cost: 0.0133
Epoch: 021/050 | Train MSE: 0.01311
Epoch: 022/050 | Batch 000/600 | Cost: 0.0196
Epoch: 022/050 | Batch 050/600 | Cost: 0.0163
Epoch: 022/050 | Batch 100/600 | Cost: 0.0152
Epoch: 022/050 | Batch 150/600 | Cost: 0.0126
Epoch: 022/050 | Batch 200/600 | Cost: 0.0126
Epoch: 022/050 | Batch 250/600 | Cost: 0.0123
Epoch: 022/050 | Batch 300/600 | Cost: 0.0122
Epoch: 022/050 | Batch 350/600 | Cost: 0.0091
Epoch: 022/050 | Batch 400/600 | Cost: 0.0125
Epoch: 022/050 | Batch 450/600 | Cost: 0.0165
Epoch: 022/050 | Batch 500/600 | Cost: 0.0116
Epoch: 022/050 | Batch 550/600 | Cost: 0.0161
Epoch: 022/050 | Train MSE: 0.01289
Epoch: 023/050 | Batch 000/600 | Cost: 0.0106
Epoch: 023/050 | Batch 050/600 | Cost: 0.0089
Epoch: 023/050 | Batch 100/600 | Cost: 0.0153
Epoch: 023/050 | Batch 150/600 | Cost: 0.0155
Epoch: 023/050 | Batch 200/600 | Cost: 0.0087
Epoch: 023/050 | Batch 250/600 | Cost: 0.0130
Epoch: 023/050 | Batch 300/600 | Cost: 0.0133
Epoch: 023/050 | Batch 350/600 | Cost: 0.0070
Epoch: 023/050 | Batch 400/600 | Cost: 0.0107
Epoch: 023/050 | Batch 450/600 | Cost: 0.0177
Epoch: 023/050 | Batch 500/600 | Cost: 0.0096
Epoch: 023/050 | Batch 550/600 | Cost: 0.0163
Epoch: 023/050 | Train MSE: 0.01269
Epoch: 024/050 | Batch 000/600 | Cost: 0.0099
Epoch: 024/050 | Batch 050/600 | Cost: 0.0103
Epoch: 024/050 | Batch 100/600 | Cost: 0.0128
Epoch: 024/050 | Batch 150/600 | Cost: 0.0112
Epoch: 024/050 | Batch 200/600 | Cost: 0.0107
Epoch: 024/050 | Batch 250/600 | Cost: 0.0123
Epoch: 024/050 | Batch 300/600 | Cost: 0.0155
Epoch: 024/050 | Batch 350/600 | Cost: 0.0181
Epoch: 024/050 | Batch 400/600 | Cost: 0.0152
Epoch: 024/050 | Batch 450/600 | Cost: 0.0140
Epoch: 024/050 | Batch 500/600 | Cost: 0.0099
Epoch: 024/050 | Batch 550/600 | Cost: 0.0158
Epoch: 024/050 | Train MSE: 0.01250
Epoch: 025/050 | Batch 000/600 | Cost: 0.0117
Epoch: 025/050 | Batch 050/600 | Cost: 0.0114
Epoch: 025/050 | Batch 100/600 | Cost: 0.0162
Epoch: 025/050 | Batch 150/600 | Cost: 0.0120
Epoch: 025/050 | Batch 200/600 | Cost: 0.0119
Epoch: 025/050 | Batch 250/600 | Cost: 0.0113
Epoch: 025/050 | Batch 300/600 | Cost: 0.0167
Epoch: 025/050 | Batch 350/600 | Cost: 0.0113
Epoch: 025/050 | Batch 400/600 | Cost: 0.0125
Epoch: 025/050 | Batch 450/600 | Cost: 0.0108
Epoch: 025/050 | Batch 500/600 | Cost: 0.0122
Epoch: 025/050 | Batch 550/600 | Cost: 0.0094
Epoch: 025/050 | Train MSE: 0.01232
Epoch: 026/050 | Batch 000/600 | Cost: 0.0081
Epoch: 026/050 | Batch 050/600 | Cost: 0.0102
Epoch: 026/050 | Batch 100/600 | Cost: 0.0121
Epoch: 026/050 | Batch 150/600 | Cost: 0.0211
Epoch: 026/050 | Batch 200/600 | Cost: 0.0142
Epoch: 026/050 | Batch 250/600 | Cost: 0.0094
Epoch: 026/050 | Batch 300/600 | Cost: 0.0128
Epoch: 026/050 | Batch 350/600 | Cost: 0.0100
Epoch: 026/050 | Batch 400/600 | Cost: 0.0135
Epoch: 026/050 | Batch 450/600 | Cost: 0.0175
Epoch: 026/050 | Batch 500/600 | Cost: 0.0109
Epoch: 026/050 | Batch 550/600 | Cost: 0.0123
Epoch: 026/050 | Train MSE: 0.01214
Epoch: 027/050 | Batch 000/600 | Cost: 0.0116
Epoch: 027/050 | Batch 050/600 | Cost: 0.0148
Epoch: 027/050 | Batch 100/600 | Cost: 0.0113
Epoch: 027/050 | Batch 150/600 | Cost: 0.0181
Epoch: 027/050 | Batch 200/600 | Cost: 0.0101
Epoch: 027/050 | Batch 250/600 | Cost: 0.0134
Epoch: 027/050 | Batch 300/600 | Cost: 0.0153
Epoch: 027/050 | Batch 350/600 | Cost: 0.0096
Epoch: 027/050 | Batch 400/600 | Cost: 0.0114
Epoch: 027/050 | Batch 450/600 | Cost: 0.0121
Epoch: 027/050 | Batch 500/600 | Cost: 0.0119
Epoch: 027/050 | Batch 550/600 | Cost: 0.0162
Epoch: 027/050 | Train MSE: 0.01198
Epoch: 028/050 | Batch 000/600 | Cost: 0.0079
Epoch: 028/050 | Batch 050/600 | Cost: 0.0148
Epoch: 028/050 | Batch 100/600 | Cost: 0.0111
Epoch: 028/050 | Batch 150/600 | Cost: 0.0178
Epoch: 028/050 | Batch 200/600 | Cost: 0.0122
Epoch: 028/050 | Batch 250/600 | Cost: 0.0117
Epoch: 028/050 | Batch 300/600 | Cost: 0.0117
Epoch: 028/050 | Batch 350/600 | Cost: 0.0110
Epoch: 028/050 | Batch 400/600 | Cost: 0.0129
Epoch: 028/050 | Batch 450/600 | Cost: 0.0117
Epoch: 028/050 | Batch 500/600 | Cost: 0.0089
Epoch: 028/050 | Batch 550/600 | Cost: 0.0065
Epoch: 028/050 | Train MSE: 0.01182
Epoch: 029/050 | Batch 000/600 | Cost: 0.0084
Epoch: 029/050 | Batch 050/600 | Cost: 0.0112
Epoch: 029/050 | Batch 100/600 | Cost: 0.0111
Epoch: 029/050 | Batch 150/600 | Cost: 0.0176
Epoch: 029/050 | Batch 200/600 | Cost: 0.0153
Epoch: 029/050 | Batch 250/600 | Cost: 0.0148
Epoch: 029/050 | Batch 300/600 | Cost: 0.0084
Epoch: 029/050 | Batch 350/600 | Cost: 0.0117
Epoch: 029/050 | Batch 400/600 | Cost: 0.0061
Epoch: 029/050 | Batch 450/600 | Cost: 0.0119
Epoch: 029/050 | Batch 500/600 | Cost: 0.0137
Epoch: 029/050 | Batch 550/600 | Cost: 0.0130
Epoch: 029/050 | Train MSE: 0.01168
Epoch: 030/050 | Batch 000/600 | Cost: 0.0132
Epoch: 030/050 | Batch 050/600 | Cost: 0.0143
Epoch: 030/050 | Batch 100/600 | Cost: 0.0119
Epoch: 030/050 | Batch 150/600 | Cost: 0.0113
Epoch: 030/050 | Batch 200/600 | Cost: 0.0134
Epoch: 030/050 | Batch 250/600 | Cost: 0.0113
Epoch: 030/050 | Batch 300/600 | Cost: 0.0150
Epoch: 030/050 | Batch 350/600 | Cost: 0.0111
Epoch: 030/050 | Batch 400/600 | Cost: 0.0113
Epoch: 030/050 | Batch 450/600 | Cost: 0.0167
Epoch: 030/050 | Batch 500/600 | Cost: 0.0116
Epoch: 030/050 | Batch 550/600 | Cost: 0.0109
Epoch: 030/050 | Train MSE: 0.01152
Epoch: 031/050 | Batch 000/600 | Cost: 0.0068
Epoch: 031/050 | Batch 050/600 | Cost: 0.0130
Epoch: 031/050 | Batch 100/600 | Cost: 0.0128
Epoch: 031/050 | Batch 150/600 | Cost: 0.0108
Epoch: 031/050 | Batch 200/600 | Cost: 0.0096
Epoch: 031/050 | Batch 250/600 | Cost: 0.0086
Epoch: 031/050 | Batch 300/600 | Cost: 0.0094
Epoch: 031/050 | Batch 350/600 | Cost: 0.0130
Epoch: 031/050 | Batch 400/600 | Cost: 0.0165
Epoch: 031/050 | Batch 450/600 | Cost: 0.0119
Epoch: 031/050 | Batch 500/600 | Cost: 0.0097
Epoch: 031/050 | Batch 550/600 | Cost: 0.0112
Epoch: 031/050 | Train MSE: 0.01140
Epoch: 032/050 | Batch 000/600 | Cost: 0.0101
Epoch: 032/050 | Batch 050/600 | Cost: 0.0111
Epoch: 032/050 | Batch 100/600 | Cost: 0.0141
Epoch: 032/050 | Batch 150/600 | Cost: 0.0121
Epoch: 032/050 | Batch 200/600 | Cost: 0.0089
Epoch: 032/050 | Batch 250/600 | Cost: 0.0103
Epoch: 032/050 | Batch 300/600 | Cost: 0.0128
Epoch: 032/050 | Batch 350/600 | Cost: 0.0118
Epoch: 032/050 | Batch 400/600 | Cost: 0.0143
Epoch: 032/050 | Batch 450/600 | Cost: 0.0073
Epoch: 032/050 | Batch 500/600 | Cost: 0.0109
Epoch: 032/050 | Batch 550/600 | Cost: 0.0104
Epoch: 032/050 | Train MSE: 0.01126
Epoch: 033/050 | Batch 000/600 | Cost: 0.0117
Epoch: 033/050 | Batch 050/600 | Cost: 0.0094
Epoch: 033/050 | Batch 100/600 | Cost: 0.0150
Epoch: 033/050 | Batch 150/600 | Cost: 0.0121
Epoch: 033/050 | Batch 200/600 | Cost: 0.0142
Epoch: 033/050 | Batch 250/600 | Cost: 0.0075
Epoch: 033/050 | Batch 300/600 | Cost: 0.0121
Epoch: 033/050 | Batch 350/600 | Cost: 0.0111
Epoch: 033/050 | Batch 400/600 | Cost: 0.0122
Epoch: 033/050 | Batch 450/600 | Cost: 0.0099
Epoch: 033/050 | Batch 500/600 | Cost: 0.0153
Epoch: 033/050 | Batch 550/600 | Cost: 0.0114
Epoch: 033/050 | Train MSE: 0.01112
Epoch: 034/050 | Batch 000/600 | Cost: 0.0111
Epoch: 034/050 | Batch 050/600 | Cost: 0.0076
Epoch: 034/050 | Batch 100/600 | Cost: 0.0159
Epoch: 034/050 | Batch 150/600 | Cost: 0.0145
Epoch: 034/050 | Batch 200/600 | Cost: 0.0121
Epoch: 034/050 | Batch 250/600 | Cost: 0.0123
Epoch: 034/050 | Batch 300/600 | Cost: 0.0045
Epoch: 034/050 | Batch 350/600 | Cost: 0.0153
Epoch: 034/050 | Batch 400/600 | Cost: 0.0151
Epoch: 034/050 | Batch 450/600 | Cost: 0.0104
Epoch: 034/050 | Batch 500/600 | Cost: 0.0123
Epoch: 034/050 | Batch 550/600 | Cost: 0.0134
Epoch: 034/050 | Train MSE: 0.01100
Epoch: 035/050 | Batch 000/600 | Cost: 0.0061
Epoch: 035/050 | Batch 050/600 | Cost: 0.0079
Epoch: 035/050 | Batch 100/600 | Cost: 0.0172
Epoch: 035/050 | Batch 150/600 | Cost: 0.0097
Epoch: 035/050 | Batch 200/600 | Cost: 0.0096
Epoch: 035/050 | Batch 250/600 | Cost: 0.0030
Epoch: 035/050 | Batch 300/600 | Cost: 0.0140
Epoch: 035/050 | Batch 350/600 | Cost: 0.0137
Epoch: 035/050 | Batch 400/600 | Cost: 0.0121
Epoch: 035/050 | Batch 450/600 | Cost: 0.0121
Epoch: 035/050 | Batch 500/600 | Cost: 0.0096
Epoch: 035/050 | Batch 550/600 | Cost: 0.0152
Epoch: 035/050 | Train MSE: 0.01088
Epoch: 036/050 | Batch 000/600 | Cost: 0.0139
Epoch: 036/050 | Batch 050/600 | Cost: 0.0085
Epoch: 036/050 | Batch 100/600 | Cost: 0.0046
Epoch: 036/050 | Batch 150/600 | Cost: 0.0099
Epoch: 036/050 | Batch 200/600 | Cost: 0.0199
Epoch: 036/050 | Batch 250/600 | Cost: 0.0100
Epoch: 036/050 | Batch 300/600 | Cost: 0.0131
Epoch: 036/050 | Batch 350/600 | Cost: 0.0126
Epoch: 036/050 | Batch 400/600 | Cost: 0.0097
Epoch: 036/050 | Batch 450/600 | Cost: 0.0073
Epoch: 036/050 | Batch 500/600 | Cost: 0.0081
Epoch: 036/050 | Batch 550/600 | Cost: 0.0107
Epoch: 036/050 | Train MSE: 0.01077
Epoch: 037/050 | Batch 000/600 | Cost: 0.0090
Epoch: 037/050 | Batch 050/600 | Cost: 0.0115
Epoch: 037/050 | Batch 100/600 | Cost: 0.0126
Epoch: 037/050 | Batch 150/600 | Cost: 0.0115
Epoch: 037/050 | Batch 200/600 | Cost: 0.0129
Epoch: 037/050 | Batch 250/600 | Cost: 0.0121
Epoch: 037/050 | Batch 300/600 | Cost: 0.0158
Epoch: 037/050 | Batch 350/600 | Cost: 0.0121
Epoch: 037/050 | Batch 400/600 | Cost: 0.0085
Epoch: 037/050 | Batch 450/600 | Cost: 0.0076
Epoch: 037/050 | Batch 500/600 | Cost: 0.0073
Epoch: 037/050 | Batch 550/600 | Cost: 0.0136
Epoch: 037/050 | Train MSE: 0.01065
Epoch: 038/050 | Batch 000/600 | Cost: 0.0112
Epoch: 038/050 | Batch 050/600 | Cost: 0.0101
Epoch: 038/050 | Batch 100/600 | Cost: 0.0143
Epoch: 038/050 | Batch 150/600 | Cost: 0.0121
Epoch: 038/050 | Batch 200/600 | Cost: 0.0144
Epoch: 038/050 | Batch 250/600 | Cost: 0.0056
Epoch: 038/050 | Batch 300/600 | Cost: 0.0094
Epoch: 038/050 | Batch 350/600 | Cost: 0.0128
Epoch: 038/050 | Batch 400/600 | Cost: 0.0083
Epoch: 038/050 | Batch 450/600 | Cost: 0.0101
Epoch: 038/050 | Batch 500/600 | Cost: 0.0136
Epoch: 038/050 | Batch 550/600 | Cost: 0.0078
Epoch: 038/050 | Train MSE: 0.01055
Epoch: 039/050 | Batch 000/600 | Cost: 0.0055
Epoch: 039/050 | Batch 050/600 | Cost: 0.0110
Epoch: 039/050 | Batch 100/600 | Cost: 0.0067
Epoch: 039/050 | Batch 150/600 | Cost: 0.0074
Epoch: 039/050 | Batch 200/600 | Cost: 0.0097
Epoch: 039/050 | Batch 250/600 | Cost: 0.0120
Epoch: 039/050 | Batch 300/600 | Cost: 0.0116
Epoch: 039/050 | Batch 350/600 | Cost: 0.0100
Epoch: 039/050 | Batch 400/600 | Cost: 0.0146
Epoch: 039/050 | Batch 450/600 | Cost: 0.0076
Epoch: 039/050 | Batch 500/600 | Cost: 0.0091
Epoch: 039/050 | Batch 550/600 | Cost: 0.0137
Epoch: 039/050 | Train MSE: 0.01045
Epoch: 040/050 | Batch 000/600 | Cost: 0.0136
Epoch: 040/050 | Batch 050/600 | Cost: 0.0108
Epoch: 040/050 | Batch 100/600 | Cost: 0.0089
Epoch: 040/050 | Batch 150/600 | Cost: 0.0080
Epoch: 040/050 | Batch 200/600 | Cost: 0.0094
Epoch: 040/050 | Batch 250/600 | Cost: 0.0089
Epoch: 040/050 | Batch 300/600 | Cost: 0.0089
Epoch: 040/050 | Batch 350/600 | Cost: 0.0098
Epoch: 040/050 | Batch 400/600 | Cost: 0.0076
Epoch: 040/050 | Batch 450/600 | Cost: 0.0098
Epoch: 040/050 | Batch 500/600 | Cost: 0.0106
Epoch: 040/050 | Batch 550/600 | Cost: 0.0140
Epoch: 040/050 | Train MSE: 0.01034
Epoch: 041/050 | Batch 000/600 | Cost: 0.0121
Epoch: 041/050 | Batch 050/600 | Cost: 0.0161
Epoch: 041/050 | Batch 100/600 | Cost: 0.0093
Epoch: 041/050 | Batch 150/600 | Cost: 0.0104
Epoch: 041/050 | Batch 200/600 | Cost: 0.0102
Epoch: 041/050 | Batch 250/600 | Cost: 0.0076
Epoch: 041/050 | Batch 300/600 | Cost: 0.0135
Epoch: 041/050 | Batch 350/600 | Cost: 0.0062
Epoch: 041/050 | Batch 400/600 | Cost: 0.0119
Epoch: 041/050 | Batch 450/600 | Cost: 0.0114
Epoch: 041/050 | Batch 500/600 | Cost: 0.0139
Epoch: 041/050 | Batch 550/600 | Cost: 0.0131
Epoch: 041/050 | Train MSE: 0.01024
Epoch: 042/050 | Batch 000/600 | Cost: 0.0097
Epoch: 042/050 | Batch 050/600 | Cost: 0.0047
Epoch: 042/050 | Batch 100/600 | Cost: 0.0105
Epoch: 042/050 | Batch 150/600 | Cost: 0.0050
Epoch: 042/050 | Batch 200/600 | Cost: 0.0110
Epoch: 042/050 | Batch 250/600 | Cost: 0.0110
Epoch: 042/050 | Batch 300/600 | Cost: 0.0099
Epoch: 042/050 | Batch 350/600 | Cost: 0.0104
Epoch: 042/050 | Batch 400/600 | Cost: 0.0166
Epoch: 042/050 | Batch 450/600 | Cost: 0.0085
Epoch: 042/050 | Batch 500/600 | Cost: 0.0101
Epoch: 042/050 | Batch 550/600 | Cost: 0.0096
Epoch: 042/050 | Train MSE: 0.01015
Epoch: 043/050 | Batch 000/600 | Cost: 0.0072
Epoch: 043/050 | Batch 050/600 | Cost: 0.0099
Epoch: 043/050 | Batch 100/600 | Cost: 0.0092
Epoch: 043/050 | Batch 150/600 | Cost: 0.0106
Epoch: 043/050 | Batch 200/600 | Cost: 0.0114
Epoch: 043/050 | Batch 250/600 | Cost: 0.0130
Epoch: 043/050 | Batch 300/600 | Cost: 0.0113
Epoch: 043/050 | Batch 350/600 | Cost: 0.0084
Epoch: 043/050 | Batch 400/600 | Cost: 0.0169
Epoch: 043/050 | Batch 450/600 | Cost: 0.0060
Epoch: 043/050 | Batch 500/600 | Cost: 0.0092
Epoch: 043/050 | Batch 550/600 | Cost: 0.0098
Epoch: 043/050 | Train MSE: 0.01004
Epoch: 044/050 | Batch 000/600 | Cost: 0.0114
Epoch: 044/050 | Batch 050/600 | Cost: 0.0075
Epoch: 044/050 | Batch 100/600 | Cost: 0.0076
Epoch: 044/050 | Batch 150/600 | Cost: 0.0106
Epoch: 044/050 | Batch 200/600 | Cost: 0.0082
Epoch: 044/050 | Batch 250/600 | Cost: 0.0088
Epoch: 044/050 | Batch 300/600 | Cost: 0.0172
Epoch: 044/050 | Batch 350/600 | Cost: 0.0086
Epoch: 044/050 | Batch 400/600 | Cost: 0.0099
Epoch: 044/050 | Batch 450/600 | Cost: 0.0108
Epoch: 044/050 | Batch 500/600 | Cost: 0.0141
Epoch: 044/050 | Batch 550/600 | Cost: 0.0107
Epoch: 044/050 | Train MSE: 0.00996
Epoch: 045/050 | Batch 000/600 | Cost: 0.0094
Epoch: 045/050 | Batch 050/600 | Cost: 0.0125
Epoch: 045/050 | Batch 100/600 | Cost: 0.0117
Epoch: 045/050 | Batch 150/600 | Cost: 0.0135
Epoch: 045/050 | Batch 200/600 | Cost: 0.0077
Epoch: 045/050 | Batch 250/600 | Cost: 0.0043
Epoch: 045/050 | Batch 300/600 | Cost: 0.0055
Epoch: 045/050 | Batch 350/600 | Cost: 0.0106
Epoch: 045/050 | Batch 400/600 | Cost: 0.0101
Epoch: 045/050 | Batch 450/600 | Cost: 0.0130
Epoch: 045/050 | Batch 500/600 | Cost: 0.0080
Epoch: 045/050 | Batch 550/600 | Cost: 0.0089
Epoch: 045/050 | Train MSE: 0.00987
Epoch: 046/050 | Batch 000/600 | Cost: 0.0135
Epoch: 046/050 | Batch 050/600 | Cost: 0.0082
Epoch: 046/050 | Batch 100/600 | Cost: 0.0121
Epoch: 046/050 | Batch 150/600 | Cost: 0.0121
Epoch: 046/050 | Batch 200/600 | Cost: 0.0106
Epoch: 046/050 | Batch 250/600 | Cost: 0.0080
Epoch: 046/050 | Batch 300/600 | Cost: 0.0093
Epoch: 046/050 | Batch 350/600 | Cost: 0.0075
Epoch: 046/050 | Batch 400/600 | Cost: 0.0113
Epoch: 046/050 | Batch 450/600 | Cost: 0.0118
Epoch: 046/050 | Batch 500/600 | Cost: 0.0076
Epoch: 046/050 | Batch 550/600 | Cost: 0.0084
Epoch: 046/050 | Train MSE: 0.00979
Epoch: 047/050 | Batch 000/600 | Cost: 0.0073
Epoch: 047/050 | Batch 050/600 | Cost: 0.0102
Epoch: 047/050 | Batch 100/600 | Cost: 0.0106
Epoch: 047/050 | Batch 150/600 | Cost: 0.0075
Epoch: 047/050 | Batch 200/600 | Cost: 0.0121
Epoch: 047/050 | Batch 250/600 | Cost: 0.0110
Epoch: 047/050 | Batch 300/600 | Cost: 0.0078
Epoch: 047/050 | Batch 350/600 | Cost: 0.0099
Epoch: 047/050 | Batch 400/600 | Cost: 0.0090
Epoch: 047/050 | Batch 450/600 | Cost: 0.0119
Epoch: 047/050 | Batch 500/600 | Cost: 0.0080
Epoch: 047/050 | Batch 550/600 | Cost: 0.0136
Epoch: 047/050 | Train MSE: 0.00969
Epoch: 048/050 | Batch 000/600 | Cost: 0.0063
Epoch: 048/050 | Batch 050/600 | Cost: 0.0119
Epoch: 048/050 | Batch 100/600 | Cost: 0.0110
Epoch: 048/050 | Batch 150/600 | Cost: 0.0121
Epoch: 048/050 | Batch 200/600 | Cost: 0.0099
Epoch: 048/050 | Batch 250/600 | Cost: 0.0094
Epoch: 048/050 | Batch 300/600 | Cost: 0.0091
Epoch: 048/050 | Batch 350/600 | Cost: 0.0094
Epoch: 048/050 | Batch 400/600 | Cost: 0.0157
Epoch: 048/050 | Batch 450/600 | Cost: 0.0105
Epoch: 048/050 | Batch 500/600 | Cost: 0.0088
Epoch: 048/050 | Batch 550/600 | Cost: 0.0052
Epoch: 048/050 | Train MSE: 0.00961
Epoch: 049/050 | Batch 000/600 | Cost: 0.0111
Epoch: 049/050 | Batch 050/600 | Cost: 0.0136
Epoch: 049/050 | Batch 100/600 | Cost: 0.0113
Epoch: 049/050 | Batch 150/600 | Cost: 0.0112
Epoch: 049/050 | Batch 200/600 | Cost: 0.0062
Epoch: 049/050 | Batch 250/600 | Cost: 0.0117
Epoch: 049/050 | Batch 300/600 | Cost: 0.0106
Epoch: 049/050 | Batch 350/600 | Cost: 0.0107
Epoch: 049/050 | Batch 400/600 | Cost: 0.0087
Epoch: 049/050 | Batch 450/600 | Cost: 0.0066
Epoch: 049/050 | Batch 500/600 | Cost: 0.0074
Epoch: 049/050 | Batch 550/600 | Cost: 0.0091
Epoch: 049/050 | Train MSE: 0.00954
Epoch: 050/050 | Batch 000/600 | Cost: 0.0040
Epoch: 050/050 | Batch 050/600 | Cost: 0.0141
Epoch: 050/050 | Batch 100/600 | Cost: 0.0109
Epoch: 050/050 | Batch 150/600 | Cost: 0.0076
Epoch: 050/050 | Batch 200/600 | Cost: 0.0097
Epoch: 050/050 | Batch 250/600 | Cost: 0.0067
Epoch: 050/050 | Batch 300/600 | Cost: 0.0097
Epoch: 050/050 | Batch 350/600 | Cost: 0.0059
Epoch: 050/050 | Batch 400/600 | Cost: 0.0087
Epoch: 050/050 | Batch 450/600 | Cost: 0.0089
Epoch: 050/050 | Batch 500/600 | Cost: 0.0098
Epoch: 050/050 | Batch 550/600 | Cost: 0.0083
Epoch: 050/050 | Train MSE: 0.00945

Evaluation
plt.plot(range(len(minibatch_cost)), minibatch_cost)
plt.ylabel('Mean Squared Error')
plt.xlabel('Minibatch')
plt.show()

plt.plot(range(len(epoch_cost)), epoch_cost)
plt.ylabel('Mean Squared Error')
plt.xlabel('Epoch')
plt.show()

def compute_accuracy(net, data_loader):


correct_pred, num_examples = 0, 0
with torch.no_grad():
for features, targets in data_loader:
features = features.view(-1, 28*28)
_, outputs = net.forward(features)
predicted_labels = torch.argmax(outputs, 1)
num_examples += targets.size(0)
correct_pred += (predicted_labels == targets).sum()
return correct_pred.float()/num_examples * 100

print('Training Accuracy: %.2f' % compute_accuracy(model, train_loader))


print('Test Accuracy: %.2f' % compute_accuracy(model, test_loader))

Training Accuracy: 94.69


Test Accuracy: 94.53

Visual Inspection
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt

for features, targets in test_loader:


break

fig, ax = plt.subplots(1, 4)
for i in range(4):
ax[i].imshow(features[i].view(28, 28), cmap=matplotlib.cm.binary)

plt.show()

_, predictions = model.forward(features[:4].view(-1, 28*28))


predictions = torch.argmax(predictions, dim=1)
print('Predicted labels', predictions)

Predicted labels tensor([7, 2, 1, 0])


Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/fontdata.js

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy