我是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()
在内部逐步优化了渐变效果。但是,如何确保优化器尝试指定的学习率集并向我返回最佳模型呢?
请提出建议。
答案 0 :(得分:1)
如果您想用四种不同的学习率训练四次,然后进行比较,则不仅需要四个optimizer
,还需要四个model
:使用不同的学习率(或任何其他元参数)对于此问题)会在高维“参数空间”中产生不同的权重轨迹。也就是说,经过几个步骤,不仅模型之间的学习率有所不同,而且训练后的权重本身也得到了区分-这就是模型之间的实际差异。
因此,您需要使用model
的4个单独实例和optimizer
的4个实例进行4次训练,学习速率不同。