pytorch 模擬關係擬合——迴歸例項
阿新 • • 發佈:2020-01-15
本次用 pytroch 來實現一個簡單的迴歸分析,也藉此機會來熟悉 pytorch 的一些基本操作。
1. 建立資料集
import torch from torch.autograd import Variable import matplotlib.pyplot as plt # torch.linspace(-1,1,100)表示返回一個一維張量,包含在區間 -1到1 上均勻間隔的100個點; # torch.unsqueeze(input,dim=1)表示轉換維度 x = torch.unsqueeze(torch.linspace(-1,100),dim=1) # 生成的y值為x的平方加上隨機數 y = x.pow(2) + 0.2*torch.rand(x.size()) # 用 Variable 來修飾這些資料 tensor x,y = torch.autograd.Variable(x),Variable(y) # 畫圖 plt.scatter(x.data.numpy(),y.data.numpy()) plt.show()
2. 構建神經網路
import torch import torch.nn.functional as F # 激勵函式都在這 class Net(torch.nn.Module): # 繼承 torch 的 Module def __init__(self,n_feature,n_hidden,n_output): super(Net,self).__init__() # 繼承 __init__ 功能 # 定義每層用什麼樣的形式 self.hidden = torch.nn.Linear(n_feature,n_hidden) # 隱藏層線性輸出 self.predict = torch.nn.Linear(n_hidden,n_output) # 輸出層線性輸出 def forward(self,x): # 這同時也是 Module 中的 forward 功能 # 正向傳播輸入值,神經網路分析出輸出值 x = F.relu(self.hidden(x)) # 激勵函式(隱藏層的線性值) x = self.predict(x) # 輸出值 return x net = Net(n_feature=1,n_hidden=10,n_output=1) print(net) # net 的結構 """ Net ( (hidden): Linear (1 -> 10) (predict): Linear (10 -> 1) ) """
3. 實時繪圖查看回歸效果
import matplotlib.pyplot as plt plt.ion() #開啟互動繪圖模式(便於實時顯示影象變化) plt.show() optimizer = torch.optim.SGD(net.parameters(),lr=0.1) # 定義優化器和學習率 loss_func = torch.nn.MSELoss() #定義損失函式 for t in range(200): prediction = net(x) loss = loss_func(prediction,y) optimizer.zero_grad() loss.backward() optimizer.step() 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,'Loss=%.4f' % loss.data[0],fontdict={'size':20,'color':'red'}) # 顯示損失數值 plt.pause(0.1) # 如果在指令碼中使用ion()命令開啟了互動模式,沒有使用ioff()關閉的話,則影象會一閃而過,並不會常留。要想防止這種情況,需要在plt.show()之前加上ioff()命令。 plt.ioff() plt.show()
執行終態效果圖如下:
以上這篇pytorch 模擬關係擬合——迴歸例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。