咨询电话: 020-88888888
PyTorch 优化器!
发布于 2024-05-06 05:49 阅读()
- 优化的对象:优化参数
- 优化的方法:优化算法
pytorch 中 torch.optim
包中给出了许多优化算法的实现,我们只需调用相应的 API 就能完成模型优化。我们现在人工智能学习优化往往是基于梯度来进行模型优化的,不断的调整参数获取最优解,每次调整的幅度称之为步长或学习率。在 pytorch 中还提供了许多学习率更新的方法。
构造一个优化器对象,维护当前状态,并基于梯度进行参数更新。
- 给出优化参数:具体有哪些参数需要优化
- 学习率:优化时的步长
- 算法相关参数
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
optimizer = optim.Adam([var1, var2], lr=0.0001)
可以分层制定学习率
optim.SGD([
{'params': model.base.parameters()},
{'params': model.classifier.parameters(), 'lr': 1e-3}
], lr=1e-2, momentum=0.9)
# base 学习率为 1e-2
# classifier 学习率为 1e-3
更多优化算法可查阅官网 优化算法
利用模型反向传播得到的梯度进行模型优化。pytorch 提供了两种方法
optimizer.step()
方法
for input, target in dataset:
optimizer.zero_grad()
output = model(input)
loss = loss_fn(output, target)
loss.backward()
optimizer.step()
optimizer.step(closure)
方法
一些需要多次计算梯度的算法采用这种方法实现模型优化。
for input, target in dataset:
def closure():
optimizer.zero_grad()
output = model(input)
loss = loss_fn(output, target)
loss.backward()
return loss
optimizer.step(closure)
3. 根据 epoch 调整学习率
torch.optim.lr_scheduler
- StepLR
torch.optim.lr_scheduler.StepLR(*optimizer*, *step_size*, *gamma=0.1*, *last_epoch=- 1*, *verbose=False*)
给定的优化器对象中有需要更新的参数组和对应的学习率,每 step_size
个 epochs
学习率乘gamma
。
python
# Assuming optimizer uses lr=0.05 for all groups
# lr=0.05 if epoch < 30
# lr=0.005 if 30 <=epoch < 60
# lr=0.0005 if 60 <=epoch < 90
# ...
scheduler = StepLR(optimizer, step_size=30, gamma=0.1)
for epoch in range(100):
train(...)
validate(...)
scheduler.step() # 执行此步完成学习率更新
- ExponentialLR
torch.optim.lr_scheduler.ExponentialLR(*optimizer*, *gamma*, *last_epoch=- 1*, *verbose=False*)
每个epoch都进行学习率更新
更多更新策略可查阅官网 如何调整学习率
新闻资讯
-
强化业绩补偿监管,支持环保企业 05-15
-
利率大幅单边上行可能性不大 05-15
-
商标注册的八大作用 05-11
-
emo升学考|国内考研还是出国 10-14
-
公司领导推荐信(15篇) 10-14
-
2024广东财经大学统计学考研 10-14
-
中国成法国第二大留学生来源国 10-14
-
美术生出国留学费用详情 10-14