龙良曲pytorch学习笔记_minst

  1 import torch
  2 from torch import nn
  3 from torch.nn import functional as F
  4 from torch import optim
  5 
  6 import torchvision
  7 from matplotlib import pyplot as plt
  8 
  9 # 小工具
 10 
 11 def plot_curvedata):
 12     fig = plt.figure)
 13     plt.plotrangelendata)),data,color='blue')
 14     plt.legend['value'],loc='upper right')
 15     plt.xlabel'step')
 16     plt.tlabel'value')
 17     plt.show)
 18 
 19 def plot_imageimg,label,name):
 20     fig = plt.figure)
 21     for i in range6):
 22         plt.subplot2,3,i+1)
 23         plt,tight_layout)
 24         plt.imshowimg[i][0]*0.3081+0.1307,cmap='gray',interpolation='none')
 25         plt.title"{}:{}".formatname,label[i].item)))
 26         plt.xticks[])
 27         plt.xticks[])
 28         
 29     plt.show)
 30         
 31 def one_hotlabel,depth = 10):
 32     out = torch.zeroslabel.size0),depth)
 33     idx = torch.LongTensorlabel).view-1,1)
 34     out.scatter_dim=1,index=idx,value=1)
 35     return out
 36     
 37 # 一次加载多少图片
 38 batch_size = 512
 39 # step1. load dataset 数据加载
 40 train_loader = torch.utils.data.DataLoader
 41     torchvision.datasets.MINST'mnist_data',train=True,download=True,
 42                               transform=torchvision.transforms.Compose[
 43                                   torchvision.transfroms.ToTensor),
 44                                   
 45                                   torchvision.transfroms.Normalize
 46                                       0.1307,),0.3081,))
 47                               ])),
 48     batch_size=batch_size,shuffle=True)
 49 test_loader = torch.utils.data.DataLoader
 50     torchvision.datasets.MINST'mnist_data/',train=False,download=True,
 51                               transform=torchvision.transforms.Compose[
 52                                   torchvision.transfroms.ToTensor),
 53                                   torchvision.transfroms.Normalize
 54                                       0.1307,),0.3081,))
 55                               ])),
 56     batch_size=batch_size,shuffle=False)
 57     
 58 # 网络创建
 59 class Netnn.Module):
 60     
 61     def __init__self):
 62         superNet,self).__init__)
 63         
 64     #xw+b
 65     self.fc1 = nn.Linear28*28,256)
 66     self.fc2 = nn.Linear256,64)
 67     self.fc3 = nn.Linear64,10)
 68     
 69     def forwardself,x):
 70         # x:[batch_size,1,28,28]
 71         # h1 = reluxw1+b1)
 72         x = F.reluself.fc1x))
 73         # h1 = reluh1w2+b2)
 74         x = F.reluself.fc2x))
 75         # h3 = h2w3+b3
 76         x = self.fc3x)
 77         
 78         return x
 79         
 80 net = Net)
 81 # [w1,b1,w2,b1,w3,b3]
 82 optimizer = optim.SGDnet.parameters),lr=0.01,momentum=0.9)
 83 
 84 train_loss = []
 85 
 86 # 训练
 87 for epoch in range3):
 88 
 89     for batch_idx,x,y) in enumeratetrain_loader):
 90     
 91         # x: [b,1,28,28], y:[512]
 92         # [b,1,28,28]-->[b,feature]
 93         x = x.viewx.size0),28*28)
 94         # --> [b,10]
 95         out = netx)
 96         # --> [b,10]
 97         y_onehot = one_hoty)
 98         # loss = mseout,y_onehot)
 99         loss = F.mse_lossout,y_onehot)
100         # 清零梯度
101         optimizer.zero_grad)
102         # 计算梯度
103         loss.backward)
104         #w' = w - lr*grad 更新梯度
105         optimizer.step)
106         
107         train_loss.appendloss.item))
108         
109         if batch_idx % 10 == 0:
110             printepoch,batch_idx,loss.item))
111             
112 plot_curvetrain_loss)
113             
114 # 得到一个比较好的    [w1,b1,w2,b1,w3,b3]    
115 
116 
117 # 验证准确率
118 total_correct = 0
119 for x,y in test_loader"
120     x = x.viewx.size0),28*28)
121     out = netx)
122     # out: [b,10] --> pred: [b]
123     pred = out.argmaxdim = 1)
124     correct = pred.eqy).sum).float).item)
125     total_correct += correct
126 
127 total_num = lentest_loader.dataset)
128 acc = total_correct / total_num
129 print'test acc:',acc)
130 
131 # 直观显示验证
132 x,y = nextitertest_loader))
133 out = netx.viewx.size0),28*28))
134 pred = out.argmaxdim = 1)
135 plot_imagex,pred,'test')
136         
137         
138         
139         
140         
141         

Published by

风君子

独自遨游何稽首 揭天掀地慰生平