#machine-learning #pytorch #layer
Вопрос:
Я работаю с моделью PyTorch отсюда (T2T_ViT_7).
Я пытаюсь заморозить все слои, кроме последнего (головного) слоя, и обучить его на своем наборе данных. Я хочу оценить его производительность, а затем разморозить слои один за другим, каждый раз тренировать его и смотреть, как он работает.
Чтобы изначально заморозить все слои и просто разморозить верхний слой, я использовал:
for param in model.parameters():
param.requires_grad_(False)
model.head.requires_grad_(True)
Теперь я хочу начать с самого низа и начать размораживать слои один за другим. Как я могу это сделать? Использую ли я model.modules() или, может быть, model.children()?
Спасибо!
Ответ №1:
Если под слоями вы подразумеваете каждый блок внутри model.blocks
, то вы можете использовать nn.Module.children
(// nn.Module.named_children
). Это вернет все прямые подмодули, в то время nn.Module.modules
как все подмодули будут возвращены рекурсивно.
Поскольку model.blocks
это a nn.ModuleList
, вы можете разрезать блоки, чтобы выбрать только последние n
слои. Что-то вроде того:
model.blocks[-n:].requires_grad_(False)