pytorch-神經(jīng)網(wǎng)絡(luò)擬合曲線實例
更新時間:2020年01月15日 08:46:44 作者:馬飛飛
今天小編就為大家分享一篇pytorch-神經(jīng)網(wǎng)絡(luò)擬合曲線實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
代碼已經(jīng)調(diào)通,跑出來的效果如下:

# coding=gbk
import torch
import matplotlib.pyplot as plt
from torch.autograd import Variable
import torch.nn.functional as F
'''
Pytorch是一個擁有強(qiáng)力GPU加速的張量和動態(tài)構(gòu)建網(wǎng)絡(luò)的庫,其主要構(gòu)建是張量,所以可以把PyTorch當(dāng)做Numpy
來用,Pytorch的很多操作好比Numpy都是類似的,但是其能夠在GPU上運行,所以有著比Numpy快很多倍的速度。
訓(xùn)練完了,發(fā)現(xiàn)隱層越大,擬合的速度越是快,擬合的效果越是好
'''
def train():
print('------ 構(gòu)建數(shù)據(jù)集 ------')
# torch.linspace是為了生成連續(xù)間斷的數(shù)據(jù),第一個參數(shù)表示起點,第二個參數(shù)表示終點,第三個參數(shù)表示將這個區(qū)間分成平均幾份,即生成幾個數(shù)據(jù)
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)
#torch.rand返回的是[0,1]之間的均勻分布 這里是使用一個計算式子來構(gòu)造出一個關(guān)聯(lián)結(jié)果,當(dāng)然后期要學(xué)的也就是這個式子
y = x.pow(2) + 0.2 * torch.rand(x.size())
# Variable是將tensor封裝了下,用于自動求導(dǎo)使用
x, y = Variable(x), Variable(y)
#繪圖展示
plt.scatter(x.data.numpy(), y.data.numpy())
#plt.show()
print('------ 搭建網(wǎng)絡(luò) ------')
#使用固定的方式繼承并重寫 init和forword兩個類
class Net(torch.nn.Module):
def __init__(self,n_feature,n_hidden,n_output):
#初始網(wǎng)絡(luò)的內(nèi)部結(jié)構(gòu)
super(Net,self).__init__()
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))
x=self.predict(x)
return x
net=Net(n_feature=1,n_hidden=1000,n_output=1)
print('網(wǎng)絡(luò)結(jié)構(gòu)為:',net)
print('------ 啟動訓(xùn)練 ------')
loss_func=F.mse_loss
optimizer=torch.optim.SGD(net.parameters(),lr=0.001)
#使用數(shù)據(jù) 進(jìn)行正向訓(xùn)練,并對Variable變量進(jìn)行反向梯度傳播 啟動100次訓(xùn)練
for t in range(10000):
#使用全量數(shù)據(jù) 進(jìn)行正向行走
prediction=net(x)
loss=loss_func(prediction,y)
optimizer.zero_grad() #清除上一梯度
loss.backward() #反向傳播計算梯度
optimizer.step() #應(yīng)用梯度
#間隔一段,對訓(xùn)練過程進(jìn)行可視化展示
if t%5==0:
plt.cla()
plt.scatter(x.data.numpy(),y.data.numpy()) #繪制真是曲線
plt.plot(x.data.numpy(),prediction.data.numpy(),'r-',lw=5)
plt.text(0.5,0,'Loss='+str(loss.data[0]),fontdict={'size':20,'color':'red'})
plt.pause(0.1)
plt.ioff()
plt.show()
print('------ 預(yù)測和可視化 ------')
if __name__=='__main__':
train()
以上這篇pytorch-神經(jīng)網(wǎng)絡(luò)擬合曲線實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
完美處理python與anaconda環(huán)境變量的沖突問題
這篇文章主要介紹了完美處理Python與anaconda環(huán)境變量的沖突問題,對anaconda感興趣的同學(xué),可以參考下2021-04-04
python3+PyQt5重新實現(xiàn)QT事件處理程序
這篇文章主要為大家詳細(xì)介紹了python3+PyQt5重新實現(xiàn)QT事件處理程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04
python numpy 常用隨機(jī)數(shù)的產(chǎn)生方法的實現(xiàn)
這篇文章主要介紹了python numpy 常用隨機(jī)數(shù)的產(chǎn)生方法的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

