国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法

這篇具有很好參考價值的文章主要介紹了Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1.為什么要使用反向傳播算法

2.二層神經(jīng)網(wǎng)絡(luò)

3.反向傳播算法更新權(quán)值的過程

4.張量Tensor


推薦課程:04.反向傳播_嗶哩嗶哩_bilibili

1.為什么要使用反向傳播算法

簡單模型可以使用解析式更新w

Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法

復(fù)雜模型,如圖,輸入矩陣為5*1矩陣,等一層權(quán)重矩陣H1為6*5矩陣,則需要30個解析式,第二層權(quán)重矩陣H2為6*7矩陣,則需要42個解析式,第三層……可以看出我們無法通過解析式的方式來更新w。

Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法

因此需要反向傳播算法,反向傳播算法可以在網(wǎng)絡(luò)中傳播梯度,最終通過鏈?zhǔn)椒▌t完成每個節(jié)點(diǎn)的梯度計(jì)算,從而完成每個節(jié)點(diǎn)的w更新。

反向傳播算法,又稱 BP 算法,它將輸出層的誤差反向逐層傳播,通過計(jì)算偏導(dǎo)數(shù)來更新網(wǎng)絡(luò)參數(shù)使得誤差函數(shù)最小化。

2.二層神經(jīng)網(wǎng)絡(luò):

Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法

?MM為矩陣乘法,ADD為矩陣加法,是預(yù)測值,w為權(quán)重,b為偏移量(bias)。

Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法

第一層H1為w1*x+b1,第二層H2為w2*H1+b2。

不難發(fā)現(xiàn),如果一直進(jìn)行線性變換,最終得到的化簡函數(shù)依然是一個線性函數(shù),因此需要在每一層的輸出,引入一個的非線性的變換函數(shù)。

Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法

3.反向傳播算法更新權(quán)值的過程

根據(jù)鏈?zhǔn)椒▌t可以向前推出前一個節(jié)點(diǎn)的偏導(dǎo)數(shù),根據(jù)梯度向下算法的權(quán)重更新公式=-,實(shí)現(xiàn)反向更新權(quán)重w。

(1) 一個計(jì)算圖正向傳播和反向傳播的過程

Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法

Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法

如圖,根據(jù)鏈?zhǔn)椒▌t,得到,進(jìn)行w更新。L為損失值Loss。

(2)具體實(shí)現(xiàn)過程

Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法

r為損失值loss。反向過程的最后,會得到可以根據(jù)梯度向下算法更新。

練習(xí)1:

Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法

?答案為-8

練習(xí)2:

Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法

?答案為2 ,2

4.張量Tensor

單個元素叫標(biāo)量(scalar),一個序列叫向量(vector),多個序列組成的平面叫矩陣(matrix),多個平面組成的立方體叫張量(tensor)。在深度學(xué)習(xí)中,標(biāo)量、向量、矩陣、高維矩陣都統(tǒng)稱為張量。在pytorch中,一個Tensor內(nèi)部包含數(shù)據(jù)導(dǎo)數(shù)兩部分。

Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法

線性模型pytorch實(shí)現(xiàn)代碼:

import torch

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

# 將w轉(zhuǎn)化為一個只含一個標(biāo)量的張量
w = torch.Tensor([1.0])
# 配置
# 設(shè)置需要計(jì)算梯度
w.requires_grad = True

# 預(yù)測值函數(shù)
def forward(x):
    return x * w

# 誤差值函數(shù)
def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y) ** 2

print("predict (before training)", 4, forward(4).item())
# 100輪的訓(xùn)練
for epoch in range(100):
    for x, y in zip(x_data, y_data):
        # 先正向傳播,生成計(jì)算圖
        l = loss(x, y)
        # 再反向傳播,backward()用于自動計(jì)算圖中所有張量的梯度(偏導(dǎo)數(shù))然后存入對應(yīng)張量中的grad中
        l.backward()
        # item()函數(shù)的作用是從包含單個元素的張量中取出該元素值,并保持該元素的類型不變。grad是張量,使用item()進(jìn)行取值,否則會生成計(jì)算圖。
        # grad和data都是torch的屬性,可以直接調(diào)用
        print('\tgard:', x, y, w.grad.item())
        # 更新w的值。注意grad也是一個張量,包含data和梯度。
        # grad是張量,grad.data取到其data,grad.data不會計(jì)算圖
        w.data = w.data - 0.01 * w.grad.data
        # 將w的梯度值清零
        w.grad.data.zero_()
        # 注意l也是張量,需要使用item()取值
    print("progress:", epoch, l.item())

