#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
, без необходимости явно определять, какие это слои.