婷婷综合国产,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
    日韩精彩视频在线观看| 欧美一级搡bbbb搡bbbb| 亚洲一区二区3| 欧美韩日一区二区三区| 久久久精品国产99久久精品芒果| 日韩午夜激情视频| 91精品国产福利| 欧美成人精精品一区二区频| 2024国产精品视频| 久久久久久电影| 亚洲欧洲日韩综合一区二区| 亚洲欧美视频一区| 亚洲精品乱码久久久久久黑人| 亚洲人成在线播放网站岛国| 日韩美女视频19| 亚洲一区二区三区小说| 日本不卡一区二区| 极品销魂美女一区二区三区| 大桥未久av一区二区三区中文| 成人精品在线视频观看| 在线观看国产一区二区| 欧美午夜精品理论片a级按摩| 国产精品18久久久久久vr| 欧美一区二区三级| 精品欧美一区二区三区精品久久 | 欧美精品一二三| 欧美va亚洲va| 亚洲日本成人在线观看| 人人精品人人爱| 国产高清在线精品| 在线观看一区二区视频| 精品久久久久久久久久久久久久久| 国产性天天综合网| 一区二区成人在线视频| 精品在线免费视频| av在线播放不卡| 欧美一区二区三区白人| 亚洲女同一区二区| 紧缚奴在线一区二区三区| 国产成人精品免费在线| 日韩中文字幕亚洲一区二区va在线| 男女性色大片免费观看一区二区 | 日韩视频一区二区三区| 中文字幕一区二区视频| 毛片av一区二区三区| jlzzjlzz欧美大全| 91精品国产黑色紧身裤美女| 亚洲色图在线视频| 国产乱人伦偷精品视频不卡| 欧美手机在线视频| 中文字幕欧美日本乱码一线二线| 蜜臀精品一区二区三区在线观看| 一本大道av一区二区在线播放| 2024国产精品| 免费看欧美女人艹b| 欧美在线视频日韩| 亚洲图片你懂的| 成人午夜免费av| 久久精品欧美日韩精品 | 国产日产欧美一区二区视频| 日韩有码一区二区三区| 在线免费一区三区| 中文字幕一区二区三区不卡| 国产宾馆实践打屁股91| 久久色视频免费观看| 美腿丝袜一区二区三区| 91精品国产综合久久精品app| 一区二区在线看| 99re热视频这里只精品| 国产精品女同互慰在线看| 成人午夜av影视| 中文字幕字幕中文在线中不卡视频| 国产日产精品1区| 久久久精品tv| 国产综合一区二区| 精品对白一区国产伦| 久久99久国产精品黄毛片色诱| 91精品婷婷国产综合久久 | 欧美日韩一级片网站| 亚洲欧美成aⅴ人在线观看 | 91精品国模一区二区三区| 亚洲成人激情自拍| 欧美精品日日鲁夜夜添| 日韩国产在线一| 欧美成人艳星乳罩| 国产伦精品一区二区三区在线观看| 欧美成人猛片aaaaaaa| 国产精品99久久久| 中文字幕中文字幕一区| 色综合久久久久综合体| 一区二区理论电影在线观看| 欧美色大人视频| 爽好多水快深点欧美视频| 日韩精品一区二| 成人激情免费电影网址| 一区二区三区在线观看视频| 91麻豆精品国产91| 国产精品综合久久| 中文字幕中文在线不卡住| 欧美日韩美女一区二区| 国产在线国偷精品产拍免费yy| 中文字幕一区在线观看视频| 色狠狠综合天天综合综合| 日本亚洲一区二区| 国产精品女主播av| 91精品国产综合久久久久久 | 亚洲人成网站精品片在线观看| 欧美性做爰猛烈叫床潮| 美女诱惑一区二区| 日韩美女视频一区二区| 日韩欧美国产一区二区在线播放| 成人在线视频首页| 日本视频一区二区三区| 色综合网色综合| 国产精品嫩草久久久久| 在线观看亚洲a| 国产丶欧美丶日本不卡视频| 亚洲国产综合色| 国产三级精品在线| 欧美人xxxx| 99久精品国产| 国产米奇在线777精品观看| 一区二区三区免费观看| 国产色婷婷亚洲99精品小说| 日韩一区二区在线免费观看| 色综合天天狠狠| 国产iv一区二区三区| 蜜臀99久久精品久久久久久软件| 一区二区三区在线播| 国产精品伦理在线| 亚洲精品一区二区在线观看| 欧美精品三级日韩久久| 欧美视频第二页| 日本大香伊一区二区三区| 成人av在线网站| 欧美日韩中文精品| 亚洲18影院在线观看| 国产精品久久久久久久久搜平片| www.视频一区| 国产成人免费在线| 激情综合网激情| 久久99久久精品欧美| 美女一区二区视频| 日韩电影在线看| 视频在线观看一区| 亚洲成va人在线观看| 亚洲一区二区精品视频| 亚洲一区二区三区三| 一区二区久久久久久| 亚洲资源中文字幕| 亚洲乱码国产乱码精品精98午夜 | 国产欧美一区二区精品仙草咪| 亚洲精品在线免费观看视频| 欧美精品一区视频| 国产欧美一区二区精品性色超碰 | 26uuu欧美| 99国内精品久久| 色婷婷av一区| 欧美久久婷婷综合色| 欧美一级搡bbbb搡bbbb| 日韩精品一区二区三区老鸭窝 | 欧美人与禽zozo性伦| 欧美日韩aaaaaa| 日韩欧美中文字幕制服| 国产亚洲短视频| 国产精品久久久久久福利一牛影视 | 国产精品丝袜91| 亚洲男同性视频| 日韩精品电影在线观看| 国产激情一区二区三区| 一本到三区不卡视频| 欧美一级高清片| 国产情人综合久久777777| 一区二区三区在线视频观看58 | 日本欧美一区二区三区乱码| 久久国产免费看| 99精品国产视频| 欧美丰满少妇xxxbbb| 久久精品视频免费| 亚洲愉拍自拍另类高清精品| 久久69国产一区二区蜜臀| 91无套直看片红桃| 欧美日韩国产综合一区二区三区 | 亚洲成人免费视频| 麻豆精品一二三| 一本久久a久久免费精品不卡| 精品国产乱码久久久久久图片 | 亚洲综合在线免费观看| 国内精品不卡在线| 欧美午夜免费电影| 国产区在线观看成人精品| 日韩精品久久理论片| av一本久道久久综合久久鬼色| 91精品国产色综合久久ai换脸| 中文字幕色av一区二区三区| 久久99精品久久久久久久久久久久| 色综合久久久网| 国产丝袜在线精品| 麻豆视频一区二区| 欧美日韩日日骚|