1. 程式人生 > >pytorch搭建簡單網路

pytorch搭建簡單網路

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