python-3.x - Pytorch1.6 训练时的实际学习率是多少?
问题描述
我想知道训练期间的实际学习率,这是我的代码。
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?谢谢。
解决方案
重要的部分在这里:
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,那么它将继续被退火。
推荐阅读
- c# - 使用 asp.net web api 2 将媒体上传到 azure blob 存储
- python - 使用 Flask-SQLAlchemy 和 pyodbc 连接到 Flask 中的 MSSQL
- xslt - XPath 查询以获取子节点,具体取决于节点名称是否以数字开头
- java - 如何在节点 Firebase 中获得唯一的随机产品?
- html - 使用 :after 属性后无法为按钮设置动画
- angular6 - Angular 6 我可以订阅吗
- c# - 两个不同的 EF dbContexts 不在同一个单元测试中工作
- c# - 如何对传递到存储库层的表达式进行单元测试
- python - 如何使用 PySNMP 获取 SNMP 表
- rest - 调用 OneDrive for Business REST API 上传图片文件的问题