WilliamWithering

Dropping rolling loss

Dec 15th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.92 KB | None | 0 0
  1. import torch
  2. import torchvision
  3. import torchvision.transforms as transforms
  4. import torch.nn as nn
  5. import torch.nn.functional as F
  6. import torch.optim as optim
  7. import torchvision.models as models
  8.  
  9.  
  10. # Parameters
  11. gpu = torch.device('cuda')
  12. nb_epochs = 30
  13. nb_runs_per_model = 5
  14. bs = 32
  15. models_list = ['vgg16_bn', 'vgg16']
  16.  
  17.  
  18. def prep_data(bs):
  19.     train_transform = transforms.Compose([transforms.RandomHorizontalFlip(),
  20.                                           transforms.ToTensor(),
  21.                                           transforms.Normalize((.5, .5, .5), (.5, .5, .5))])
  22.  
  23.     test_transform = transforms.Compose([transforms.ToTensor(),
  24.                                          transforms.Normalize((.5, .5, .5), (.5, .5, .5))])
  25.  
  26.     trainset = torchvision.datasets.CIFAR10(root = "../data_CIFAR10", train = True, download = False, transform = train_transform)
  27.     trainloader = torch.utils.data.DataLoader(trainset, batch_size = bs, shuffle = True, drop_last = True)
  28.  
  29.     validset = torchvision.datasets.CIFAR10(root = "../data_CIFAR10", train = False, download = False, transform = test_transform)
  30.     validloader = torch.utils.data.DataLoader(validset, batch_size = bs, shuffle = False)
  31.  
  32.     classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')
  33.  
  34.     return trainloader, validloader, classes
  35.  
  36.  
  37.  
  38. def train_model(model, trainLoader, criterion, optimizer, epochs, gpu):
  39.     train_losses = []
  40.  
  41.     for epoch in range(epochs):
  42.         for i, data in enumerate(trainLoader, 0):
  43.             inputs, labels = data[0].to(gpu), data[1].to(gpu)
  44.  
  45.             optimizer.zero_grad()
  46.             outputs = model(inputs)
  47.             loss = criterion(outputs, labels)
  48.             loss.backward()
  49.             optimizer.step()
  50.  
  51.             train_losses.append(loss.item())
  52.  
  53.             if(i%100==99):
  54.                 print("[%d, %5d] loss : %.5f" % (epoch + 1, i + 1, loss.item()))
  55.  
  56.     print("Finished training\n\n")
  57.     return train_losses
  58.  
  59.  
  60.  
  61. def main():
  62.     for name in models_list:
  63.         for i in range(nb_runs_per_model):
  64.  
  65.             trainLoader, validLoader, classes = prep_data(bs)
  66.  
  67.             print("Training {}, run number {} / {} : \n".format(name, i+1, nb_runs_per_model))
  68.  
  69.             if name == 'vgg16':
  70.                 model = models.vgg16(num_classes = 10)
  71.             elif name == 'vgg16_bn':
  72.                 model = models.vgg16_bn(num_classes = 10)
  73.  
  74.             model.to(gpu)
  75.             criterion = nn.CrossEntropyLoss()
  76.             optimizer = optim.SGD(model.parameters(), lr = 0.003)
  77.  
  78.             train_losses = train_model(model, trainLoader, criterion, optimizer, nb_epochs, gpu)
  79.  
  80.             with open("Results.py", 'a') as f:
  81.                 f.write("### {} run {}/{} : \n{}_{} = {} \n".format(name, i+1, nb_runs_per_model,
  82.                                                                     name, i+1, train_losses))
  83.  
  84.  
  85. if __name__ == '__main__':
  86.     main()
Advertisement
Add Comment
Please, Sign In to add comment