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():。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-838756.html
不使用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)
輸出:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-838756.html
tensor([2.])
到了這里,關(guān)于【Python】torch.no_grad()函數(shù)詳解和示例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!