日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

pytorch的Backward過程用時太長問題及解決_python

作者:Ai_Taoism ? 更新時間: 2023-05-22 編程語言

pytorch Backward過程用時太長

問題描述

使用pytorch對網絡進行訓練的時候遇到一個問題,forward階段很快(只需要幾毫秒),backward階段卻用時很長(需要十多秒)。

導致這個問題的原因很容易被大家忽視,而且網上基本上沒有直接的解決方案,經過一天的折騰,總算把導致這個問題的原因搞清楚了。

解決方案

導致這個問題的原因在于訓練數據的淺拷貝,由于backward過程中的梯度是和模型推理過程中的張量相關的,如果這些張量在被模型使用之前沒有被深拷貝,意味著backward過程的會重復從這些張量的原始內存地址中取值,這個過程非常耗時。所以為了避免這個問題,需要養成一個好習慣,就是將張量數據輸入模型之前進行深拷貝

pytorch的深拷貝方式如下:

tensor_a = tensor_b.clone().detach()

Pytorch backward()簡單理解

backward()是反向傳播求梯度,具體實現過程如下

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)

結果

tensor([0.6667, 1.3333, 2.0000], dtype=torch.float64)

有幾個重要的點

1.必須要加上requires_grad=True才能求

2. 一般來說,需要標量才能求梯度。

3.具體過程如下:

z是一個標量(1*1矩陣)分別對x1,x2,x3求偏導, 再代入x1,x2,x3的數值,就是如上程序輸出的結果

總結

原文鏈接:https://blog.csdn.net/ahhhhhh520/article/details/124864850

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新