PyTorch - 학습 중 학습률 얻는 방법
optimizer.param_groups[0]['lr'] 사용:
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
for epoch in range(10):
# ...
# 학습률 얻기
learning_rate = optimizer.param_groups[0]['lr']
# ...
optimizer.param_groups
는 옵티마이저가 사용하는 모든 매개변수 그룹의 목록입니다. 각 그룹에는 lr
키가 있는 딕셔너리가 포함되어 있으며, 이는 해당 그룹의 현재 학습률을 나타냅니다.
lr_scheduler.get_lr() 사용:
lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=10)
for epoch in range(10):
# ...
# 학습률 얻기
learning_rate = lr_scheduler.get_lr()
# ...
lr_scheduler
는 학습률을 조정하는 데 사용됩니다. get_lr()
메서드는 현재 학습률을 반환합니다.
LambdaLR 콜백 사용:
def lr_lambda(epoch):
return 0.95 ** epoch
lr_scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda)
for epoch in range(10):
# ...
# 학습률 얻기
learning_rate = lr_scheduler.get_lr()
# ...
LambdaLR
콜백을 사용하여 학습률을 조정할 수 있습니다. lr_lambda
함수는 에포크 번호를 입력으로 받아 학습률을 반환합니다.
사용자 정의 콜백 사용:
class MyCallback(object):
def __init__(self, optimizer):
self.optimizer = optimizer
def on_epoch_end(self, epoch):
# 학습률 얻기
learning_rate = self.optimizer.param_groups[0]['lr']
# ...
callback = MyCallback(optimizer)
for epoch in range(10):
# ...
# 콜백 호출
trainer.on_epoch_end(epoch)
# ...
사용자 정의 콜백을 사용하여 학습 중에 원하는 작업을 수행할 수 있습니다. on_epoch_end
메서드는 각 에포크가 끝날 때 호출되며, 이 메서드에서 학습률을 얻을 수 있습니다.
추가 정보
한국어 번역
예제 코드
import torch
# 모델 정의
model = torch.nn.Linear(10, 1)
# 옵티마이저 정의
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# 학습률 스케줄러 정의
lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=10)
# 훈련 루프
for epoch in range(10):
# ...
# 학습률 얻기
# 방법 1: optimizer.param_groups[0]['lr'] 사용
learning_rate_1 = optimizer.param_groups[0]['lr']
# 방법 2: lr_scheduler.get_lr() 사용
learning_rate_2 = lr_scheduler.get_lr()
# ...
# 훈련 코드
# ...
# 결과 출력
print(f"학습률 1: {learning_rate_1}")
print(f"학습률 2: {learning_rate_2}")
이 코드는 다음과 같은 결과를 출력합니다.
학습률 1: 0.01
학습률 2: 0.01
다른 방법
위 코드 외에도 학습 중 학습률을 얻는 다른 방법들이 있습니다. 예를 들어, 다음과 같은 방법을 사용할 수 있습니다.
torch.optim.lr_scheduler.ReduceLROnPlateau
콜백 사용torch.optim.lr_scheduler.CosineAnnealingLR
콜백 사용- 사용자 정의 옵티마이저 사용
한국어 번역
PyTorch에서 학습 중 학습률을 얻는 대체 방법
ReduceLROnPlateau
콜백은 검증 손실이 일정 기간 동안 감소하지 않으면 학습률을 감소시킵니다.
# ReduceLROnPlateau 콜백 정의
lr_scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, patience=5)
# 훈련 루프
for epoch in range(10):
# ...
# 학습률 얻기
learning_rate = lr_scheduler.get_lr()
# ...
# 훈련 코드
# ...
# ReduceLROnPlateau 콜백 업데이트
lr_scheduler.step(val_loss)
CosineAnnealingLR
콜백은 코사인 함수를 사용하여 학습률을 조정합니다.
# CosineAnnealingLR 콜백 정의
lr_scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=10)
# 훈련 루프
for epoch in range(10):
# ...
# 학습률 얻기
learning_rate = lr_scheduler.get_lr()
# ...
# 훈련 코드
# ...
# CosineAnnealingLR 콜백 업데이트
lr_scheduler.step()
사용자 정의 옵티마이저를 사용하여 학습률을 조정할 수 있습니다.
class MyOptimizer(torch.optim.Optimizer):
def __init__(self, params, lr):
super().__init__(params, lr)
def step(self):
# ...
# 학습률 얻기
learning_rate = self.param_groups[0]['lr']
# ...
# 옵티마이저 업데이트 코드
# ...
# 사용자 정의 옵티마이저 사용
optimizer = MyOptimizer(model.parameters(), lr=0.01)
# 훈련 루프
for epoch in range(10):
# ...
# 학습률 얻기
learning_rate = optimizer.param_groups[0]['lr']
# ...
# 훈련 코드
# ...
# 옵티마이저 업데이트
optimizer.step()
한국어 번역
python machine-learning deep-learning