You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

2_logistic_regression_2.py 3.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import time
  2. import torch as t
  3. from torch import nn, optim
  4. from torch.autograd import Variable
  5. from torch.utils.data import DataLoader
  6. from torchvision import transforms
  7. from torchvision import datasets
  8. """
  9. Use pytorch nn.Module to implement logistic regression
  10. FIXME: too complex, remove complete tips
  11. """
  12. # define hyper parameters
  13. batch_size = 32
  14. learning_rate = 1e-3
  15. num_epoches = 100
  16. # download/load MNIST dataset
  17. dataset_path = "../data/mnist"
  18. train_dataset = datasets.MNIST(
  19. root=dataset_path, train=True, transform=transforms.ToTensor(), download=True)
  20. test_dataset = datasets.MNIST(
  21. root=dataset_path, train=False, transform=transforms.ToTensor())
  22. train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
  23. test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
  24. # define Logistic Regression model
  25. class Logstic_Regression(nn.Module):
  26. def __init__(self, in_dim, n_class):
  27. super(Logstic_Regression, self).__init__()
  28. self.logstic = nn.Linear(in_dim, n_class)
  29. def forward(self, x):
  30. out = t.sigmoid(self.logstic(x))
  31. return out
  32. model = Logstic_Regression(28 * 28, 10) # model's input/output node size
  33. use_gpu = t.cuda.is_available() # GPU use or not
  34. if use_gpu: model = model.cuda()
  35. # define loss & optimizer
  36. criterion = nn.CrossEntropyLoss()
  37. optimizer = optim.SGD(model.parameters(), lr=learning_rate)
  38. # training
  39. for epoch in range(num_epoches):
  40. print('-' * 40)
  41. print('epoch {}'.format(epoch + 1))
  42. since = time.time()
  43. running_loss = 0.0
  44. running_acc = 0.0
  45. for i, data in enumerate(train_loader, 1):
  46. img, label = data
  47. img = img.view(img.size(0), -1) # convert input image to dimensions of (n, 28x28)
  48. if use_gpu:
  49. img = Variable(img).cuda()
  50. label = Variable(label).cuda()
  51. else:
  52. img = Variable(img)
  53. label = Variable(label)
  54. # forward calculation
  55. out = model(img)
  56. loss = criterion(out, label)
  57. running_loss += loss.data[0] * label.size(0)
  58. _, pred = t.max(out, 1)
  59. num_correct = (pred == label).sum()
  60. running_acc += float(num_correct.data[0])
  61. # bp
  62. optimizer.zero_grad()
  63. loss.backward()
  64. optimizer.step()
  65. if i % 300 == 0:
  66. print('[{}/{}] Loss: {:.6f}, Acc: {:.6f}'.format(
  67. epoch + 1, num_epoches, running_loss / (batch_size * i),
  68. running_acc / (batch_size * i)))
  69. print('Finish {} epoch, Loss: {:.6f}, Acc: {:.6f}'.format(
  70. epoch + 1, running_loss / (len(train_dataset)), running_acc / (len(
  71. train_dataset))))
  72. model.eval()
  73. eval_loss = 0.
  74. eval_acc = 0.
  75. for data in test_loader:
  76. img, label = data
  77. img = img.view(img.size(0), -1)
  78. if use_gpu:
  79. img = Variable(img, volatile=True).cuda()
  80. label = Variable(label, volatile=True).cuda()
  81. else:
  82. img = Variable(img, volatile=True)
  83. label = Variable(label, volatile=True)
  84. out = model(img)
  85. loss = criterion(out, label)
  86. eval_loss += loss.data[0] * label.size(0)
  87. _, pred = t.max(out, 1)
  88. num_correct = (pred == label).sum()
  89. eval_acc += float(num_correct.data[0])
  90. print('Test Loss: {:.6f}, Acc: {:.6f}'.format(
  91. eval_loss / (len(test_dataset)),
  92. eval_acc / (len(test_dataset))))
  93. print('Time:{:.1f} s'.format(time.time() - since))
  94. print()
  95. # save model's parameters
  96. #t.save(model.state_dict(), './model_LogsticRegression.pth')

机器学习越来越多应用到飞行器、机器人等领域,其目的是利用计算机实现类似人类的智能,从而实现装备的智能化与无人化。本课程旨在引导学生掌握机器学习的基本知识、典型方法与技术,通过具体的应用案例激发学生对该学科的兴趣,鼓励学生能够从人工智能的角度来分析、解决飞行器、机器人所面临的问题和挑战。本课程主要内容包括Python编程基础,机器学习模型,无监督学习、监督学习、深度学习基础知识与实现,并学习如何利用机器学习解决实际问题,从而全面提升自我的《综合能力》。