Guest User

Untitled

a guest
Jan 19th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.55 KB | None | 0 0
  1. from __future__ import print_function
  2.  
  3. import argparse
  4.  
  5. import numpy as np
  6. import torch
  7. import torch.nn as nn
  8. import torch.nn.functional as F
  9. import torch.optim as optim
  10. from torch.autograd import Variable
  11. from torchvision import datasets, transforms, models
  12.  
  13. import models_densenet
  14. import sys
  15. #from pytorch.models import *
  16.  
  17. # Training settings
  18. parser = argparse.ArgumentParser(description='PyTorch MNIST Example')
  19. parser.add_argument('--batch-size', type=int, default=64, metavar='N',
  20. help='input batch size for training (default: 64)')
  21. parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',
  22. help='input batch size for testing (default: 1000)')
  23. parser.add_argument('--epochs', type=int, default=10, metavar='N',
  24. help='number of epochs to train (default: 10)')
  25. parser.add_argument('--lr', type=float, default=0.01, metavar='LR',
  26. help='learning rate (default: 0.01)')
  27. parser.add_argument('--momentum', type=float, default=0.5, metavar='M',
  28. help='SGD momentum (default: 0.5)')
  29. parser.add_argument('--no-cuda', action='store_true', default=False,
  30. help='enables CUDA training')
  31. parser.add_argument('--seed', type=int, default=1, metavar='S',
  32. help='random seed (default: 1)')
  33. parser.add_argument('--log-interval', type=int, default=100, metavar='N',
  34. help='how many batches to wait before logging training status')
  35. parser.add_argument('--dropout', type=bool, default=False,required=False)
  36. parser.add_argument('--data_root', type=str, default='/data/pytorch/', help='path to data')
  37. args = parser.parse_args()
  38. args.cuda = not args.no_cuda and torch.cuda.is_available()
  39.  
  40. torch.manual_seed(args.seed)
  41. if args.cuda:
  42. torch.cuda.manual_seed(args.seed)
  43.  
  44.  
  45. kwargs = {'num_workers': 1, 'pin_memory':True} if args.cuda else {}
  46.  
  47. transform = transforms.Compose([
  48. transforms.RandomCrop(32, padding=4),
  49. transforms.RandomHorizontalFlip(),
  50. transforms.ToTensor(),
  51. transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
  52. ])
  53.  
  54. trn_data = datasets.CIFAR100(args.data_root+'/cifar100/', train=True, download=True, transform=transform)
  55. tst_data = datasets.CIFAR100(args.data_root+'/cifar100/', train=False, transform=transform)
  56.  
  57. #print(vars(trn_data))
  58.  
  59. train_loader = torch.utils.data.DataLoader(trn_data, batch_size=args.batch_size, shuffle=True, **kwargs)
  60. test_loader = torch.utils.data.DataLoader(tst_data, batch_size=args.batch_size, shuffle=True, **kwargs)
  61.  
  62. def adjust_learning_rate(optimizer, epoch):
  63. """Sets the learning rate to the initial LR decayed by 10 every 30 epochs"""
  64. lr = args.lr * (0.1 ** (epoch // 50))
  65. for param_group in optimizer.param_groups:
  66. param_group['lr'] = lr
  67.  
  68. #model = Cifar10Quick(dropout=args.dropout)
  69. model = models.densenet121(num_classes=100)
  70. if args.cuda:
  71. model.cuda()
  72.  
  73. optimizer = optim.Adam(model.parameters(), lr=args.lr)
  74. A = None
  75. A_test = None
  76.  
  77. def train(epoch):
  78. model.train()
  79. for batch_idx, (data, target) in enumerate(train_loader):
  80. if args.cuda:
  81. data, target = data.float().cuda(), target.cuda()
  82. data, target = Variable(data), Variable(target)
  83. output, feats, t1, t2 = model(data)
  84. ce_loss = F.nll_loss(feats, target)
  85. total_loss = ce_loss
  86. optimizer.zero_grad()
  87. total_loss.backward()
  88. optimizer.step()
  89. if batch_idx % args.log_interval == 0:
  90. print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}, SimplexLoss: {:.6f}'.format(
  91. epoch, batch_idx * len(data), len(train_loader.dataset),
  92. 100. * batch_idx / len(train_loader), ce_loss.data[0], simpl_loss.data[0]))
  93. def test(epoch):
  94. model.eval()
  95. test_loss = 0
  96. correct = 0
  97. for data, target in test_loader:
  98. if args.cuda:
  99. data, target = data.float().cuda(), target.cuda()
  100. data, target = Variable(data, volatile=True), Variable(target.long()).long()
  101. output, feats, t1, t2 = model(data)
  102. test_loss += F.nll_loss(feats, target).data[0]
  103. pred = feats.data.max(1)[1] # get the index of the max log-probability
  104. correct += pred.eq(target.data).cpu().sum()
  105.  
  106. test_loss = test_loss
  107. test_loss /= len(test_loader) # loss function already averages over batch size
  108. print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)'.format(
  109. test_loss, correct, len(test_loader.dataset),
  110. 100. * correct / len(test_loader.dataset)))
  111.  
  112. for epoch in range(1, args.epochs + 1):
  113. train(epoch)
  114. adjust_learning_rate(optimizer, epoch)
  115. test(epoch)
Add Comment
Please, Sign In to add comment