16 nn.Conv2d(1, 10, kernel_size=3, padding=1),
19 nn.Conv2d(10, 10, kernel_size=3, padding=1),
34def fit(model, train_loader, val_loader, num_epochs, batch_size, optimizer, criterion, save_best, scheduler):
35 trainer =
optimizer(model.parameters(), lr=0.01)
36 schedule, schedulerSteps = scheduler
40 device = torch.device(
'cuda' if torch.cuda.is_available()
else 'cpu')
41 model = model.to(device)
43 for epoch
in range(num_epochs):
47 running_train_loss = 0.0
48 running_val_loss = 0.0
49 for i, (X, y)
in enumerate(train_loader):
51 X, y = X.to(device), y.to(device)
59 running_train_loss += train_loss.item()
61 print(f
"[{epoch+1}, {i+1}] train loss: {running_train_loss / 4 :.3f}")
62 running_train_loss = 0.0
65 schedule(optimizer, epoch, schedulerSteps)
71 for i, (X, y)
in enumerate(val_loader):
72 X, y = X.to(device), y.to(device)
76 running_val_loss += val_loss.item()
78 curr_val = running_val_loss /
len(val_loader)
82 best_val = save_best(model, curr_val, best_val)
85 print(f
"[{epoch+1}] val loss: {curr_val :.3f}")
86 running_val_loss = 0.0
88 print(f
"Finished Training on {epoch+1} Epochs!")
93def predict(model, test_X, batch_size=100):
96 device = torch.device(
'cuda' if torch.cuda.is_available()
else 'cpu')
97 model = model.to(device)
102 test_dataset = torch.utils.data.TensorDataset(torch.Tensor(test_X))
103 test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=batch_size, shuffle=
False)
106 with torch.no_grad():
107 for i, data
in enumerate(test_loader):
108 X = data[0].to(device)
110 predictions.append(outputs)
111 preds = torch.cat(predictions)
113 return preds.cpu().numpy()
fit(model, train_loader, val_loader, num_epochs, batch_size, optimizer, criterion, save_best, scheduler)