Я новичок в 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()
внутренне шаг за шагом, чтобы оптимизировать градиент.Но как мне убедиться, что оптимизатор попробует мой указанный набор скорости обучения и вернет мне лучшую модель?
Пожалуйста, предложите.