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.

Neural_Network.0.py 3.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import torch
  2. from torch import nn, optim
  3. from torch.autograd import Variable
  4. from torch.utils.data import DataLoader
  5. import torch.nn.functional as F
  6. from torchvision import transforms
  7. from torchvision import datasets
  8. # set parameters
  9. batch_size = 32
  10. learning_rate = 1e-2
  11. num_epoches = 50
  12. # download & load MNIST dataset
  13. dataset_path = "../data/mnist"
  14. train_dataset = datasets.MNIST(
  15. root=dataset_path, train=True, transform=transforms.ToTensor(), download=True)
  16. test_dataset = datasets.MNIST(
  17. root=dataset_path, train=False, transform=transforms.ToTensor())
  18. train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
  19. test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
  20. # Define the network
  21. class NeuralNetwork(nn.Module):
  22. def __init__(self, in_dim, n_hidden_1, n_hidden_2, out_dim):
  23. super(NeuralNetwork, self).__init__()
  24. self.layer1 = nn.Linear(in_dim, n_hidden_1)
  25. self.layer2 = nn.Linear(n_hidden_1, n_hidden_2)
  26. self.layer3 = nn.Linear(n_hidden_2, out_dim)
  27. def forward(self, x):
  28. x = F.relu(self.layer1(x))
  29. x = F.relu(self.layer2(x))
  30. x = self.layer3(x)
  31. return x
  32. # create network & define loss function
  33. model = NeuralNetwork(28 * 28, 300, 100, 10)
  34. criterion = nn.CrossEntropyLoss()
  35. optimizer = optim.SGD(model.parameters(), lr=learning_rate)
  36. # train
  37. for epoch in range(num_epoches):
  38. print("epoch %6d" % int(epoch+1))
  39. print('-' * 40)
  40. running_loss = 0.0
  41. running_acc = 0.0
  42. for i, data in enumerate(train_loader, 1):
  43. img, label = data
  44. img = Variable(img.view(img.size(0), -1))
  45. label = Variable(label)
  46. # 向前传播
  47. optimizer.zero_grad()
  48. out = model(img)
  49. loss = criterion(out, label)
  50. running_loss += loss.data[0] * label.size(0)
  51. pred = out.data.max(1, keepdim=True)[1]
  52. running_acc += float(pred.eq(label.data.view_as(pred)).cpu().sum())
  53. # 向后传播
  54. loss.backward()
  55. optimizer.step()
  56. if i % 300 == 0:
  57. print('[{}/{}] Loss: {:.6f}, Acc: {:.2f}%'.format(
  58. epoch + 1, num_epoches,
  59. 1.0*running_loss / (batch_size * i),
  60. 100.0*running_acc / (batch_size * i)))
  61. # do test
  62. model.eval()
  63. eval_loss = 0.
  64. eval_acc = 0.
  65. for data in test_loader:
  66. img, label = data
  67. img = img.view(img.size(0), -1)
  68. img = Variable(img)
  69. label = Variable(label)
  70. out = model(img)
  71. loss = criterion(out, label)
  72. eval_loss += loss.data[0] * label.size(0)
  73. pred = out.data.max(1, keepdim=True)[1]
  74. eval_acc += float(pred.eq(label.data.view_as(pred)).cpu().sum())
  75. print('\nTest Loss: {:.6f}, Acc: {:.2f}%'.format(
  76. 1.0*eval_loss / (len(test_dataset)),
  77. 100.0*eval_acc / (len(test_dataset))))
  78. print()
  79. # save model
  80. torch.save(model.state_dict(), './model_Neural_Network.pth')

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