主要是熟悉pytorch這個開源框架。
這個網路主要是用來擬合y=x^2這個函式用的(所以說很簡單啦)。、
自己生成的訓練資料,全部用來做訓練集了。
網路結構:
乙個輸入的向量,一層隱藏層,一層輸出層。
隱藏層用的relu啟用函式,輸出層什麼都沒加,直接線性輸出。
from torch.autograd import variable #torch的基本變數
import torch.nn.functional as f #裡面有很多torch的函式
import matplotlib.pyplot as plt #作圖用到的庫
#準備訓練集
#linspace從-1到1這段數軸上去100個點。
#unsqueeze函式用取出這些資料變為2維的torch變數
x=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)
#用x生成y的值。
y=x.pow(2)+0.1*torch.rand(x.size())
#把x、y變成torch的基本變數。
x,y=variable(x),variable(y)
#你可以看一下你的訓練集 scatter是散點圖
# plt.scatter(x.data.numpy(),y.data.numpy())
# plt.show()
#定義自帶forward propagation的神經網路。
class net(torch.nn.module):
#必須繼承torch.nn.module,官方說的。
#在建構函式裡,先執行super的init函式
#引數是輸入特徵個數、隱藏層節點個數、輸出值個數
def __init__(self,n_features,n_hiddens,n_outputs):
super(net,self).__init__()
#定義神經網路只有兩層(乙個隱藏層乙個輸出層)
self.hidden=torch.nn.linear(n_features,n_hiddens)
self.predict=torch.nn.linear(n_hiddens,n_outputs)
def forward(self, x):
#網路的前向傳播,第一層用relu啟用函式,第二層沒有復合別的函式,直接輸出
x=f.relu(self.hidden(x))
predict=self.predict(x)
return predict
#例項化乙個網路,1個輸入值(特徵值),(一層隱藏層)10個神經元,1個輸出值。
net=net(1,10,1)
#看一下這個網路什麼樣子
print(net)
#實時列印
plt.ion()
plt.show()
#torch把反向傳播剝離出來,叫做optimizaer。這個用了「隨機梯度下降」這個函式,learning rate 0.1
#引數是「哪個網路的引數「,我們這個是net的引數,用sgd函式。
optimizer=torch.optim.sgd(net.parameters(),lr=0.1)
#損失函式mseloss(平均方差)
loss_func=torch.nn.mseloss()
#開始訓練網路
for i in range(1000):
#net是之前例項化的net,net(x)的意思是把x餵給這個神經網路
#直接返回**值
prediction=net(x)
#計算損失值,引數順序要先prediction再正確的值
loss=loss_func(prediction,y)
#清空上一步的殘餘更新引數值
optimizer.zero_grad()
#執行反向傳播
loss.backward()
#更新引數
optimizer.step()
#列印圖用
if i%5==0:
plt.cla()
plt.scatter(x.data.numpy(),y.data.numpy())
plt.plot(x.data.numpy(),prediction.data.numpy(),'r-',lw=5)
plt.pause(0.1)
plt.ioff()
#顯示圖
plt.show()
效果圖
是動態的。
如何用pytorch搭建乙個簡單的神經網路?
匯入模組 import torch import torch.nn.functional as f from torch.autograd import variable import matplotlib.pyplot as plt x torch.unsqueeze torch.linspace...
pytorch 搭建簡單神經網路(回歸)
準備資料 x data torch.unsqueeze torch.linspace 1 1,100 dim 1 y data x data.pow 2 通過matplotlib視覺化生成的資料 plt.scatter x data.numpy y data.numpy plt.show class...
pytorch搭建簡單神經網路入門
參考自 以下 摘抄自 請先閱讀上述參考文章。改了幾個引數試試 import torch import matplotlib.pyplot as plt 搭建神經網路 class neuro net torch.nn.module 主要構成為 init 和forward函式 神經網路 def init...