Python 3.x PyTorch中多学习率模型的训练

Python 3.x PyTorch中多学习率模型的训练,python-3.x,neural-network,pytorch,Python 3.x,Neural Network,Pytorch,我是PyTorch的新手,已经习惯了一些概念 我需要训练一个神经网络。对于优化,我需要使用Adam optimizer,它具有4种不同的学习率=[2e-5、3e-5、4e-5、5e-5] 优化器功能定义如下 def optimizer(no_decay = ['bias', 'gamma', 'beta'], lr=2e-5): param_optimizer = list(model.named_parameters()) optimizer_grouped_parameter

我是PyTorch的新手,已经习惯了一些概念

我需要训练一个神经网络。对于优化,我需要使用Adam optimizer,它具有4种不同的
学习率=[2e-5、3e-5、4e-5、5e-5]

优化器功能定义如下

def optimizer(no_decay = ['bias', 'gamma', 'beta'], lr=2e-5):
    param_optimizer = list(model.named_parameters())
    optimizer_grouped_parameters = [
    {'params': [p for n, p in param_optimizer if not any(nd in n for nd in no_decay)],
     'weight_decay_rate': 0.01},
    {'params': [p for n, p in param_optimizer if any(nd in n for nd in no_decay)],
     'weight_decay_rate': 0.0}
     ]
     # This variable contains all of the hyperparemeter information our training loop needs
     optimizer = BertAdam(optimizer_grouped_parameters, lr, warmup=.1)
     return optimizer
如何确保优化器使用我指定的学习率集并返回最佳模型

在培训期间,我们使用下面的优化器,我看不出有什么方法可以告诉它尝试不同的学习速度

def model_train():
    #other code
    # clear out the gradient
    optimizer.zero_grad()
    # Forward pass
    loss = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask, labels=b_labels)
    train_loss_set.append(loss.item())
    # Backward pass
    loss.backward()
    # Update parameters and take a step using the computed gradient
    optimizer.step()
我知道,
optimizer.step()
在内部逐步优化梯度。但我如何确保优化器尝试我指定的学习率集,并将最佳模型返回给我


请提出建议。

如果你想用四种不同的学习率训练四次,然后进行比较,你不仅需要四个
优化器
s,还需要四个
模型
s:使用不同的学习率(或任何其他元参数)在高维空间中产生不同的权重轨迹“参数空间”。也就是说,经过几步之后,区分模型的不仅是学习率,还有训练权重本身——这就是产生模型之间实际差异的原因


因此,您需要使用4个具有不同学习率的
optimizer
实例,使用4个具有不同学习率的
optimizer
实例,进行4次训练。

何时何地应用不同的学习率?我想训练4个具有不同学习率的模型,并找到性能最佳的模型。这样您就可以进行精简k它相当于调用
优化器
4次,就像在
优化器(无衰减=['bias',gamma',beta',lr=2e-5)
优化器(无衰减=['bias',gamma',beta',lr=3e-5)
优化器(无衰减=['bias',gamma beta',lr=4e-5)和
优化器(无衰减=['bias',gamma beta',beta',lr=5e-5)
我明白了。如果你想训练四个不同的模型,也许你可以只训练四次?@zihaozhihao所以我的观点是我需要在参数中用不同的
lr
编写四个不同的优化器?因为调用
优化器.step()
时无法(据我所知)传递参数?