【问题标题】:Unfreeze model Layer by Layer in PyTorch在 PyTorch 中逐层解冻模型
【发布时间】:2021-09-22 05:08:46
【问题描述】:

我正在使用来自 here (T2T_ViT_7) 的 PyTorch 模型。

我正在尝试冻结除最后(头)层以外的所有层,并在我的数据集上对其进行训练。我想评估它的性能,然后一层一层解冻,每次训练,看看效果如何。

为了最初冻结所有层并解冻头部层,我使用了:

for param in model.parameters():
    param.requires_grad_(False)

model.head.requires_grad_(True)

现在我想从底层开始,一层一层的解冻。我怎样才能做到这一点?我使用 model.modules() 还是 model.children()?

谢谢!

【问题讨论】:

    标签: machine-learning pytorch layer


    【解决方案1】:

    如果 layers 是指model.blocks 内的每个块,则可以使用nn.Module.children (// nn.Module.named_children)。这将返回所有直接子模块,而 nn.Module.modules 递归返回 all 个子模块。

    由于model.blocks 是nn.ModuleList,您可以对块进行切片以仅选择最后的n 层。类似的东西:

    model.blocks[-n:].requires_grad_(False)
    

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 2022-10-18
      • 2019-01-29
      • 2021-12-18
      • 2020-04-19
      • 2021-12-30
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      相关资源
      最近更新 更多