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

Python反向傳播實(shí)現(xiàn)線性回歸步驟詳細(xì)講解

 更新時(shí)間:2022年10月18日 09:40:49   作者:Henry_zs  
回歸是監(jiān)督學(xué)習(xí)的一個(gè)重要問(wèn)題,回歸用于預(yù)測(cè)輸入變量和輸出變量之間的關(guān)系,特別是當(dāng)輸入變量的值發(fā)生變化時(shí),輸出變量的值也隨之發(fā)生變化?;貧w模型正是表示從輸入變量到輸出變量之間映射的函數(shù)

1. 導(dǎo)入包

我們這次的任務(wù)是隨機(jī)生成一些離散的點(diǎn),然后用直線(y = w *x + b )去擬合

首先看一下我們需要導(dǎo)入的包有

torch 包為我們生成張量,可以使用反向傳播

matplotlib.pyplot 包幫助我們繪制曲線,實(shí)現(xiàn)可視化

2. 生成數(shù)據(jù)

這里我們通過(guò)rand隨機(jī)生成數(shù)據(jù),因?yàn)樯傻臄?shù)據(jù)在0~1之間,這里我們擴(kuò)大10倍。

我們?cè)O(shè)置的batch_size,也就是數(shù)據(jù)的個(gè)數(shù)為20個(gè),所以這里會(huì)產(chǎn)生維度是(20,1)個(gè)訓(xùn)練樣本

我們假設(shè)大概的回歸是 y = 2 * x + 3 的,為了保證損失不一直為0 ,這里我們添加一點(diǎn)噪音

最后返回x作為輸入,y作為真實(shí)值label

rand [0,1]均勻分布

如果想要每次產(chǎn)生的隨機(jī)數(shù)是一樣的,可以在代碼的前面設(shè)置一下隨機(jī)數(shù)種子

3. 訓(xùn)練數(shù)據(jù)

首先,我們要建立的模型是線性的y = w * x + b ,所以我們需要先初始化w ,b

使用randn 標(biāo)準(zhǔn)正態(tài)分布隨機(jī)初始化權(quán)重w,將偏置b初始化為0

為什么將權(quán)重w隨機(jī)初始化?

  • 首先,為了抑制過(guò)擬合,提高模型的泛化能力,我們可以采用權(quán)重衰減來(lái)抑制權(quán)重w的大小。因?yàn)闄?quán)重過(guò)大,對(duì)應(yīng)的輸入x的特征就越重要,但是如果對(duì)應(yīng)x是噪音的話,那么系統(tǒng)就會(huì)陷入過(guò)擬合中。所以我們希望得到的模型曲線是一條光滑的,對(duì)輸入不敏感的曲線,所以w越小越好
  • 那這樣為什么不直接把權(quán)重初始化為0,或者說(shuō)很小很小的數(shù)字呢。因?yàn)?,w太小的話,那么在反向傳播的時(shí)候,由于我們習(xí)慣學(xué)習(xí)率lr 設(shè)置很小,那在更新w的時(shí)候基本就不更新了。而不把權(quán)重設(shè)置為0,是因?yàn)闊o(wú)論訓(xùn)練多久,在更新權(quán)重的時(shí)候,所有權(quán)重都會(huì)被更新成相同的值,這樣多層隱藏層就沒(méi)有意義了。嚴(yán)格來(lái)說(shuō),是為了瓦解權(quán)重的對(duì)稱(chēng)結(jié)構(gòu)

接下來(lái)可以訓(xùn)練我們的模型了

1. 將輸入的特征x和對(duì)應(yīng)真實(shí)值label y通過(guò)zip函數(shù)打包。將輸入x經(jīng)過(guò)模型 w *x + b 的預(yù)測(cè)輸出預(yù)測(cè)值y

2. 計(jì)算損失函數(shù)loss,因?yàn)橹皩、b都是設(shè)置成會(huì)計(jì)算梯度的,那么loss.backward() 會(huì)自動(dòng)計(jì)算w和b的梯度。用w的值data,減去梯度的值grad.data 乘上 學(xué)習(xí)率lr完成一次更新

3. 當(dāng)w、b梯度不為零的話,要清零。這里有兩種解釋?zhuān)谝环N是每次計(jì)算完梯度后,值會(huì)和之前計(jì)算的梯度值進(jìn)行累加,而我們只是需要當(dāng)前這步的梯度值,所有我們需要將之前的值清零。第二種是,因?yàn)樘荻鹊睦奂?,那么相?dāng)于實(shí)現(xiàn)一個(gè)很大的batch訓(xùn)練。假如一個(gè)epoch里面,梯度不進(jìn)行清零的話,相當(dāng)于把所有的樣本求和后在進(jìn)行梯度下降,而不是我們?cè)仁褂玫尼槍?duì)單個(gè)樣本進(jìn)行下降的SGD算法

4. 每100次迭代后,我們打印一下?lián)p失

4. 繪制圖像

scatter 相當(dāng)于離散點(diǎn)的繪圖

要繪制連續(xù)的圖像,只需要給個(gè)定義域然后通過(guò)表達(dá)式 w * x +b 計(jì)算y就可以了,最后輸出一下w和b,看看是不是和我們?cè)O(shè)置的w = 2,b =3 接近

5. 代碼

import torch
import matplotlib.pyplot as plt
def trainSet(batch_size = 20):   # 定義訓(xùn)練集
    x = torch.rand(batch_size,1) * 10
    y = x * 2 + 3 + torch.randn(batch_size,1)   # y = x * 2  + 3(近似)
    return x,y
