最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用Pytorch實現(xiàn)線性回歸模型的步驟

 更新時間:2024年01月16日 11:19:18   作者:chairon  
線性關系是一種非常簡單的變量之間的關系,因變量和自變量在線性關系的情況下,可以使用線性回歸算法對一個或多個因變量和自變量間的線性關系進行建模,本文主要介紹了如何利用Pytorch實現(xiàn)線性模型,需要的朋友可以參考下

Pytorch實現(xiàn)

步驟

  • 準備數(shù)據(jù)集
  • 設計模型(計算預測值y_hat):從nn.Module模塊繼承
  • 構造損失函數(shù)和優(yōu)化器:使用PytorchAPI
  • 訓練過程:Forward、Backward、update

1. 準備數(shù)據(jù)

在PyTorch中計算圖是通過mini-batch形式進行,所以X、Y都是多維的Tensor。

在這里插入圖片描述

import torch
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])

2. 設計模型

在之前講解梯度下降算法時,我們需要自己計算出梯度,然后更新權重。

在這里插入圖片描述

而使用Pytorch構造模型,重點時在構建計算圖和損失函數(shù)上。

在這里插入圖片描述

class LinearModel

通過構造一個 class LinearModel類來實現(xiàn),所有的模型類都需要繼承nn.Module,這是所有神經(jīng)忘了模塊的基礎類。
class LinearModel這種定義的模型類必須包含兩個部分:

  • init():構造函數(shù),進行初始化。
    def __init__(self):
        super(LinearModel, self).__init__()#調用父類構造函數(shù),不用管,照著寫。
        # torch.nn.Linear(in_featuers, in_featuers)構造Linear類的對象,其實就是實現(xiàn)了一個線性單元
        self.linear = torch.nn.Linear(1, 1)

在這里插入圖片描述

  • forward():進行前饋計算(backward沒有被寫,是因為在這種模型類里面會自動實現(xiàn))

Class nn.Linear 實現(xiàn)了magic method call():它使類的實例可以像函數(shù)一樣被調用。通常會調用forward()。

    def forward(self, x):
        y_pred = self.linear(x)#調用linear對象,輸入x進行預測
        return y_pred

代碼

class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel, self).__init__()#調用父類構造函數(shù),不用管,照著寫。
        # torch.nn.Linear(in_featuers, in_featuers)構造Linear類的對象,其實就是實現(xiàn)了一個線性單元
        self.linear = torch.nn.Linear(1, 1)
    def forward(self, x):
        y_pred = self.linear(x)#調用linear對象,輸入x進行預測
        return y_pred

model = LinearModel()#實例化LinearModel()

3. 構造損失函數(shù)和優(yōu)化器

采用MSE作為損失函數(shù)

torch.nn.MSELoss(size_average,reduce)

  • size_average:是否求mini-batch的平均loss。
  • reduce:降維,不用管。

在這里插入圖片描述

SGD作為優(yōu)化器torch.optim.SGD(params, lr):

  • params:參數(shù)
  • lr:學習率

在這里插入圖片描述

criterion = torch.nn.MSELoss(size_average=False)#size_average:the losses are averaged over each loss element in the batch.
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)#params:model.parameters(): w、b

4. 訓練過程

  • 預測
  • 計算loss
  • 梯度清零
  • Backward
  • 參數(shù)更新
    簡化:Forward–>Backward–>更新
#4. Training Cycle
for epoch in range(100):
    y_pred = model(x_data)#Forward:預測
    loss = criterion(y_pred, y_data)#Forward:計算loss
    print(epoch, loss)
    optimizer.zero_grad()#梯度清零
    loss.backward()#backward:計算梯度
    optimizer.step()#通過step()函數(shù)進行參數(shù)更新

5. 輸出和測試

# Output weight and bias
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())

# Test Model
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ', y_test.data)

完整代碼

import torch
#1. Prepare dataset
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])

#2. Design Model
class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel, self).__init__()#調用父類構造函數(shù),不用管,照著寫。
        # torch.nn.Linear(in_featuers, in_featuers)構造Linear類的對象,其實就是實現(xiàn)了一個線性單元
        self.linear = torch.nn.Linear(1, 1)
    def forward(self, x):
        y_pred = self.linear(x)#調用linear對象,輸入x進行預測
        return y_pred

model = LinearModel()#實例化LinearModel()

# 3. Construct Loss and Optimize
criterion = torch.nn.MSELoss(size_average=False)#size_average:the losses are averaged over each loss element in the batch.
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)#params:model.parameters(): w、b

#4. Training Cycle
for epoch in range(100):
    y_pred = model(x_data)#Forward:預測
    loss = criterion(y_pred, y_data)#Forward:計算loss
    print(epoch, loss)
    optimizer.zero_grad()#梯度清零
    loss.backward()#backward:計算梯度
    optimizer.step()#通過step()函數(shù)進行參數(shù)更新

# Output weight and bias
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())

# Test Model
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ', y_test.data)

輸出結果:

85 tensor(0.2294, grad_fn=)
86 tensor(0.2261, grad_fn=)
87 tensor(0.2228, grad_fn=)
88 tensor(0.2196, grad_fn=)
89 tensor(0.2165, grad_fn=)
90 tensor(0.2134, grad_fn=)
91 tensor(0.2103, grad_fn=)
92 tensor(0.2073, grad_fn=)
93 tensor(0.2043, grad_fn=)
94 tensor(0.2014, grad_fn=)
95 tensor(0.1985, grad_fn=)
96 tensor(0.1956, grad_fn=)
97 tensor(0.1928, grad_fn=)
98 tensor(0.1900, grad_fn=)
99 tensor(0.1873, grad_fn=)
w = 1.711882472038269
b = 0.654958963394165
y_pred = tensor([[7.5025]])

