0

我想知道训练期间的实际学习率,这是我的代码。

learning_rate = 0.001
optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=[1, 2], gamma=0.1)


def train(epoch):
    train_loss = 0

    for batch_idx, (input, target) in enumerate(train_loader):
        predict_label = net(input)
        loss = criterion(predict_label, target)
        train_loss += loss.item()

        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        print(optimizer.param_groups[0]['lr'])

    scheduler.step()
    print(scheduler.state_dict()['_last_lr'])
    print(optimizer.param_groups[0]['lr'])

输出为 0.001、0.0001、0.0001。那么在 optimizer.step() 期间实际的 lr 是什么?0.001 还是 0.0001?谢谢。

4

1 回答 1

0

重要的部分在这里:

for batch_idx, (input, target) in enumerate(train_loader):
    ...

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    print(optimizer.param_groups[0]['lr']) #### CURRENT LEARNING RATE

scheduler.step() #step through learning rate
print(scheduler.state_dict()['_last_lr']) #### NEW LEARNING RATE
print(optimizer.param_groups[0]['lr']) #### NEW LEARNING RATE

因为您在 epoch 之后执行调度程序,所以第一个 epoch 的初始值将设置为0.001. 如果您运行多个 epoch,那么它将继续被退火。

于 2021-03-26T03:44:30.203 回答