繁体   English   中英

如何只训练分类器并冻结 Pytorch 中参数的 rest?

[英]How can I only train the classifier and freeze rest of the parameters in Pytorch?

我取了 MoviNet 的预训练 model,我改变了最后一层。

这是我采用的预训练 model 的最后一个参数;

classifier.0.conv_1.conv2d.weight  :  torch.Size([2048, 640, 1, 1])
classifier.0.conv_1.conv2d.bias  :  torch.Size([2048])
classifier.3.conv_1.conv2d.weight  :  torch.Size([600, 2048, 1, 1])
classifier.3.conv_1.conv2d.bias  :  torch.Size([600])

以下是我在最后一层更改的参数;

clfr.0.multi_head.0.head2.0.conv_1.conv2d.weight  :  torch.Size([2048, 640, 1, 1])
clfr.0.multi_head.0.head2.0.conv_1.conv2d.bias  :  torch.Size([2048])
clfr.0.multi_head.0.head1.weight  :  torch.Size([600, 2048, 1, 1])
clfr.0.multi_head.0.head1.bias  :  torch.Size([600])

我想只训练基于前一层权重的分类器(clfr),并冻结 pytorch 中的所有先前层,谁能告诉我该怎么做?

您可以为不想训练的每一层设置layer.requires_grad=False 如果更容易,您可以通过循环遍历整个 model 并将其设置为您想到的特定层将其设置为True来将所有层设置为False 这是为了确保您将所有其他层设置为False ,而不必明确找出它们是哪些层。

创建优化器时,仅传递您要在训练期间更新的参数。 在您的示例中,它可能类似于:

optimizer = torch.optim.Adam(clfr.parameters())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM