pytorch搭建簡單網路
阿新 • • 發佈:2018-12-12
pytorch搭建一個簡單神經網路
1 import torch 2 import torch.nn as nn 3 4 # 定義資料 5 # x:輸入資料 6 # y:標籤 7 x = torch.Tensor([[0.2, 0.4], [0.2, 0.3], [0.3, 0.4]]) 8 y = torch.Tensor([[0.6], [0.5], [0.7]]) 9 10 11 class MyNet(nn.Module): 12 def __init__(self): 13 # 呼叫基類建構函式 14 super(MyNet, self).__init__() 15 # 容器,使用時順序呼叫各個層 16 self.fc = nn.Sequential( 17 # 定義三層 18 # 輸入層 19 nn.Linear(2, 4), 20 # 啟用函式 21 nn.Sigmoid(), 22 # 隱藏層 23 nn.Linear(4, 4), 24 nn.Sigmoid(), 25 #輸出層 26 nn.Linear(4, 1), 27 ) 28 # 優化器 29 # params:優化物件 30 # lr:學習率 31 self.opt = torch.optim.Adam(params=self.parameters(), lr=0.001) 32 # 損失函式,均方差 33 self.mls = torch.nn.MSELoss() 34 35 def forward(self, inputs): 36 #前向傳播 37 return self.fc(inputs) 38 39 def train(self, x, y): 40 # 訓練 41 # 得到輸出結果 42 out = self.forward(x) 43 # 計算誤差 44 loss = self.mls(out, y) 45 # print('loss', loss) 46 # 梯度置零 47 self.opt.zero_grad() 48 # 誤差反向傳播 49 loss.backward() 50 # 更新權重 51 self.opt.step() 52 53 def test(self, x): 54 # 測試,就是前向傳播的過程 55 return self.forward(x) 56 57 58 net = MyNet() 59 for i in range(10000): 60 net.train(x, y) 61 x = torch.Tensor([[0.4, 0.1]]) 62 out = net.test(x) 63 print(out) # 輸出結果 tensor([[0.5205]], grad_fn=<AddmmBackward>)
訓練集較少,可能結果不是很好,主要是結構,畢竟剛開始接觸這個pytorch