pytorch搭建簡單的神經網路

2021-09-24 01:35:50 字數 2481 閱讀 8165

主要是熟悉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...