【发布时间】: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)中调用optimizer4次 -
我明白了。如果你想训练四种不同的模型,可能只训练四次?
-
@zihaozhihao 所以我的意思是我需要在参数中用不同的
lr编写4个不同的优化器?因为在调用optimizer.step()时没有办法(我不知道)传递参数?
标签: python-3.x neural-network pytorch