婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > pytorch 禁止/允許計算局部梯度的操作

pytorch 禁止/允許計算局部梯度的操作

熱門標簽:唐山智能外呼系統一般多少錢 公司電話機器人 哈爾濱ai外呼系統定制 激戰2地圖標注 陜西金融外呼系統 騰訊外呼線路 廣告地圖標注app 海南400電話如何申請 白銀外呼系統

一、禁止計算局部梯度

torch.autogard.no_grad: 禁用梯度計算的上下文管理器。

當確定不會調用Tensor.backward()計算梯度時,設置禁止計算梯度會減少內存消耗。如果需要計算梯度設置Tensor.requires_grad=True

兩種禁用方法:

將不用計算梯度的變量放在with torch.no_grad()里

>>> x = torch.tensor([1.], requires_grad=True)
>>> with torch.no_grad():
...   y = x * 2
>>> y.requires_grad
Out[12]:False

使用裝飾器 @torch.no_gard()修飾的函數,在調用時不允許計算梯度

>>> @torch.no_grad()
... def doubler(x):
...     return x * 2
>>> z = doubler(x)
>>> z.requires_grad
Out[13]:False

二、禁止后允許計算局部梯度

torch.autogard.enable_grad :允許計算梯度的上下文管理器

在一個no_grad上下文中使能梯度計算。在no_grad外部此上下文管理器無影響.

用法和上面類似:

使用with torch.enable_grad()允許計算梯度

>>> x = torch.tensor([1.], requires_grad=True)
>>> with torch.no_grad():
...   with torch.enable_grad():
...     y = x * 2
>>> y.requires_grad
Out[14]:True
 
>>> y.backward()  # 計算梯度
>>> x.grad
Out[15]: tensor([2.])

在禁止計算梯度下調用被允許計算梯度的函數,結果可以計算梯度

>>> @torch.enable_grad()
... def doubler(x):
...     return x * 2
 
>>> with torch.no_grad():
...     z = doubler(x)
>>> z.requires_grad
 
Out[16]:True

三、是否計算梯度

torch.autograd.set_grad_enable()

可以作為一個函數使用:

>>> x = torch.tensor([1.], requires_grad=True)
>>> is_train = False
>>> with torch.set_grad_enabled(is_train):
...   y = x * 2
>>> y.requires_grad
Out[17]:False
 
>>> torch.set_grad_enabled(True)
>>> y = x * 2
>>> y.requires_grad
Out[18]:True
 
>>> torch.set_grad_enabled(False)
>>> y = x * 2
>>> y.requires_grad
Out[19]:False

總結:

單獨使用這三個函數時沒有什么,但是若是嵌套,遵循就近原則。

x = torch.tensor([1.], requires_grad=True)
 
with torch.enable_grad():
    torch.set_grad_enabled(False)
    y = x * 2
    print(y.requires_grad)
Out[20]: False
 
torch.set_grad_enabled(True)
with torch.no_grad():
    z = x * 2
    print(z.requires_grad)
Out[21]:False

補充:pytorch局部范圍內禁用梯度計算,no_grad、enable_grad、set_grad_enabled使用舉例

原文及翻譯

Locally disabling gradient computation
在局部區域內關閉(禁用)梯度的計算.
The context managers torch.no_grad(), torch.enable_grad(), 
and torch.set_grad_enabled() are helpful for locally disabling 
and enabling gradient computation. See Locally disabling gradient 
computation for more details on their usage. These context 
managers are thread local, so they won't work if you send 
work to another thread using the threading module, etc.
上下文管理器torch.no_grad()、torch.enable_grad()和
torch.set_grad_enabled()可以用來在局部范圍內啟用或禁用梯度計算.
在Locally disabling gradient computation章節中詳細介紹了
局部禁用梯度計算的使用方式.這些上下文管理器具有線程局部性,
因此,如果你使用threading模塊來將工作負載發送到另一個線程,
這些上下文管理器將不會起作用.

no_grad   Context-manager that disabled gradient calculation.
no_grad   用于禁用梯度計算的上下文管理器.
enable_grad  Context-manager that enables gradient calculation.
enable_grad  用于啟用梯度計算的上下文管理器.
set_grad_enabled  Context-manager that sets gradient calculation to on or off.
set_grad_enabled  用于設置梯度計算打開或關閉狀態的上下文管理器.

例子1

