Разморозьте модель Слой за слоем в PyTorch

#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)