我正在使用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.blocks
是nn.ModuleList
,你可以切片块只选择最后的n
层。像这样:
model.blocks[-n:].requires_grad_(False)