我怎样才能只训练分类器并冻结 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())
我取了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())