【小白学习PyTorch教程】四、基于nn.Module类实现线性回归模型
生活随笔
收集整理的這篇文章主要介紹了
【小白学习PyTorch教程】四、基于nn.Module类实现线性回归模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
「@Author:Runsen」
上次介紹了順序模型,但是在大多數情況下,我們基本都是以類的形式實現神經網絡。
大多數情況下創建一個繼承自 Pytorch 中的 nn.Module 的類,這樣可以使用 Pytorch 提供的許多高級 API,而無需自己實現。
下面展示了一個可以從nn.Module創建的最簡單的神經網絡類的示例。基于 nn.Module的類的最低要求是覆蓋__init__()方法和forward()方法。
在這個類中,定義了一個簡單的線性網絡,具有兩個輸入和一個輸出,并使用 Sigmoid()函數作為網絡的激活函數。
import?torch from?torch?import?nnclass?LinearRegression(nn.Module):def?__init__(self):#繼承父類構造函數super(LinearRegression,?self).__init__()?#輸入和輸出的維度都是1self.linear?=?nn.Linear(1,?1)?def?forward(self,?x):out?=?self.linear(x)return?out現在讓我們測試一下模型。
#?創建LinearRegression()的實例 model?=?LinearRegression() print(model)? #?輸出如下 LinearRegression((linear):?Linear(in_features=1,?out_features=1,?bias=True) )現在讓定義一個損失函數和優化函數。
model?=?LinearRegression()#實例化對象 num_epochs?=?1000#迭代次數 learning_rate?=?1e-2#學習率0.01 Loss?=?torch.nn.MSELoss()#損失函數 optimizer?=?torch.optim.SGD(model.parameters(),?lr=learning_rate)#優化函數我們創建一個由方程產生的數據集,并通過函數制造噪音
import?torch? from?matplotlib?import?pyplot?as?plt from?torch.autograd?import?Variable from?torch?import?nn #?創建數據集??unsqueeze?相當于 x?=?Variable(torch.unsqueeze(torch.linspace(-1,?1,?100),?dim=1)) y?=?Variable(x?*?2?+?0.2?+?torch.rand(x.size())) plt.scatter(x.data.numpy(),y.data.numpy()) plt.show()關于torch.unsqueeze函數解讀。
>>>?x?=?torch.tensor([1,?2,?3,?4]) >>>?torch.unsqueeze(x,?0) tensor([[?1,??2,??3,??4]]) >>>?torch.unsqueeze(x,?1) tensor([[?1],[?2],[?3],[?4]])遍歷每次epoch,計算出loss,反向傳播計算梯度,不斷的更新梯度,使用梯度下降進行優化。
for?epoch?in?range(num_epochs):#?預測y_pred=?model(x)#?計算lossloss?=?Loss(y_pred,?y)#清空上一步參數值optimizer.zero_grad()#反向傳播loss.backward()#更新參數optimizer.step()if?epoch?%?200?==?0:print("[{}/{}]?loss:{:.4f}".format(epoch+1,?num_epochs,?loss))plt.scatter(x.data.numpy(),?y.data.numpy()) plt.plot(x.data.numpy(),?y_pred.data.numpy(),?'r-',lw=5) plt.text(0.5,?0,'Loss=%.4f'?%?loss.data.item(),?fontdict={'size':?20,?'color':??'red'}) plt.show() ####結果如下#### [1/1000]?loss:4.2052 [201/1000]?loss:0.2690 [401/1000]?loss:0.0925 [601/1000]?loss:0.0810 [801/1000]?loss:0.0802 [w,?b]?=?model.parameters() print(w,b) #?Parameter?containing: tensor([[2.0036]],?requires_grad=True)?Parameter?containing: tensor([0.7006],?requires_grad=True)這里的b=0.7,等于0.2 + torch.rand(x.size()),經過大量的訓練torch.rand()一般約等于0.5。
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯黃海廣老師《機器學習課程》課件合集 本站qq群851320808,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【小白学习PyTorch教程】四、基于nn.Module类实现线性回归模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Chrome 69正式版浏览器遭批 恢复
- 下一篇: RTSP鉴权认证之基础认证和摘要认证