如何将 requires_grad_ 设置为 false(冻结)PyTorch 惰性层?

huangapple go评论60阅读模式
英文:

How to set requires_grad_ to false (freeze?) PyTorch Lazy layers?

问题

PyTorch 提供了懒加载层,例如 torch.nn.LazyLinear。我想要冻结其中的一些层,即确保它们不进行梯度更新。当我尝试使用 .requires_grad_(False) 时,我收到以下错误信息:

ValueError: 尝试在未初始化的参数上使用 <method 'requires_grad_' of 'torch._C._TensorBase' 对象>。当您使用 LazyModule 或明确操作 torch.nn.parameter.UninitializedParameter 对象时,会出现此错误。在使用 LazyModules 时,请先使用虚拟批次调用 forward 以初始化参数,然后再调用 torch 函数

如何冻结懒加载层?

英文:

PyTorch offers lazy layers e.g. torch.nn.LazyLinear. I want to freeze some of these layers in my network i.e. ensure they take no gradient steps. When I try .requires_grad_(False), I receive the error:

ValueError: Attempted to use an uninitialized parameter in &lt;method &#39;requires_grad_&#39; of &#39;torch._C._TensorBase&#39; objects&gt;. This error happens when you are using a LazyModuleor explicitly manipulatingtorch.nn.parameter.UninitializedParameterobjects. When using LazyModules Callforward with a dummy batch to initialize the parameters before calling torch functions

How do I freeze lazy layers?

答案1

得分: 1

根据错误信息的建议,你需要对懒惰模块执行一个虚拟推断,以完全初始化其所有参数。

换句话说,考虑到你的正确输入形状 shape

>>> model(torch.rand(shape))

然后你才能使用 requires_grad_(False) 冻结所需的层。

英文:

As the error message suggests you need to perform a dummy inference on a lazy module in order to fully initialize all of its parameters.

In other words, considering your correct input shape shape:

&gt;&gt;&gt; model(torch.rand(shape))

And only then can you freeze the desired layer with requires_grad_(False).

huangapple
  • 本文由 发表于 2023年2月24日 04:46:22
  • 转载请务必保留本文链接:https://go.coder-hub.com/75550160.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定