-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStudent_result_predictor.py
67 lines (45 loc) · 1.78 KB
/
Student_result_predictor.py
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
import numpy as np
import torch
import torch.nn as nn
from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader
import torch.nn.functional as F
inputs = np.array([[73, 67, 43], [91, 88, 64], [87, 34, 58],
[20, 43, 37], [69, 96, 70], [73, 67, 43],
[91, 88, 64], [87, 34, 58], [12, 43, 37],
[69, 96, 70], [73, 67, 43], [91, 88, 64],
[87, 14, 58], [12, 43, 37], [69, 96, 70]],
dtype='float32')
targets = np.array([[0.0], [1.0], [0.0],
[0.0], [1.0], [0.0],
[1.0], [0.0], [1.0],
[1.0], [0.0], [1.0],
[0.0], [0.0], [1.0]],
dtype='float32')
targets = torch.from_numpy(targets)
inputs = torch.from_numpy(inputs)
model = nn.Linear(3, 1)
preds = model(inputs)
loss_fn = F.mse_loss
loss = loss_fn(model(inputs), targets)
opt = torch.optim.SGD(model.parameters(), lr=0.00001)
def fit(num_epochs, model, loss_fn, opt):
# Repeat for given number of epochs
for epoch in range(num_epochs):
# 1. Generate predictions
pred = model(inputs)
# 2. Calculate loss
loss = loss_fn(pred, targets)
# 3. Compute gradients
loss.backward()
# 4. Update parameters using gradients
opt.step()
# 5. Reset the gradients to zero
opt.zero_grad()
# Print the progress
if (epoch+1) % 10 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))
fit(900000, model, loss_fn, opt)
preds=model(inputs)
print(targets)#to be predicted
print(preds) #predicted