print("predict (after training)", 4, forward(4).item())


backward():用于自動計(jì)算圖中所有張量的梯度(偏導(dǎo)數(shù))然后存入對應(yīng)張量中的grad中

item():用于從包含單個元素的張量中取出該元素值,并保持該元素的類型不變

w.grad.data.zero_():將w的梯度值清零,防止累積造成空間浪費(fèi)

grad和data都是torch的屬性,可以直接調(diào)用

注意:grad也是一個張量。grad.data取到其data,grad.data不會生成計(jì)算圖,使用item()有等同效果。

練習(xí)(代碼實(shí)現(xiàn))

Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法


矩陣手冊:http://faculty.bicmr.pku.edu.cn/~wenzw/bigdata/matrix-cook-book.pdf文章來源地址http://www.zghlxwxcb.cn/news/detail-420857.html

到了這里,關(guān)于Pytorch深度學(xué)習(xí)筆記(五)反向傳播算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【深度學(xué)習(xí)】4-2 誤差反向傳播法 - 簡單層的實(shí)現(xiàn)(層的介紹)

    【深度學(xué)習(xí)】4-2 誤差反向傳播法 - 簡單層的實(shí)現(xiàn)(層的介紹)

    下面把構(gòu)建神經(jīng)網(wǎng)絡(luò)的“層”實(shí)現(xiàn)為一個類。這里所說的“層”是神經(jīng)網(wǎng)絡(luò)中功能的單位。 下面先從一些簡單的層開始介紹 層的實(shí)現(xiàn)中有兩個共通的方法(接口) forward() 和 backward() 。 forward() 對應(yīng)正向傳播 backward() 對應(yīng)反向傳播 現(xiàn)在來實(shí)現(xiàn)乘法層。看下面代碼 backward()將從上

    2024年02月09日
    瀏覽(16)
  • 機(jī)器學(xué)習(xí)17:訓(xùn)練神經(jīng)網(wǎng)絡(luò)-反向傳播算法

    反向傳播算法對于快速訓(xùn)練大型神經(jīng)網(wǎng)絡(luò)至關(guān)重要。本文將介紹算法的工作原理。 目錄 1.簡單的神經(jīng)網(wǎng)絡(luò) 2.激活函數(shù) 3.錯誤函數(shù) 4.正向傳播 4.1 更新隱藏層 5.反向傳播 5.1 求導(dǎo)數(shù)

    2024年02月12日
    瀏覽(19)
  • pytorch(三)反向傳播

    pytorch(三)反向傳播

    前饋過程的目的是為了計(jì)算損失loss 反向傳播的目的是為了更新權(quán)重w,這里權(quán)重的更新是使用隨機(jī)梯度下降來更新的。 前饋過程 反饋過程 運(yùn)行結(jié)果 在神經(jīng)網(wǎng)路中,經(jīng)常對線性的結(jié)果做一個非線性函數(shù)的變幻的展開,這就是激活函數(shù)。激活函數(shù)可以使得模型具有非線性。激活

    2024年01月24日
    瀏覽(24)
  • pytorch 前向傳播與反向傳播代碼+ fp16

    optim.zero_grad() : 將模型的梯度參數(shù)設(shè)置為0,即清空之前計(jì)算的梯度值,在訓(xùn)練模型過程中,每次模型反向傳播完成后,梯度都會累加到之前的梯度值上,如果不清空,這些過時的梯度將會影響下一次迭代的結(jié)果。因此,使用 optim.zero_grad() 來清空梯度避免這種情況的發(fā)生。保證

    2024年02月05日
    瀏覽(17)
  • [pytorch] 8.損失函數(shù)和反向傳播

    [pytorch] 8.損失函數(shù)和反向傳播

    torch提供了很多損失函數(shù),可查看官方文檔Loss Functions部分 作用: 計(jì)算實(shí)際輸出和目標(biāo)輸出之間的差距 為更新輸出提供一定的依據(jù)(反向傳播),grad 損失函數(shù)用法差不多,這里以L1Loss和MSEloss為例 L1Loss 注意傳入的數(shù)據(jù)要為float類型,不然會報(bào)錯,所以inputs和outputs處要加上類

    2024年01月25日
    瀏覽(20)
  • PyTorch:梯度計(jì)算之反向傳播函數(shù)backward()

    PyTorch:梯度計(jì)算之反向傳播函數(shù)backward()

    計(jì)算圖,是一種用來描述計(jì)算的有向無環(huán)圖。 我們假設(shè)一個計(jì)算過程,其中 X 1 mathbf{X_1} X 1 ? 、 W 1 mathbf{W_1} W 1 ? 、 W 2 mathbf{W_2} W 2 ? 、 Y mathbf{Y} Y 都是 N N N 維向量。 X 2 = W 1 X 1 mathbf{X_2} = mathbf{W_1}mathbf{X_1} X 2 ? = W 1 ? X 1 ? y = W 2 X 2 mathbf{y} = mathbf{W_2}mathbf{X_2} y

    2023年04月09日
    瀏覽(24)
  • 深度學(xué)習(xí)之反向傳播

    (在pytorch包中)Tensor數(shù)據(jù)成員:data(存放數(shù)據(jù)w,也是Tensor變量,但是取data不會構(gòu)建計(jì)算圖)和grad(存放梯度loss對w的導(dǎo),調(diào)用bacward之后grad也是個Tensor,每次引用結(jié)束要zero) backward會釋放計(jì)算圖,每一次運(yùn)行神經(jīng)網(wǎng)絡(luò)時計(jì)算圖可能是不同的,所以沒進(jìn)行一次反向傳播就釋放

    2024年02月16日
    瀏覽(21)
  • 誤差反向傳播算法

    誤差反向傳播算法

    通過單個感知機(jī)或者單層神經(jīng)網(wǎng)絡(luò)只能夠?qū)崿F(xiàn)線性分類的問題,而多層神經(jīng)網(wǎng)絡(luò)可以解決非線性分類問題。 神經(jīng)網(wǎng)絡(luò)中的模型參數(shù),是神經(jīng)元模型中的連接權(quán)重以及每個功能神經(jīng)元的閾值, 這些模型參數(shù)并不是我們?nèi)斯ぴO(shè)計(jì)或者指定的,而是通過算法自動學(xué)習(xí)到的。 和其他

    2024年02月06日
    瀏覽(19)
  • Pytorch反向傳播——optimizer.zero_grad(), loss.backward(), optimizer.step() 作用

    在 PyTorch 中,optimizer.zero_grad() 用于清空優(yōu)化器中的梯度。通常,在進(jìn)行一次反向傳播計(jì)算之前,我們需要先清空優(yōu)化器中的梯度。這是因?yàn)?PyTorch 默認(rèn)會在反向傳播時累加梯度,而不是覆蓋之前的梯度,因此我們需要先清空梯度,再進(jìn)行反向傳播計(jì)算。 具體來說,optimizer.

    2024年02月11日
    瀏覽(25)
  • 機(jī)器學(xué)習(xí) day27(反向傳播)

    機(jī)器學(xué)習(xí) day27(反向傳播)

    1. 導(dǎo)數(shù) 函數(shù)在某點(diǎn)的導(dǎo)數(shù)為該點(diǎn)處的斜率,用height / width表示,可以看作若當(dāng)w增加ε,J(w,b)增加k倍的ε,則k為該點(diǎn)的導(dǎo)數(shù) 2. 反向傳播 tensorflow中的計(jì)算圖,由有向邊和節(jié)點(diǎn)組成。從左向右為正向傳播,神經(jīng)網(wǎng)絡(luò)模型使用正向傳播來輸出結(jié)果 從右向左為反向傳播,tensorflow使用

    2024年02月16日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包