Microsoft Windows [版本 10.0.18363.1440]
(c) 2019 Microsoft Corporation。保留所有權利。
C:\Users\chenxuqi>conda activate pytorch_1.7.1_cu102
(pytorch_1.7.1_cu102) C:\Users\chenxuqi>python
Python 3.7.9 (default, Aug 31 2020, 17:10:11) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.manual_seed(seed=20200910)
torch._C.Generator object at 0x000001A2E55A8870>
>>> a = torch.randn(3,4,requires_grad=True)
>>> a
tensor([[ 0.2824, -0.3715,  0.9088, -1.7601],
        [-0.1806,  2.0937,  1.0406, -1.7651],
        [ 1.1216,  0.8440,  0.1783,  0.6859]], requires_grad=True)
>>> b = a * 2
>>> b
tensor([[ 0.5648, -0.7430,  1.8176, -3.5202],
        [-0.3612,  4.1874,  2.0812, -3.5303],
        [ 2.2433,  1.6879,  0.3567,  1.3718]], grad_fn=MulBackward0>)
>>> b.requires_grad
True
>>> b.grad
__main__:1: UserWarning: The .grad attribute of a Tensor that is not a leaf Tensor is being accessed. Its .grad attribute won't be populated during autograd.backward(). If you indeed want the gradient for a non-leaf Tensor, use .retain_grad() on the non-leaf Tensor. If you access the non-leaf Tensor by mistake, make sure you access the leaf Tensor instead. See github.com/pytorch/pytorch/pull/30531 for more informations.
>>> print(b.grad)
None
>>> a.requires_grad
True
>>> a.grad
>>> print(a.grad)
None
>>>
>>> with torch.no_grad():
...     c = a * 2
...
>>> c
tensor([[ 0.5648, -0.7430,  1.8176, -3.5202],
        [-0.3612,  4.1874,  2.0812, -3.5303],
        [ 2.2433,  1.6879,  0.3567,  1.3718]])
>>> c.requires_grad
False
>>> print(c.grad)
None
>>> a.grad
>>>
>>> print(a.grad)
None
>>> c.sum()
tensor(6.1559)
>>>
>>> c.sum().backward()
Traceback (most recent call last):
  File "stdin>", line 1, in module>
  File "D:\Anaconda3\envs\pytorch_1.7.1_cu102\lib\site-packages\torch\tensor.py", line 221, in backward
    torch.autograd.backward(self, gradient, retain_graph, create_graph)
  File "D:\Anaconda3\envs\pytorch_1.7.1_cu102\lib\site-packages\torch\autograd\__init__.py", line 132, in backward
    allow_unreachable=True)  # allow_unreachable flag
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
>>>
>>>
>>> b.sum()
tensor(6.1559, grad_fn=SumBackward0>)
>>> b.sum().backward()
>>>
>>>
>>> a.grad
tensor([[2., 2., 2., 2.],
        [2., 2., 2., 2.],
        [2., 2., 2., 2.]])
>>> a.requires_grad
True
>>>
>>>

例子2

Microsoft Windows [版本 10.0.18363.1440]
(c) 2019 Microsoft Corporation。保留所有權利。
C:\Users\chenxuqi>conda activate pytorch_1.7.1_cu102
(pytorch_1.7.1_cu102) C:\Users\chenxuqi>python
Python 3.7.9 (default, Aug 31 2020, 17:10:11) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.manual_seed(seed=20200910)
torch._C.Generator object at 0x000002109ABC8870>
>>>
>>> a = torch.randn(3,4,requires_grad=True)
>>> a
tensor([[ 0.2824, -0.3715,  0.9088, -1.7601],
        [-0.1806,  2.0937,  1.0406, -1.7651],
        [ 1.1216,  0.8440,  0.1783,  0.6859]], requires_grad=True)
>>> a.requires_grad
True
>>>
>>> with torch.set_grad_enabled(False):
...     b = a * 2
...
>>> b
tensor([[ 0.5648, -0.7430,  1.8176, -3.5202],
        [-0.3612,  4.1874,  2.0812, -3.5303],
        [ 2.2433,  1.6879,  0.3567,  1.3718]])
>>> b.requires_grad
False
>>>
>>> with torch.set_grad_enabled(True):
...     c = a * 3
...
>>> c
tensor([[ 0.8472, -1.1145,  2.7263, -5.2804],
        [-0.5418,  6.2810,  3.1219, -5.2954],
        [ 3.3649,  2.5319,  0.5350,  2.0576]], grad_fn=MulBackward0>)
