-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPyTorch_11_Train_Validate.py
More file actions
93 lines (71 loc) · 2.69 KB
/
PyTorch_11_Train_Validate.py
File metadata and controls
93 lines (71 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import torch
from torch.utils.data import Dataset,DataLoader
from torch import nn,optim
import numpy as np
import matplotlib.pyplot as plt
import sys
class SampleDataset(Dataset):
def __init__(self,train = True):
self.X = torch.arange(-3,3,0.1).view(-1,1)
self.f = -3 * self.X + 1
self.Y = self.f + 0.1 * torch.randn(self.X.size())
self.len = self.X.shape[0]
#outliers
if (train == True ):
self.Y[0] = 0
self.Y[50:55] = 20
else:
pass
def __getitem__(self,idx):
return self.X[idx],self.Y[idx]
def __len__(self):
return self.len
train_dataset = SampleDataset()
validation_dataset = SampleDataset(train = False)
class LR(nn.Module):
def __init__(self,input_size,output_size):
super(LR,self).__init__()
self.linear = nn.Linear(in_features=input_size,out_features=output_size)
def forward(self,x):
return self.linear(x)
trainloader = DataLoader(dataset = train_dataset , batch_size = 1)
criterion = nn.MSELoss()
# Create Learning Rate list, the error lists and the MODELS list
learning_rates = [0.0001,0.001,0.01,0.1]
train_error = np.zeros(len(learning_rates))
validation_error = np.zeros(len(learning_rates))
MODELS = []
def train_model_with_lr(iter,lr_list):
for i,lr in enumerate(lr_list):
model = LR(1,1)
optimizer = optim.SGD(model.parameters(), lr = lr)
for epoch in range(iter):
for x,y in trainloader:
y_pred = model(x)
loss = criterion(y_pred,y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
y_train = model(train_dataset.X)
training_loss = criterion(y_train,train_dataset.Y)
train_error[i] = training_loss.item()
y_val = model(validation_dataset.X)
validation_loss = criterion(y_val,validation_dataset.Y)
validation_error[i] = validation_loss.item()
MODELS.append(model)
train_model_with_lr(10,learning_rates)
plt.semilogx(learning_rates, train_error, label = 'Training Loss')
plt.semilogx(learning_rates, validation_error, label = 'Validation Loss')
plt.ylabel('Total Loss')
plt.xlabel('Learning Rate')
plt.legend()
plt.show()
i = 0
for model,learning_rate in zip(MODELS,learning_rates):
y_val = model(validation_dataset.X)
plt.plot(validation_dataset.X.numpy(),y_val.detach().numpy(),label = 'lr : ' + str(learning_rate))
plt.plot(validation_dataset.X.numpy(),validation_dataset.Y.numpy(),'or',label = 'Validation data')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()