PyTorch 1.0 中文文档:自动求导机制

Posted wizardforcel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyTorch 1.0 中文文档:自动求导机制相关的知识,希望对你有一定的参考价值。

译者:冯宝宝

本说明将概述autograd(自动求导)如何工作并记录每一步操作。了解这些并不是绝对必要的,但我们建议您熟悉它,因为它将帮助你编写更高效,更清晰的程序,并可以帮助您进行调试。

反向排除子图

每个张量都有一个标志:requires_grad,允许从梯度计算中细致地排除子图,并可以提高效率。

requires_grad

只要有单个输入进行梯度计算操作,则其输出也需要梯度计算。相反,只有当所有输入都不需要计算梯度时,输出才不需要梯度计算。如果其中所有的张量都不需要进行梯度计算,后向计算不会在子图中执行。

>>> x = torch.randn(5, 5)  # requires_grad=False by default
>>> y = torch.randn(5, 5)  # requires_grad=False by default
>>> z = torch.randn((5, 5), requires_grad=True)
>>> a = x + y
>>> a.requires_grad
False
>>> b = a + z
>>> b.requires_grad
True

当你想要冻结部分模型或者事先知道不会使用某些参数的梯度时,这些标志非常有用。例如,如果要微调预训练的CNN,只需在冻结的基础中切换requires_grad标志就够了,并且直到计算到达最后一层,才会保存中间缓冲区,,其中仿射变换将使用所需要梯度的权重 ,网络的输出也需要它们。

model = torchvision.models.resnet18(pretrained=True)
for param in model.parameters():
    param.requires_grad = False
# Replace the last fully-connected layer
# Parameters of newly constructed modules have requires_grad=True by default
model.fc = nn.Linear(512, 100)

阅读全文/改进本文

以上是关于PyTorch 1.0 中文文档:自动求导机制的主要内容,如果未能解决你的问题,请参考以下文章

PyTorch学习Aurograd自动求导机制总结

[Pytorch系列-22]:Pytorch基础 - Autograd库 Autograd.Function与反向自动求导机制

推荐PyTorch中文文档

[Pytorch系列-21]:Pytorch基础 - 反向链式求导的全过程拆解

[Pytorch系列-20]:Pytorch基础 - Varialbe变量的手工求导和自动链式求导

Pytorch Note6 自动求导Autograd