>>> c.requires_grad
True
>>>
>>> d = a * 4
>>> d.requires_grad
True
>>>
>>> torch.set_grad_enabled(True)  # this can also be used as a function
torch.autograd.grad_mode.set_grad_enabled object at 0x00000210983982C8>
>>>
>>> # 以函數調用的方式來使用
>>>
>>> e = a * 5
>>> e
tensor([[ 1.4119, -1.8574,  4.5439, -8.8006],
        [-0.9030, 10.4684,  5.2031, -8.8257],
        [ 5.6082,  4.2198,  0.8917,  3.4294]], grad_fn=MulBackward0>)
>>> e.requires_grad
True
>>>
>>> d
tensor([[ 1.1296, -1.4859,  3.6351, -7.0405],
        [-0.7224,  8.3747,  4.1625, -7.0606],
        [ 4.4866,  3.3759,  0.7133,  2.7435]], grad_fn=MulBackward0>)
>>>
>>> torch.set_grad_enabled(False) # 以函數調用的方式來使用
torch.autograd.grad_mode.set_grad_enabled object at 0x0000021098394C48>
>>>
>>> f = a * 6
>>> f
tensor([[  1.6943,  -2.2289,   5.4527, -10.5607],
        [ -1.0836,  12.5621,   6.2437, -10.5908],
        [  6.7298,   5.0638,   1.0700,   4.1153]])
>>> f.requires_grad
False
>>>
>>>
>>>

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Pytorch實現將模型的所有參數的梯度清0
  • Pytorch中的自動求梯度機制和Variable類實例
  • 在pytorch中實現只讓指定變量向后傳播梯度
  • pytorch對梯度進行可視化進行梯度檢查教程
  • pytorch梯度剪裁方式
  • PyTorch的SoftMax交叉熵損失和梯度用法
  • 在pytorch中對非葉節點的變量計算梯度實例
  • pytorch損失反向傳播后梯度為none的問題

標簽:惠州 黑龍江 常德 四川 黔西 益陽 鷹潭 上海

