如何用pytorch搭建乙個簡單的神經網路?

2021-08-28 18:19:33 字數 2044 閱讀 7982

#匯入模組

import torch

import torch.nn.functional as f

from torch.autograd import variable

import matplotlib.pyplot as plt

x=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)

#對輸入的制定位置插入維度 1,無torch.unsqueeze,x是向量torch.size([100]),有之後x是 torch.size([100, 1])的矩陣

y=x**2+0.2*torch.rand(x.size())#x的平方,加雜訊(從區間[0,1)的均勻分布中抽取的一組隨機數,輸出形狀與x相同)

print(x,y,x.size())

x,y=variable(x),variable(y)#將x,y張量轉化為變數

class net(torch.nn.module):

def __init__(self,n_feature,n_hidden,n_output):#搭建層所要的初始資訊,特徵數,隱藏層單元數和輸出單元數

super(net,self).__init__()#繼承net到模組,官方步驟

self.hidden=torch.nn.linear(n_feature,n_hidden)#從輸入層到隱藏層的函式

self.predict=torch.nn.linear(n_hidden,n_output)#從隱藏層的輸出層的函式

def forward(self,x):#前向傳播

x=f.relu(self.hidden(x))#self.hidden(x)給x加權成為a,用激勵函式將a變成特徵b

x=self.predict(x)#self.predict(b)給b加權,**最終結果

return x#返回最終**值

net=net(1,10,1)#只有乙個輸入單元,乙個輸出單元,隱藏單元定為10個

print(net) #搭建神經網路完畢

plt.ion()

plt.show()

opt=torch.optim.sgd(net.parameters(),lr=0.5)#設定學習率為0.5,用隨機梯度下降法優化net神經網路的引數

lossfunc=torch.nn.mseloss()#設定損失函式為均方差函式

for t in range(100):#訓練步數100

prediction=net(x)#**值

loss=lossfunc(prediction,y)#**值與真實值的誤差

opt.zero_grad()#梯度降0

loss.backward()#反向傳播

opt.step()#梯度優化

if t%5==0:#此時,列印一下

plt.cla()#清除當前圖形中的當前活動軸,其他軸不受影響。

plt.scatter(x.data.numpy(),y.data.numpy())#numpy型別才支援plt,所以要轉化

plt.plot(x.data.numpy(),prediction.data.numpy(),'r-',lw=3)#擬合線圖

plt.text(0.5,0,'loss=%.4f'%loss.data[0],fontdict=)#在(0.5,0)的位置寫loss的變化

plt.pause(0.1)#間隔時間

plt.ioff()

plt.show()

#最後畫出的是**

神經網路net(

(hidden): linear(in_features=1, out_features=10, bias=true)

(predict): linear(in_features=10, out_features=1, bias=true)

)圖形

參考:莫煩python

如何用vue cli快速搭建乙個vue專案

如何用vue cli快速搭建乙個vue專案 vue cli是vue的腳手架。腳手架就是工地上為了保證各施工過程順利進行而搭設的工作平台,vue cli用來快速搭建乙個vue專案。我在桌面建立乙個vuetest資料夾,然後用vs code開啟該資料夾 ctrl 加 鍵開啟終端,輸入npm v 檢視no...

如何用C 寫乙個類

其實寫乙個類很簡單,但是要寫乙個符合各方面要求的類,卻不是一件容易的事情。下面總結一下需要考慮的一些問題,先把暫時想到的方面記下來,以後想到新的在增加吧。類的生死和初始化 1.copy ctor和copy assignment是不是需要private 單例常用 或者是不是要用private繼承來阻止...

如何用scanf讀取乙個句子

因此有下面兩種方法可以在使用scanf時完整輸入字串 1 利用strcat 函式來實現帶空格字串的輸入,可以用字串追加函式strcat 來連線每個單詞。strcat 一般格式 char strcat char dest,const char src 函式將字串src連線到dest的尾端,並返回字串d...