【问题标题】:How can I only train the classifier and freeze rest of the parameters in Pytorch?如何只训练分类器并冻结 Pytorch 中的其余参数?
【发布时间】:2022-01-12 06:47:03
【问题描述】:

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

【问题讨论】:

    标签: python pytorch torch


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-04-02
        • 2020-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-24
        • 2022-12-09
        • 1970-01-01
        • 2012-12-05
        相关资源
        最近更新 更多