巨人網絡通訊聲明:本文標題《pytorch 禁止/允許計算局部梯度的操作》,本文關鍵詞  pytorch,禁止,允許,計算,局部,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pytorch 禁止/允許計算局部梯度的操作》相關的同類信息!
  • 本頁收集關于pytorch 禁止/允許計算局部梯度的操作的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    丁香啪啪综合成人亚洲小说| 欧美日韩中文另类| 久久精品一区蜜桃臀影院| 国产v日产∨综合v精品视频| 亚洲精品国产一区二区精华液 | 日本不卡不码高清免费观看| 国产精品美女久久久久久久久久久| 4438成人网| 在线观看精品一区| jlzzjlzz亚洲女人18| 蜜桃一区二区三区在线观看| 亚洲自拍偷拍麻豆| 国产精品久久久久影院亚瑟| 精品国产免费人成在线观看| 日韩一卡二卡三卡| 91麻豆精品国产| 欧美精品久久久久久久多人混战 | 蜜臀精品久久久久久蜜臀| 亚洲女子a中天字幕| 国产欧美精品国产国产专区| 日韩精品一区二区三区在线| 欧美剧情片在线观看| 一本大道久久a久久精二百| 99久久精品一区| 91社区在线播放| 97久久精品人人爽人人爽蜜臀| www.av亚洲| 97精品久久久午夜一区二区三区 | 4438成人网| 欧美精品一区二区在线观看| 精品少妇一区二区三区免费观看| 欧美一区二区三区免费视频| 日韩精品专区在线| 久久久无码精品亚洲日韩按摩| 久久在线观看免费| 亚洲国产精品传媒在线观看| 国产精品乱码久久久久久| 中文av一区二区| 亚洲综合一区二区精品导航| 亚洲第一福利视频在线| 日本不卡123| 国产麻豆精品在线| av午夜一区麻豆| 91国偷自产一区二区三区观看| 欧美亚洲一区二区三区四区| 在线播放一区二区三区| 欧美电影影音先锋| 99久久伊人久久99| 一本大道久久a久久综合婷婷| 欧美人xxxx| 日韩精品一区二区三区视频 | 国产精品99久久不卡二区| 成人午夜伦理影院| 欧美午夜宅男影院| 精品盗摄一区二区三区| 在线不卡免费欧美| 中文字幕一区二区不卡| 日韩国产欧美三级| 福利电影一区二区| 成人福利视频在线| 国产成人免费视频网站高清观看视频| 99精品一区二区| 欧美电影在哪看比较好| 国产网站一区二区| 亚洲超碰精品一区二区| 国产激情91久久精品导航| 欧美日韩专区在线| 国产精品久久久久久久久晋中| 亚洲h在线观看| 成人激情开心网| 欧美日韩一区二区三区免费看| 精品福利在线导航| 亚洲电影一区二区三区| 成人永久免费视频| 欧美成人乱码一区二区三区| 亚洲女同一区二区| 国产一区二区精品久久91| 成人免费视频一区| 精品入口麻豆88视频| 一区二区高清在线| 成人午夜精品在线| 精品国产电影一区二区| 午夜久久福利影院| 欧美中文字幕久久| 亚洲免费观看在线视频| 成人丝袜18视频在线观看| 欧美一区二区三区免费视频| 亚洲线精品一区二区三区八戒| av一区二区三区黑人| 久久这里只精品最新地址| 看片网站欧美日韩| 日韩一区二区在线播放| 亚洲成人福利片| 欧美性一级生活| 亚洲国产综合91精品麻豆| 91美女精品福利| 最新中文字幕一区二区三区| 国产成人亚洲综合a∨婷婷| 精品欧美黑人一区二区三区| 亚洲v精品v日韩v欧美v专区| 色综合久久中文字幕| 国产精品传媒视频| caoporm超碰国产精品| 国产精品拍天天在线| 国产a区久久久| 最新不卡av在线| 99久久精品国产网站| 中文字幕一区三区| av电影天堂一区二区在线| 亚洲日本青草视频在线怡红院| 成人黄动漫网站免费app| 亚洲欧洲成人精品av97| 91老师片黄在线观看| 亚洲综合男人的天堂| 69堂国产成人免费视频| 美脚の诱脚舐め脚责91 | 欧美亚洲国产怡红院影院| 国产日韩三级在线| 国产在线精品一区在线观看麻豆| 精品福利一区二区三区| 国产不卡视频在线播放| 专区另类欧美日韩| 欧美视频一区二区三区| 久久精品久久精品| 欧美激情一区二区在线| 色综合色狠狠综合色| 日本不卡一区二区三区高清视频| 日韩一区二区精品葵司在线| 国产精品亚洲午夜一区二区三区| 自拍偷拍国产精品| 91精品国产一区二区三区蜜臀| 国产综合一区二区| 国产精品丝袜一区| 91麻豆视频网站| 麻豆精品国产传媒mv男同 | 欧美无砖专区一中文字| 亚洲视频在线一区二区| 欧美福利视频一区| 成人高清av在线| 亚洲高清久久久| 久久精品人人爽人人爽| 欧美日韩久久不卡| 美国毛片一区二区| 久久久久9999亚洲精品| 成人理论电影网| 蜜桃av一区二区三区| 亚洲狼人国产精品| 欧美激情一区二区三区四区 | 成人在线一区二区三区| 亚洲国产成人tv| 日本一区二区在线不卡| 成人网页在线观看| 日本女优在线视频一区二区| 中文字幕的久久| 91精品国产手机| 91小视频在线免费看| 秋霞电影网一区二区| 亚洲欧美一区二区三区孕妇| 精品对白一区国产伦| 欧美精品丝袜久久久中文字幕| av一区二区不卡| 大陆成人av片| 国产精品一区二区黑丝| 蜜桃av一区二区在线观看 | 成人性生交大片免费看中文网站| 天天av天天翘天天综合网| 国产精品女上位| 久久精品在线观看| 欧美一二区视频| 欧美色老头old∨ideo| 波多野结衣欧美| 久久99深爱久久99精品| 日韩av高清在线观看| 亚洲一二三区在线观看| 亚洲免费观看高清| 国产精品久久久久精k8| 中文一区二区在线观看| 国产亚洲欧美中文| 国产欧美日韩视频一区二区| 久久综合网色—综合色88| 欧美精品一二三| 91丨porny丨中文| 国产精品中文欧美| 国产精品一区二区在线看| 老司机精品视频导航| 精品影院一区二区久久久| 国产福利一区二区三区| 国产在线播放一区三区四| 韩国成人福利片在线播放| 国产主播一区二区| 一区二区成人在线视频| 亚洲高清免费观看| 免费欧美高清视频| 国产在线视频精品一区| 粉嫩一区二区三区在线看| av电影天堂一区二区在线| 欧美性受极品xxxx喷水| 日韩欧美一区二区免费| 久久综合久久久久88| 国产精品久久一卡二卡|