日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【小白学习PyTorch教程】四、基于nn.Module类实现线性回归模型

發布時間:2025/3/12 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【小白学习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类实现线性回归模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。