ReduceLROnPlateau는 더이상 학습이 진행되지 않을 때 learning rate를 감소시키는 scheduler이다.
scheduler에 input으로 metric을 주면, 일정 epoch 동안 변화가 없을 때 learning rate를 감소시킨다.
주요 Parameter은 다음과 같다.
- mode: [min, max] 중 하나. Input으로 주는 metric이 낮을수록 좋은지, 높을수록 좋은지를 의미한다. 'min' option을 주면, metric의 감소가 멈출 때마다 learning rate를 감소시킨다.
- factor: Learning rate를 감소시키는 비율. new_lr = lr * factor이 된다.
- patience: Metric이 얼마 동안 변화가 없을 때 learning rate를 감소시킬지 결정한다. 만약 patient=2라면, metric이 2 epoch 동안 변화가 없으면 learning rate를 감소시킨다.
- threshold: Metric이 '변화가 없다'라고 판단하는 threshold. Metric의 변화가 threshold 이하일 시 변화가 없다라고 판단한다.
- cooldown: 처음 몇 epoch 동안은 변화가 없어도 learning rate를 감소시키지 않는다. 몇 epoch만큼을 기다릴지를 지정한다.
- eps: Learning rate 감소의 최소치를 지정한다. new_lr과 old_lr의 차이가 eps 이하이면 더이상 learning rate를 감소시키지 않는다.
import torch.optim as optim
epochs = 300
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.5, patience=5, threshold=1e-3)
for epoch in range(epochs):
train(...)
val_loss = validate(...)
scheduler.step(val_loss) #scheduler.step에 input으로 metric을 넣어주어야 한다.
위 예시처럼 설정하면, val_loss가 epoch 5동안 1e-3 이하로 감소하면 learning rate를 절반으로 감소시킨다.
*ReduceLROnPlateau는 get_lr() method가 정의되어 있지 않기 때문에 이를 통해 learning rate를 기록할 수 없다.
대신 optimizer.param_groups[0]['lr']을 이용해 learning rate를 받아올 수 있다. (참고)
반응형
'🐍 Python & library > PyTorch' 카테고리의 다른 글
[PyTorch/Tensorflow v1, v2] Gradient Clipping 추가하기 (0) | 2022.01.12 |
---|---|
[PyTorch] Scheduler 시각화하기 (Visualize scheduler) (2) | 2021.11.24 |
[PyTorch] CosineAnnealingLR, CosineAnnealingWarmRestarts (0) | 2021.10.14 |
[PyTorch] nn.ModuleList 기능과 사용 이유 (1) | 2021.08.04 |
[PyTorch] Livelossplot 사용예제 (0) | 2021.04.03 |