-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtrain.py
More file actions
68 lines (51 loc) · 1.84 KB
/
Copy pathtrain.py
File metadata and controls
68 lines (51 loc) · 1.84 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
import torch
import torch.nn as nn
from torch.utils.data import DataLoader, random_split
from dataset import GazeDataset
from pipeline import GazeCNN
from metrics import angular_error_degrees
torch.manual_seed(42)
mat_path = "./dataset/Data/Normalized/p00/day01.mat"
full_dataset = GazeDataset(mat_path)
train_size = int(0.8 * len(full_dataset))
validation_size = len(full_dataset) - train_size
split_generator = torch.Generator().manual_seed(42)
train_dataset, validation_dataset = random_split(
full_dataset,
[train_size, validation_size],
generator=split_generator,
)
train_loader = DataLoader(train_dataset, batch_size=16, shuffle=True)
validation_loader = DataLoader(validation_dataset, batch_size=16, shuffle=False)
model = GazeCNN()
loss_fn = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
for epoch in range(5):
model.train()
train_total = 0.0
for images, labels in train_loader:
optimizer.zero_grad()
predictions = model(images)
loss = loss_fn(predictions, labels)
loss.backward()
optimizer.step()
train_total += loss.item()
train_average = train_total / len(train_loader)
model.eval()
all_sq_errors = []
all_errors = []
with torch.no_grad():
for images, labels in validation_loader:
predictions = model(images)
sq_errors = ((predictions - labels) ** 2).mean(dim=1)
all_sq_errors.append(sq_errors)
errors = angular_error_degrees(predictions, labels)
all_errors.append(errors)
validation_mse = torch.cat(all_sq_errors).mean()
validation_mae = torch.cat(all_errors).mean()
print(
f"Epoch {epoch + 1}/5 | "
f"train loss: {train_average:.4f} | "
f"validation MSE: {validation_mse:.4f} | "
f"validation MAE: {validation_mae:.2f} deg"
)