可以看到誤差還比較大,可以增加訓練輪次,訓練1000次后的結果:

980 tensor(2.1981e-07, grad_fn=)
981 tensor(2.1671e-07, grad_fn=)
982 tensor(2.1329e-07, grad_fn=)
983 tensor(2.1032e-07, grad_fn=)
984 tensor(2.0737e-07, grad_fn=)
985 tensor(2.0420e-07, grad_fn=)
986 tensor(2.0143e-07, grad_fn=)
987 tensor(1.9854e-07, grad_fn=)
988 tensor(1.9565e-07, grad_fn=)
989 tensor(1.9260e-07, grad_fn=)
990 tensor(1.8995e-07, grad_fn=)
991 tensor(1.8728e-07, grad_fn=)
992 tensor(1.8464e-07, grad_fn=)
993 tensor(1.8188e-07, grad_fn=)
994 tensor(1.7924e-07, grad_fn=)
995 tensor(1.7669e-07, grad_fn=)
996 tensor(1.7435e-07, grad_fn=)
997 tensor(1.7181e-07, grad_fn=)
998 tensor(1.6931e-07, grad_fn=)
999 tensor(1.6700e-07, grad_fn=)
w = 1.9997280836105347
b = 0.0006181497010402381
y_pred = tensor([[7.9995]])

練習

用以下這些優(yōu)化器替換SGD,得到訓練結果并畫出損失曲線圖。

在這里插入圖片描述

比如說:Adam的loss圖:

在這里插入圖片描述

以上就是用Pytorch實現(xiàn)線性回歸模型的步驟的詳細內容,更多關于Pytorch線性回歸模型的資料請關注腳本之家其它相關文章!

相關文章

  • 使用Python和OpenCV實現(xiàn)實時文檔掃描與矯正系統(tǒng)

    使用Python和OpenCV實現(xiàn)實時文檔掃描與矯正系統(tǒng)

    在日常工作和學習中,我們經(jīng)常需要將紙質文檔數(shù)字化,手動拍攝文檔照片常常會出現(xiàn)角度傾斜、透?視變形等問題,影響后續(xù)使用,本文將介紹如何使用Python和OpenCV構建一個實時文檔掃描與矯正系統(tǒng),能夠通過攝像頭自動檢測文檔邊緣并進行透?視變換矯正,需要的朋友可以參考下
    2025-05-05
  • python 爬取百度文庫并下載(免費文章限定)

    python 爬取百度文庫并下載(免費文章限定)

    這篇文章主要介紹了python 爬取百度文庫并下載的示例,幫助大家更好的理解和學習python 爬蟲的相關知識,感興趣的朋友可以了解下
    2020-12-12
  • pandas的連接函數(shù)concat()函數(shù)的具體使用方法

    pandas的連接函數(shù)concat()函數(shù)的具體使用方法

    這篇文章主要介紹了pandas的連接函數(shù)concat()函數(shù)的具體使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • python利用xlsxwriter模塊 操作 Excel

    python利用xlsxwriter模塊 操作 Excel

    這篇文章主要介紹了python利用xlsxwriter模塊 操作 Excel,幫助大家更好的利用python處理表格,提高辦公效率,感興趣的朋友可以了解下
    2020-10-10
  • python?Tkinter模塊使用方法詳解

    python?Tkinter模塊使用方法詳解

    Python的GUI庫非常多,之所以選擇 Tkinter,一是最為簡單,二是自帶庫,不需下載安裝,隨時使用,跨平臺兼容性非常好,下面這篇文章主要給大家介紹了關于python?Tkinter模塊使用方法的相關資料,需要的朋友可以參考下
    2022-04-04
  • 基于opencv實現(xiàn)手勢控制音量(案例詳解)

    基于opencv實現(xiàn)手勢控制音量(案例詳解)

    這篇文章主要介紹了基于opencv的手勢控制音量和ai換臉,通過定義了一個名為 handDetector 的類,用于檢測和跟蹤手部,結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • Python中@dataclass裝飾器實踐指南

    Python中@dataclass裝飾器實踐指南

    這篇文章主要給大家介紹了關于Python@dataclass裝飾器的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • 關于numpy.concatenate()函數(shù)的使用及說明

    關于numpy.concatenate()函數(shù)的使用及說明

    這篇文章主要介紹了關于numpy.concatenate()函數(shù)的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 深入理解Django自定義信號(signals)

    深入理解Django自定義信號(signals)

    這篇文章主要介紹了深入理解Django自定義信號(signals),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • python中*args與**kwarsg及閉包和裝飾器的用法

    python中*args與**kwarsg及閉包和裝飾器的用法

    這篇文章主要介紹了python中*args與**kwarsg及閉包和裝飾器的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論

克什克腾旗| 大同县| 南皮县| 贺兰县| 泰安市| 特克斯县| 从化市| 登封市| 抚松县| 浦东新区| 沿河| 呼伦贝尔市| 象山县| 墨脱县| 兖州市| 清徐县| 灵宝市| 榆林市| 铁岭县| 临桂县| 南投县| 淮南市| 霍州市| 儋州市| 乳山市| 武功县| 夏津县| 凤冈县| 米林县| 汉阴县| 靖边县| 自治县| 新平| 东莞市| 惠州市| 南阳市| 盐亭县| 夏河县| 互助| 富源县| 通许县|