在PyTorch中训练具有多种学习率的模型

时间:2019-09-21 21:11:01

标签: python-3.x neural-network pytorch

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

我需要训练一个神经网络。为了进行优化,我需要将Adam优化器与4个不同的learning rates = [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()在内部逐步优化了渐变效果。但是,如何确保优化器尝试指定的学习率集并向我返回最佳模型呢?

请提出建议。

1 个答案:

答案 0 :(得分:1)

如果您想用四种不同的学习率训练四次,然后进行比较,则不仅需要四个optimizer,还需要四个model:使用不同的学习率(或任何其他元参数)对于此问题)会在高维“参数空间”中产生不同的权重轨迹。也就是说,经过几个步骤,不仅模型之间的学习率有所不同,而且训练后的权重本身也得到了区分-这就是模型之间的实际差异。

因此,您需要使用model的4个单独实例和optimizer的4个实例进行4次训练,学习速率不同。