英文:
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 <method 'requires_grad_' of 'torch._C._TensorBase' objects>. This error happens when you are using a
LazyModuleor explicitly manipulating
torch.nn.parameter.UninitializedParameterobjects. When using LazyModules Call
forward 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
:
>>> model(torch.rand(shape))
And only then can you freeze the desired layer with requires_grad_(False)
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论