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.

Logistic_Regression.py 3.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import torch as t
  2. from torch import nn, optim
  3. import torch.nn.functional as F
  4. from torch.autograd import Variable
  5. from torch.utils.data import DataLoader
  6. from torchvision import transforms
  7. from torchvision import datasets
  8. import time
  9. # 定义超参数
  10. batch_size = 32
  11. learning_rate = 1e-3
  12. num_epoches = 100
  13. # 下载训练集 MNIST 手写数字训练集
  14. dataset_path = "../data/mnist"
  15. train_dataset = datasets.MNIST(
  16. root=dataset_path, train=True, transform=transforms.ToTensor(), download=True)
  17. test_dataset = datasets.MNIST(
  18. root=dataset_path, train=False, transform=transforms.ToTensor())
  19. train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
  20. test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
  21. # 定义 Logistic Regression 模型
  22. class Logstic_Regression(nn.Module):
  23. def __init__(self, in_dim, n_class):
  24. super(Logstic_Regression, self).__init__()
  25. self.logstic = nn.Linear(in_dim, n_class)
  26. def forward(self, x):
  27. out = self.logstic(x)
  28. return out
  29. model = Logstic_Regression(28 * 28, 10) # 图片大小是28x28
  30. use_gpu = t.cuda.is_available() # 判断是否有GPU加速
  31. if use_gpu:
  32. model = model.cuda()
  33. # 定义loss和optimizer
  34. criterion = nn.CrossEntropyLoss()
  35. optimizer = optim.SGD(model.parameters(), lr=learning_rate)
  36. # 开始训练
  37. for epoch in range(num_epoches):
  38. print('*' * 10)
  39. print('epoch {}'.format(epoch + 1))
  40. since = time.time()
  41. running_loss = 0.0
  42. running_acc = 0.0
  43. for i, data in enumerate(train_loader, 1):
  44. img, label = data
  45. img = img.view(img.size(0), -1) # 将图片展开成 28x28
  46. if use_gpu:
  47. img = Variable(img).cuda()
  48. label = Variable(label).cuda()
  49. else:
  50. img = Variable(img)
  51. label = Variable(label)
  52. # 向前传播
  53. out = model(img)
  54. loss = criterion(out, label)
  55. running_loss += loss.data[0] * label.size(0)
  56. _, pred = t.max(out, 1)
  57. num_correct = (pred == label).sum()
  58. running_acc += num_correct.data[0]
  59. # 向后传播
  60. optimizer.zero_grad()
  61. loss.backward()
  62. optimizer.step()
  63. if i % 300 == 0:
  64. print('[{}/{}] Loss: {:.6f}, Acc: {:.6f}'.format(
  65. epoch + 1, num_epoches, running_loss / (batch_size * i),
  66. running_acc / (batch_size * i)))
  67. print('Finish {} epoch, Loss: {:.6f}, Acc: {:.6f}'.format(
  68. epoch + 1, running_loss / (len(train_dataset)), running_acc / (len(
  69. train_dataset))))
  70. model.eval()
  71. eval_loss = 0.
  72. eval_acc = 0.
  73. for data in test_loader:
  74. img, label = data
  75. img = img.view(img.size(0), -1)
  76. if use_gpu:
  77. img = Variable(img, volatile=True).cuda()
  78. label = Variable(label, volatile=True).cuda()
  79. else:
  80. img = Variable(img, volatile=True)
  81. label = Variable(label, volatile=True)
  82. out = model(img)
  83. loss = criterion(out, label)
  84. eval_loss += loss.data[0] * label.size(0)
  85. _, pred = t.max(out, 1)
  86. num_correct = (pred == label).sum()
  87. eval_acc += num_correct.data[0]
  88. print('Test Loss: {:.6f}, Acc: {:.6f}'.format(eval_loss / (len(
  89. test_dataset)), eval_acc / (len(test_dataset))))
  90. print('Time:{:.1f} s'.format(time.time() - since))
  91. print()
  92. # 保存模型
  93. t.save(model.state_dict(), './model_LogsticRegression.pth')

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