学習率を設定して、いくつかのエポックをトレーニングした後、精度を上げることができないとわかったとき
optimizer = optim.Adam(model.parameters(), lr = 1e-4)
n_epochs = 10
for i in range(n_epochs):
// some training here
ステップ減衰を使用する場合:5エポックごとに学習率を10分の1に減らします。どうすればよいですか?
ありがとう
Lr shedular torch.optim.lr_scheduler.StepLR
を使用できます
import torch.optim.lr_scheduler.StepLR
scheduler = StepLR(optimizer, step_size=5, gamma=0.1)
各パラメータグループの学習率をgamma
every step_size
epochs こちらのドキュメントを参照 ドキュメントの例で減衰します
# 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()
例:
import torch
import torch.optim as optim
optimizer = optim.SGD([torch.Rand((2,2), requires_grad=True)], lr=0.1)
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=5, gamma=0.1)
for Epoch in range(1, 21):
scheduler.step()
print('Epoch-{0} lr: {1}'.format(Epoch, optimizer.param_groups[0]['lr']))
if Epoch % 5 == 0:print()
Epoch-1 lr: 0.1
Epoch-2 lr: 0.1
Epoch-3 lr: 0.1
Epoch-4 lr: 0.1
Epoch-5 lr: 0.1
Epoch-6 lr: 0.010000000000000002
Epoch-7 lr: 0.010000000000000002
Epoch-8 lr: 0.010000000000000002
Epoch-9 lr: 0.010000000000000002
Epoch-10 lr: 0.010000000000000002
Epoch-11 lr: 0.0010000000000000002
Epoch-12 lr: 0.0010000000000000002
Epoch-13 lr: 0.0010000000000000002
Epoch-14 lr: 0.0010000000000000002
Epoch-15 lr: 0.0010000000000000002
Epoch-16 lr: 0.00010000000000000003
Epoch-17 lr: 0.00010000000000000003
Epoch-18 lr: 0.00010000000000000003
Epoch-19 lr: 0.00010000000000000003
Epoch-20 lr: 0.00010000000000000003
詳細 How to adjust Learning Rate
-torch.optim.lr_scheduler
は、エポックの数に基づいて学習率を調整するいくつかの方法を提供します。