Как я могу обучить только классификатор и заморозить остальные параметры в Pytorch?

#python #pytorch #torch

#питон #пыторч #факел

Вопрос:

Я взял предварительно подготовленную модель MoviNet, я изменил последний слой.

Это последние параметры предварительно подготовленной модели, которые я взял;

 classifier.0.conv_1.conv2d.weight : torch.Size([2048, 640, 1, 1]) classifier.0.conv_1.conv2d.bias : torch.Size([2048]) classifier.3.conv_1.conv2d.weight : torch.Size([600, 2048, 1, 1]) classifier.3.conv_1.conv2d.bias : torch.Size([600])  

Ниже приведены параметры, которые я изменил на последнем слое;

 clfr.0.multi_head.0.head2.0.conv_1.conv2d.weight : torch.Size([2048, 640, 1, 1]) clfr.0.multi_head.0.head2.0.conv_1.conv2d.bias : torch.Size([2048]) clfr.0.multi_head.0.head1.weight : torch.Size([600, 2048, 1, 1]) clfr.0.multi_head.0.head1.bias : torch.Size([600])  

Я хочу обучить только классификатор (clfr) на основе весов предыдущих слоев и заморозить все предыдущие уровни в pytorch, может ли кто-нибудь сказать мне, как я могу это сделать?

Ответ №1:

При создании оптимизатора передавайте только те параметры, которые вы хотите обновить во время обучения. В вашем примере это может выглядеть примерно так:

 optimizer = torch.optim.Adam(clfr.parameters())  

Ответ №2:

Вы можете установить layer.requires_grad=False для каждого слоя, который вы не хотите тренировать. Если это проще, вы можете установить его False для всех слоев, прокрутив всю модель и установив его True для конкретных слоев, которые вы имеете в виду. Это делается для того, чтобы убедиться, что у вас установлены все остальные слои False , без необходимости явно определять, какие это слои.