train_x, train_y = trainSet()   # 訓(xùn)練集
w =torch.randn(1,requires_grad= True)
b = torch.zeros(1,requires_grad= True)
lr = 0.001
for epoch in range(1000):
    for x,y in zip(train_x,train_y):  # SGD算法,如果是BSGD的話,不需要這個(gè)for
        y_pred = w*x  + b
        loss = (y - y_pred).pow(2) / 2
        loss.backward()
        w.data -= w.grad.data * lr
        b.data -= b.grad.data * lr
        if w.data is not True:   # 梯度值不為零的話,要清零
            w.grad.data.zero_()   #  否則相當(dāng)于一個(gè)大的batch訓(xùn)練
        if b.data is not True:
            b.grad.data.zero_()
    if epoch % 100 ==0:
        print('loss:',loss.data)
plt.scatter(train_x,train_y)
x = torch.arange(0,11).view(-1,1)
y = x * w.data + b.data
plt.plot(x,y)
plt.show()
print(w.data,b.data)

輸出的圖像

輸出的結(jié)果為

這里可以看的最后的w = 1.9865和b = 2.9857 和我們?cè)O(shè)置的2,3是接近的

到此這篇關(guān)于Python反向傳播實(shí)現(xiàn)線性回歸步驟詳細(xì)講解的文章就介紹到這了,更多相關(guān)Python線性回歸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Python中f-string的幾個(gè)技巧,你都知道嗎

    在Python中f-string的幾個(gè)技巧,你都知道嗎

    f-string想必很多Python用戶(hù)都基礎(chǔ)性的使用過(guò),但是百分之九十的人不知道?在Python中f-string的幾個(gè)技巧,今天就帶大家一起看看Python f-string技巧大全,需要的朋友參考下吧
    2021-10-10
  • Python實(shí)現(xiàn)在Excel文件中寫(xiě)入圖表

    Python實(shí)現(xiàn)在Excel文件中寫(xiě)入圖表

    這篇文章主要為大家介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)在Excel文件中寫(xiě)入一個(gè)比較簡(jiǎn)單的圖表,文中的實(shí)現(xiàn)方法講解詳細(xì),快動(dòng)手嘗試一下吧
    2022-05-05
  • Python處理文本文件中控制字符的方法

    Python處理文本文件中控制字符的方法

    最近在使用Python的時(shí)候遇到過(guò)文檔中出現(xiàn)控制字符報(bào)錯(cuò)的問(wèn)題。想著總結(jié)一下,方便以后需要或這同樣遇到問(wèn)題的朋友,下面這篇文章主要介紹了Python處理文本文件中控制字符的解決方法,需要的朋友可以參考借鑒。
    2017-02-02
  • python實(shí)現(xiàn)過(guò)濾敏感詞

    python實(shí)現(xiàn)過(guò)濾敏感詞

    這篇文章主要介紹了python如何實(shí)現(xiàn)過(guò)濾敏感詞,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-05-05
  • 使用python進(jìn)行拆分大文件的方法

    使用python進(jìn)行拆分大文件的方法

    今天小編就為大家分享一篇使用python進(jìn)行拆分大文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • python中os庫(kù)的具體使用

    python中os庫(kù)的具體使用

    本文介紹了Python中os庫(kù)的一些常見(jiàn)功能,包括獲取和改變工作目錄、列出目錄內(nèi)容、創(chuàng)建和刪除目錄等,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Python selenium爬取微博數(shù)據(jù)代碼實(shí)例

    Python selenium爬取微博數(shù)據(jù)代碼實(shí)例

    這篇文章主要介紹了Python selenium爬取微博數(shù)據(jù)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Pytest單元測(cè)試框架生成HTML測(cè)試報(bào)告及優(yōu)化的步驟

    Pytest單元測(cè)試框架生成HTML測(cè)試報(bào)告及優(yōu)化的步驟

    本文主要介紹了Pytest單元測(cè)試框架生成HTML測(cè)試報(bào)告及優(yōu)化的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • python持久性管理pickle模塊詳細(xì)介紹

    python持久性管理pickle模塊詳細(xì)介紹

    這篇文章主要介紹了python持久性管理pickle模塊詳細(xì)介紹,本文講解了什么是持久性、一些經(jīng)過(guò) pickle 的 Python等內(nèi)容,并講給出了18個(gè)使用示例,需要的朋友可以參考下
    2015-02-02
  • Matplotlib控制坐標(biāo)軸刻度間距與標(biāo)簽實(shí)例代碼

    Matplotlib控制坐標(biāo)軸刻度間距與標(biāo)簽實(shí)例代碼

    在matplotlib中,記號(hào)是圖形兩個(gè)軸上的小標(biāo)記,到目前為止,我們讓matplotlib處理軸圖例上記號(hào)的位置,下面這篇文章主要給大家介紹了關(guān)于Matplotlib控制坐標(biāo)軸刻度間距與標(biāo)簽的相關(guān)資料,需要的朋友可以參考下
    2021-10-10

最新評(píng)論

图木舒克市| 洛浦县| 镇江市| 桓仁| 腾冲县| 西华县| 呼和浩特市| 临澧县| 陇川县| 盈江县| 吉木乃县| 沂源县| 大邑县| 惠水县| 越西县| 青海省| 靖远县| 抚宁县| 洛宁县| 昌邑市| 克拉玛依市| 仪陇县| 宜宾县| 大安市| 万全县| 金华市| 浑源县| 炎陵县| 嘉兴市| 三亚市| 邹平县| 偏关县| 镇安县| 登封市| 崇左市| 偃师市| 博罗县| 木兰县| 盐边县| 岐山县| 云浮市|