首页 > 解决方案 > 在 PyTorch 中训练具有多个学习率的模型

问题描述

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

我需要训练一个神经网络。为了优化,我需要使用具有 4 种不同的 Adam 优化器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()内部会逐步优化渐变。但是如何确保优化器尝试我指定的一组学习率并将最佳模型返回给我?

请建议。

标签: python-3.xneural-networkpytorch

解决方案


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

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


推荐阅读