pytorch冻结模型权重,不进行梯度反向传播
在 PyTorch 中冻结模型权重,不进行梯度反向传播,可以通过以下几个步骤实现:
- 将模型的所有参数设置为不需要梯度更新,即设置
requires_grad
属性为False
。
pythonCopy code
for param in model.parameters():
param.requires_grad = False
2.对于需要更新的参数,将其 requires_grad
属性设置为 True
。
pythonCopy code
for param in model.fc.parameters(): param.requires_grad = True
这里以 model.fc
为例,表示只对模型中最后一层全连接层的参数进行更新。
3.在训练过程中,将需要更新的参数传入优化器中。
pythonCopy code
optimizer = torch.optim.SGD(filter(lambda p: p.requires_grad, model.parameters()), lr=0.001)
在这里使用了 filter
函数,只选择 requires_grad=True
的参数进行优化,