溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

pytorch中backward的參數(shù)含義是什么

發(fā)布時間:2023-02-24 16:04:20 來源:億速云 閱讀:113 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“pytorch中backward的參數(shù)含義是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“pytorch中backward的參數(shù)含義是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

    pytorch中backward的2個要點

    1. requires_grad

    用pytorch定義一個網(wǎng)絡(luò)層,如果數(shù)據(jù)中加入requires_grad=True,那么對于這個變量而言,就有了屬于自己的導(dǎo)數(shù)(grad),如果這個數(shù)據(jù)是矩陣,那么他的grad是同樣大小的一個矩陣。

    我們將requires_grad視為該變量的一個屬性,我們知道,我們在現(xiàn)實生活中,或者說在神經(jīng)網(wǎng)絡(luò)中,大部分的函數(shù)都是一階連續(xù)可微的,也就是說,他的梯度具有唯一性。requires_grad的存在非常合理。

    2. scale才能有backward

    scale是標(biāo)量的意思。

    首先我們可用用如下語句查看等式中某個自變量的梯度。

    print(x.grad, y.grad)

    但是有個前提,我們必須要先對他的結(jié)果使用.backward()才能去查看,不然的話,他的梯度會顯示為none。

    非常需要注意的一點是,能夠使用.backward()的必須是標(biāo)量(scale),不然程序會報錯。

    結(jié)合實際的情況,我們看任何一個網(wǎng)絡(luò),使用backward的地方幾乎只有一個,那就是loss.backward()。

    首先loss肯定是一個標(biāo)量,無論是MSE還是交叉熵,也無論是否加上了正則項,那都是求和之后的結(jié)果,也就是一個數(shù)值。這一點非常重要。

    以下是我隨意寫的一個網(wǎng)絡(luò)層,可以感受一下

    import torch
    import torch.nn as nn
    class Linear(nn.Module):
        def __init__(self, inc, mult):
            super(Linear, self).__init__()
            self.intc = inc
            self.mult = mult
        def forward(self, input0):
            return torch.sum(torch.abs(input0*self.mult+self.intc))
    def main():
        x = torch.tensor(1.0, requires_grad=True)
        y = torch.tensor(2.0,requires_grad=True)
        z = x**2+y
        p = z*2+x
        p.backward()
        print(z, x.grad, y.grad)
        A = torch.ones([3,3],requires_grad=True)
        print(A.requires_grad)
        f = Linear(1, -2)
        b = f(A)
        print(b)
        b.backward()
        print(A.grad)
    if __name__ == '__main__':
        main()

    pytorch中backward參數(shù)含義

    1.標(biāo)量與矢量問題

    backward參數(shù)是否必須取決于因變量的個數(shù),從數(shù)據(jù)中表現(xiàn)為標(biāo)量和矢量;

    • 例如標(biāo)量時

    • y=一個明確的值

    • 矢量時

    • y=[y1,y2]

    2.backward 參數(shù)計算公式

    當(dāng)因變量公式不是一個標(biāo)量時,需要顯式添加一個參數(shù)進(jìn)行計算,以pytorch文檔示例說明:

    import torch
    
    a = torch.tensor([2., 3.], requires_grad=True)
    b = torch.tensor([6., 4.], requires_grad=True)
    Q = 3*a**3 - b**2

    例如求解公式

    pytorch中backward的參數(shù)含義是什么

    external_grad = torch.tensor([1., 1.])
    Q.backward(gradient=external_grad)

    可以看到backward參數(shù)為[1,1],具體計算的含義,我們把Q公式拆分為標(biāo)量形式即:

    pytorch中backward的參數(shù)含義是什么

    backward參數(shù)為[1,1],計算公式為

    pytorch中backward的參數(shù)含義是什么

    3.autograd

    torch.autograd是計算向量和雅可比公式的乘積的引擎:

    pytorch中backward的參數(shù)含義是什么

    其中J就是因變量與自變量的雅可比公式,v即backward中的參數(shù);類比于第二節(jié)的例子可對應(yīng);

    前向傳播得到數(shù)值后,利用此形式計算直接后向傳播計算出損失函數(shù)對應(yīng)各權(quán)值的梯度下降值

    讀到這里,這篇“pytorch中backward的參數(shù)含義是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI