pytorch的Backward過程用時(shí)太長(zhǎng)問題及解決
pytorch Backward過程用時(shí)太長(zhǎng)
問題描述
使用pytorch對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練的時(shí)候遇到一個(gè)問題,forward階段很快(只需要幾毫秒),backward階段卻用時(shí)很長(zhǎng)(需要十多秒)。
導(dǎo)致這個(gè)問題的原因很容易被大家忽視,而且網(wǎng)上基本上沒有直接的解決方案,經(jīng)過一天的折騰,總算把導(dǎo)致這個(gè)問題的原因搞清楚了。
解決方案
導(dǎo)致這個(gè)問題的原因在于訓(xùn)練數(shù)據(jù)的淺拷貝,由于backward過程中的梯度是和模型推理過程中的張量相關(guān)的,如果這些張量在被模型使用之前沒有被深拷貝,意味著backward過程的會(huì)重復(fù)從這些張量的原始內(nèi)存地址中取值,這個(gè)過程非常耗時(shí)。所以為了避免這個(gè)問題,需要養(yǎng)成一個(gè)好習(xí)慣,就是將張量數(shù)據(jù)輸入模型之前進(jìn)行深拷貝
pytorch的深拷貝方式如下:
tensor_a = tensor_b.clone().detach()
Pytorch backward()簡(jiǎn)單理解
backward()是反向傳播求梯度,具體實(shí)現(xiàn)過程如下
import torch x=torch.tensor([1,2,3],requires_grad=True,dtype=torch.double) y=x**2 z=y.mean() z.backward() print(x.grad)
結(jié)果
tensor([0.6667, 1.3333, 2.0000], dtype=torch.float64)
有幾個(gè)重要的點(diǎn)
1.必須要加上requires_grad=True才能求
2. 一般來說,需要標(biāo)量才能求梯度。
3.具體過程如下:

z是一個(gè)標(biāo)量(1*1矩陣)分別對(duì)x1,x2,x3求偏導(dǎo), 再代入x1,x2,x3的數(shù)值,就是如上程序輸出的結(jié)果
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Pycharm內(nèi)置終端及遠(yuǎn)程SSH工具的使用教程圖文詳解
這篇文章主要介紹了Pycharm內(nèi)置終端及遠(yuǎn)程SSH工具的使用教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
Python實(shí)現(xiàn)刪除當(dāng)前目錄下除當(dāng)前腳本以外的文件和文件夾實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)刪除當(dāng)前目錄下除當(dāng)前腳本以外的文件和文件夾的方法,涉及Python針對(duì)目錄及文件的刪除技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
基于Python實(shí)現(xiàn)wifi連接小程序
這篇文章主要為大家詳細(xì)介紹了如何使用Python編程語(yǔ)言編寫一個(gè)簡(jiǎn)單的連接Wi-Fi的程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
Python實(shí)現(xiàn)CART決策樹算法及詳細(xì)注釋
CART算法是一種樹構(gòu)建算法,既可以用于分類任務(wù),又可以用于回歸,本文僅討論基本的CART分類決策樹構(gòu)建,不討論回歸樹和剪枝等問題,感興趣的朋友跟隨小編一起看看吧2021-10-10
python中subprocess實(shí)例用法及知識(shí)點(diǎn)詳解
在本篇文章里小編給大家分享的是關(guān)于python中subprocess實(shí)例用法及知識(shí)點(diǎn)詳解內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。2021-10-10
Python使用defaultdict解決字典默認(rèn)值
本文主要介紹了Python使用defaultdict解決字典默認(rèn)值,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04

