欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python之torch.no_grad()函數(shù)使用和示例

 更新時(shí)間:2024年03月26日 16:41:30   作者:木彳  
這篇文章主要介紹了Python之torch.no_grad()函數(shù)使用和示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

torch.no_grad()函數(shù)使用和示例

torch.no_grad() 是 PyTorch 中的一個(gè)上下文管理器,用于在進(jìn)入該上下文時(shí)禁用梯度計(jì)算。

這在你只關(guān)心評(píng)估模型,而不是訓(xùn)練模型時(shí)非常有用,因?yàn)樗梢燥@著減少內(nèi)存使用并加速計(jì)算。

當(dāng)你在 torch.no_grad() 上下文管理器中執(zhí)行張量操作時(shí),PyTorch 不會(huì)為這些操作計(jì)算梯度。

這意味著不會(huì)在 .grad 屬性中累積梯度,并且操作會(huì)更快地執(zhí)行。

使用torch.no_grad()

import torch

# 創(chuàng)建一個(gè)需要梯度的張量
x = torch.tensor([1.0], requires_grad=True)

# 使用 no_grad() 上下文管理器
with torch.no_grad():
    y = x * 2

    
y.backward()

print(x.grad)

輸出:

RuntimeError                              Traceback (most recent call last)
Cell In[52], line 11
      7 with torch.no_grad():
      8     y = x * 2
---> 11 y.backward()
     13 print(x.grad)

File E:\anaconda\lib\site-packages\torch\_tensor.py:396, in Tensor.backward(self, gradient, retain_graph, create_graph, inputs)
    387 if has_torch_function_unary(self):
    388     return handle_torch_function(
    389         Tensor.backward,
    390         (self,),
   (...)
    394         create_graph=create_graph,
    395         inputs=inputs)
--> 396 torch.autograd.backward(self, gradient, retain_graph, create_graph, inputs=inputs)

File E:\anaconda\lib\site-packages\torch\autograd\__init__.py:173, in backward(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)
    168     retain_graph = create_graph
    170 # The reason we repeat same the comment below is that
    171 # some Python versions print out the first line of a multi-line function
    172 # calls in the traceback and some print out the last line
--> 173 Variable._execution_engine.run_backward(  # Calls into the C++ engine to run the backward pass
    174     tensors, grad_tensors_, retain_graph, create_graph, inputs,
    175     allow_unreachable=True, accumulate_grad=True)

RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn

輸出錯(cuò)誤,因?yàn)槭褂昧藈ith torch.no_grad():。

不使用torch.no_grad()

import torch

# 創(chuàng)建一個(gè)需要梯度的張量
x = torch.tensor([1.0], requires_grad=True)

# 使用 no_grad() 上下文管理器
y = x * 2
y.backward()
print(x.grad)

輸出:

tensor([2.])

@torch.no_grad()

with torch.no_grad()或者@torch.no_grad()中的數(shù)據(jù)不需要計(jì)算梯度,也不會(huì)進(jìn)行反向傳播

model.eval()                               
with torch.no_grad():
   ...

等價(jià)于

@torch.no_grad()
def eval():
    ...

總結(jié)

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

相關(guān)文章

最新評(píng)論