我怎样才能只训练分类器并冻结 Pytorch 中的其余参数?

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

我取了MoviNet的预训练模型,我改了最后一层

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

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 中冻结所有以前的 laer,谁能告诉我我该怎么做?

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

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

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