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

pytorch如何自定義forward和backward函數(shù)

 更新時間:2024年10月12日 16:08:13   作者:xx_xjm  
PyTorch自動求導功能強大,但在特定情況下需要用戶自行定義backward函數(shù),通過實例解釋了保存變量、計算梯度、鏈式法則等核心概念,并展示了如何通過自定義函數(shù)集成到網(wǎng)絡中以及如何正確返回梯度,此外,還討論了多輸出情況下的梯度傳遞

pytorch自定義forward和backward函數(shù)

pytorch會自動求導,但是當遇到無法自動求導的時候,需要自己認為定義求導過程,這個時候就涉及到要定義自己的forward和backward函數(shù)。

舉例如下:

看到這里,大家應該會有很多疑問

比如:

  • 1:ctx.save_for_backward和ctx.saved_tensors的含義
  • 2:backward中各個計算函數(shù)的意義,以及backward的輸入?yún)?shù)grad_out是什么,以及grad_out包含哪些數(shù)據(jù)。

針對以上問題,我們一個個解答

  • 第一個問題:百度吧,答案很多!?。?!
  • 第二個問題:拿上面這個例子來看,我們定義了一個類似于線性層的東西,但注意這不是線性層,因為我們是直接把輸入和weight用*來做點對點的乘法的,所以這不是我們通常情況下的線性層。

但是這么看也費勁,我們寫一個網(wǎng)絡,把這個函數(shù)加到網(wǎng)絡中去,再完整的跑一遍看吧!

測試代碼

結果如下:

來進行解答

首先,backward函數(shù)的返回值,就是對應著forward里面的參數(shù)的梯度,也就是說,forward函數(shù)里面有幾個輸入?yún)?shù),那么backward函數(shù)的輸出就要有幾個!為什么是這樣?

我們首先要理解backward的輸入grad_out,為什么backward的參數(shù)就是一個,因為這是根據(jù)鏈式法則來的

比如,我們定義三個函數(shù)H(對應上面網(wǎng)絡中l(wèi)inear1),F(自定義函數(shù)xjm_inter),D(對應上面網(wǎng)絡中l(wèi)inear2),定義一個輸入x(對應上面輸入a),定義一個輸出y(對應上面輸出b):

y = D(F(H(X)))

現(xiàn)在,我們求y對x的偏導,那么:

dy/dx = dy/dD * dD/dF * dF/dH * dH/dx

好吧看到這里你可能還是不懂,為什么backward的參數(shù)就是一個grad_out?。?/p>

我們韓式以上面則個函數(shù)為例子,但是,我們現(xiàn)在不求y對x的導數(shù),我們假設F函數(shù)有一個葉子節(jié)點(或者說requires_grad=True)的參數(shù)w1,現(xiàn)在我們要求y對w1的導數(shù):

所以

dy/dw1 = dy/dD *dD/dF * dF/dw1

那么此時,F(xiàn)就是我們上面代碼中自定義的xjm_inter函數(shù),則 grad_out = dy/dD *dD/dF。

怎么理解呢,根據(jù)鏈式法則,我們呢所定義的網(wǎng)絡中的每一層都是一個單獨的函數(shù),所以函數(shù)中的變量的最終求導其實只取決于該函數(shù)本身,鏈式法則求導傳遞過來的其實永遠都知識一個值,這就是為什么backward函數(shù)的輸出只有一個。

擴展

當forward的輸出有多個的時候,那么就有多個鏈式法則,因為可以同時對x或者對w求導,此時backward的輸入可以是一個,也可以是對應forward輸出的個數(shù),如果是一個則是一個元組,包含對應的梯度?。?!

那么我們的backward要實現(xiàn)什么樣的功能呢?說到這里,大家應該大概能明白了,就是實現(xiàn)當前層那的梯度計算,并進行返回,所以,這也是為什么backward的返回值要和forward的輸入值一一對應,否則會報錯。

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • OpenCV哈里斯角檢測|Harris?Corner理論實踐

    OpenCV哈里斯角檢測|Harris?Corner理論實踐

    這篇文章主要為大家介紹了OpenCV哈里斯角檢測|Harris?Corner理論實踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 在Django中同時使用多個配置文件的方法

    在Django中同時使用多個配置文件的方法

    這篇文章主要介紹了在Django中同時使用多個配置文件的方法,Django是豐富多彩的Python web框架中人氣最高的一個,需要的朋友可以參考下
    2015-07-07
  • python實時獲取外部程序輸出結果的方法

    python實時獲取外部程序輸出結果的方法

    今天小編就為大家分享一篇python實時獲取外部程序輸出結果的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python字符串格式化方式

    Python字符串格式化方式

    這篇文章主要介紹了Python字符串格式化方式,字符串格式化在我們的開發(fā)過程中被廣泛的應用,因此也是我們要重點掌握的內容之一,下文相關介紹,需要的朋友可以參考一下
    2022-04-04
  • python實現(xiàn)美團訂單推送到測試環(huán)境,提供便利操作示例

    python實現(xiàn)美團訂單推送到測試環(huán)境,提供便利操作示例

    這篇文章主要介紹了python實現(xiàn)美團訂單推送到測試環(huán)境,提供便利操作,涉及Python基于requests模塊的網(wǎng)絡請求與數(shù)據(jù)處理相關操作技巧,需要的朋友可以參考下
    2019-08-08
  • python如何批量生成psd

    python如何批量生成psd

    文章總結:如何使用Python批量生成PSD文件,包括安裝Python環(huán)境和ps的步驟,提供個人經(jīng)驗并鼓勵大家支持腳本之家
    2026-01-01
  • python實現(xiàn)從一組顏色中找出與給定顏色最接近顏色的方法

    python實現(xiàn)從一組顏色中找出與給定顏色最接近顏色的方法

    這篇文章主要介紹了python實現(xiàn)從一組顏色中找出與給定顏色最接近顏色的方法,涉及Python操作rgb格式顏色的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • 關于spring的@Bean注解放入引用Bean中初始化失敗分析

    關于spring的@Bean注解放入引用Bean中初始化失敗分析

    這篇文章主要介紹了關于spring的@Bean注解放入引用Bean中初始化失敗分析,Spring的@Bean注解用于告訴方法,產(chǎn)生一個Bean對象,然后這個Bean對象交給Spring管理,產(chǎn)生這個Bean對象的方法Spring只會調用一次,需要的朋友可以參考下
    2023-07-07
  • python字典排序實例詳解

    python字典排序實例詳解

    這篇文章主要介紹了python字典排序實現(xiàn)方法,實例分析了Python字典排序的相關技巧,需要的朋友可以參考下
    2015-05-05
  • python數(shù)據(jù)類型可變與不可變深入分析

    python數(shù)據(jù)類型可變與不可變深入分析

    這篇文章主要為大家介紹了python數(shù)據(jù)類型可變與不可變深入分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06

最新評論

察隅县| 泽库县| 定襄县| 贵溪市| 胶南市| 美姑县| 松滋市| 丘北县| 景宁| 余庆县| 和平区| 横峰县| 平乐县| 甘孜| 二连浩特市| 博白县| 白河县| 景谷| 应用必备| 杭州市| 昆山市| 屏山县| 临湘市| 政和县| 呼伦贝尔市| 宜昌市| 金塔县| 三原县| 北海市| 台北市| 苍溪县| 吉林省| 宣城市| 宜川县| 沂水县| 长武县| 浦江县| 剑河县| 合肥市| 栖霞市| 马尔康县|