如何具有两个优化器,一个优化器训练整个参数,而另一个优化器训练参数的一部分?

问题描述 投票:2回答:1

我有一个模特:

class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.conv1 = nn.Conv2d(128, 128, (3,3))
        self.conv2 = nn.Conv2d(128, 256, (3,3))
        self.conv3 = nn.Conv2d(256, 256, (3,3))

    def forward(self,):
        x = F.relu(self.conv1(x))
        x = F.relu(self.conv2(x))
        x = F.relu(self.conv3(x))
        return x

model = MyModel()

我想以这样的方式训练模型:在每个训练步骤中DATA_X1应该训练['conv1', 'conv2', 'conv3']层和DATA_X2应该只训练['conv3']层。

我尝试制作两个优化器:

# Full parameters train
all_params = model.parameters()
all_optimizer = optim.Adam(all_params, lr=0.01)

# Partial parameters train
partial_params = model.parameters()
for p, (name, param) in zip(list(partial_params), model.named_parameters()):
    if name in ['conv3']:
        p.requires_grad = True
    else:
        p.requires_grad = False
partial_optimizer = optim.Adam(partial_params, lr=0.01)

但这会同时影响required_grad = False的优化程序>

有什么办法可以做到这一点?

我有一个模型:类MyModel(nn.Module):def __init __(self):super(MyModel,self).__ init __()self.conv1 = nn.Conv2d(128,128,(3,3))self .conv2 = nn.Conv2d(128,256,(3,3)...

python deep-learning pytorch
1个回答
1
投票

为什么不将此功能构建到模型中?

© www.soinside.com 2019 - 2024. All rights reserved.