【问题标题】:Training a model with multiple learning rate in PyTorch在 PyTorch 中训练具有多个学习率的模型
【发布时间】:2020-01-22 10:38:06
【问题描述】:

我是 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() 在内部逐步优化渐变。但是如何确保优化器尝试我指定的一组学习率并将最佳模型返回给我?

请提出建议。

【问题讨论】:

  • 您想在何时何地应用不同的学习率?
  • 我想训练 4 个模型,每个模型都有不同的学习率,并找到表现最好的一个。所以你可以认为它相当于在optimizer(no_decay = ['bias', 'gamma', 'beta'], lr=2e-5)optimizer(no_decay = ['bias', 'gamma', 'beta'], lr=3e-5)optimizer(no_decay = ['bias', 'gamma', 'beta'], lr=4e-5)optimizer(no_decay = ['bias', 'gamma', 'beta'], lr=5e-5)中调用optimizer 4次
  • 我明白了。如果你想训练四种不同的模型,可能只训练四次?
  • @zihaozhihao 所以我的意思是我需要在参数中用不同的lr 编写4个不同的优化器?因为在调用optimizer.step()时没有办法(我不知道)传递参数?

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-05-05
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2019-05-22
    • 2019-03-10
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多