在PyTorch中逐层解冻模型



我正在使用PyTorch模型从这里(T2T_ViT_7)。

我试图冻结除最后(头部)层以外的所有层,并在我的数据集上训练它。我想评估它的性能,然后一个一个解冻层,每次都训练它,看看它的表现如何。

首先冻结所有图层,然后解冻头部图层,我使用:

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

现在我想从底部开始,一层一层地解冻。我该怎么做呢?我应该使用model.modules()还是model.children()?

谢谢!

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

因为model.blocksnn.ModuleList,你可以切片块只选择最后的n层。像这样:

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

最新更新