Pytorch如何使用Pytorch擬合多項式-創(chuàng)新互聯(lián)

這篇文章主要介紹Pytorch如何使用Pytorch擬合多項式,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、做網(wǎng)站、玉泉街道網(wǎng)絡(luò)推廣、小程序設(shè)計、玉泉街道網(wǎng)絡(luò)營銷、玉泉街道企業(yè)策劃、玉泉街道品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供玉泉街道建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:muchs.cn

使用Pytorch來編寫神經(jīng)網(wǎng)絡(luò)具有很多優(yōu)勢,比起Tensorflow,我認(rèn)為Pytorch更加簡單,結(jié)構(gòu)更加清晰。

希望通過實戰(zhàn)幾個Pytorch的例子,讓大家熟悉Pytorch的使用方法,包括數(shù)據(jù)集創(chuàng)建,各種網(wǎng)絡(luò)層結(jié)構(gòu)的定義,以及前向傳播與權(quán)重更新方式。

比如這里給出

Pytorch如何使用Pytorch擬合多項式    

很顯然,這里我們只需要假定

Pytorch如何使用Pytorch擬合多項式

這里我們只需要設(shè)置一個合適尺寸的全連接網(wǎng)絡(luò),根據(jù)不斷迭代,求出最接近的參數(shù)即可。

但是這里需要思考一個問題,使用全連接網(wǎng)絡(luò)結(jié)構(gòu)是毫無疑問的,但是我們的輸入與輸出格式是什么樣的呢?

只將一個x作為輸入合理嗎?顯然是不合理的,因為每一個神經(jīng)元其實模擬的是wx+b的計算過程,無法模擬冪運算,所以顯然我們需要將x,x的平方,x的三次方,x的四次方組合成一個向量作為輸入,假設(shè)有n個不同的x值,我們就可以將n個組合向量合在一起組成輸入矩陣。

這一步代碼如下:

def make_features(x): 
 x = x.unsqueeze(1) 
 return torch.cat([x ** i for i in range(1,4)] , 1)

我們需要生成一些隨機(jī)數(shù)作為網(wǎng)絡(luò)輸入:

def get_batch(batch_size=32): 
 random = torch.randn(batch_size) 
 x = make_features(random) 
 '''Compute the actual results''' 
 y = f(x) 
 if torch.cuda.is_available(): 
  return Variable(x).cuda(), Variable(y).cuda() 
 else: 
  return Variable(x), Variable(y)

其中的f(x)定義如下:

w_target = torch.FloatTensor([0.5,3,2.4]).unsqueeze(1) 
b_target = torch.FloatTensor([0.9]) 
 
def f(x): 
 return x.mm(w_target)+b_target[0]

接下來定義模型:

class poly_model(nn.Module): 
 def __init__(self): 
  super(poly_model, self).__init__() 
  self.poly = nn.Linear(3,1) 
 
 def forward(self, x): 
  out = self.poly(x) 
  return out
if torch.cuda.is_available(): 
 model = poly_model().cuda() 
else: 
 model = poly_model()

接下來我們定義損失函數(shù)和優(yōu)化器:

criterion = nn.MSELoss() 
optimizer = optim.SGD(model.parameters(), lr = 1e-3)

網(wǎng)絡(luò)部件定義完后,開始訓(xùn)練:

epoch = 0 
while True: 
 batch_x,batch_y = get_batch() 
 output = model(batch_x) 
 loss = criterion(output,batch_y) 
 print_loss = loss.data[0] 
 optimizer.zero_grad() 
 loss.backward() 
 optimizer.step() 
 epoch+=1 
 if print_loss < 1e-3: 
  break

到此我們的所有代碼就敲完了,接下來我們開始詳細(xì)了解一下其中的一些代碼。

在make_features()定義中,torch.cat是將計算出的向量拼接成矩陣。unsqueeze是作一個維度上的變化。

get_batch中,torch.randn是產(chǎn)生指定維度的隨機(jī)數(shù),如果你的機(jī)器支持GPU加速,可以將Variable放在GPU上進(jìn)行運算,類似語句含義相通。

x.mm是作矩陣乘法。

模型定義是重中之重,其實當(dāng)你掌握Pytorch之后,你會發(fā)現(xiàn)模型定義是十分簡單的,各種基本的層結(jié)構(gòu)都已經(jīng)為你封裝好了。所有的層結(jié)構(gòu)和損失函數(shù)都來自torch.nn,所有的模型構(gòu)建都是從這個基類 nn.Module繼承的。模型定義中,__init__與forward是有模板的,大家可以自己體會。

nn.Linear是做一個線性的運算,參數(shù)的含義代表了輸入層與輸出層的結(jié)構(gòu),即3*1;在訓(xùn)練階段,有幾行是Pytorch不同于別的框架的,首先loss是一個Variable,通過loss.data可以取出一個Tensor,再通過data[0]可以得到一個int或者float類型的值,我們才可以進(jìn)行基本運算或者顯示。每次計算梯度之前,都需要將梯度歸零,否則梯度會疊加。個人覺得別的語句還是比較好懂的,如果有疑問可以在下方評論。

下面是我們的擬合結(jié)果

Pytorch如何使用Pytorch擬合多項式

以上是“Pytorch如何使用Pytorch擬合多項式”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁題目:Pytorch如何使用Pytorch擬合多項式-創(chuàng)新互聯(lián)
文章分享:http://muchs.cn/article2/degcoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、營銷型網(wǎng)站建設(shè)小程序開發(fā)、商城網(wǎng)站、App設(shè)計、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)