728x90
모델을 학습하기 전에 필요한 파라미터들을 정의한다. 사전에 정의할 파라미터는 다음과 같다.
- 손실 함수 : 학습하는 동안 출력과 실제 값 사이의 오차를 측정한다. 손실 함수로 많이 사용되는 것은 다음과 같다.
- BCELoss : 이진 분류를 위해 사용
- CrossEntropyloss : 다중 클래스 분류를 위해 사용
- MSELoss : 회귀 모델에서 사용
- 옵티마이저 : 데이터와 손실 함수를 바탕으로 모델의 업데이트 방법을 결정한다. 다음은 옵티마이저의 주요 특성이다.
- optimizer는 step() 메서드를 통해 전달받은 파라미터를 업데이트한다.
- 모델의 파라미터별로 다른 기준을 적용시킬 수 있다.
- torch.optim.Optimizer (params, defaults)는 모든 옵티마이저의 기본이 되는 클래스이다.
- zero_grad() 메서드는 옵티마이저에 사용된 파라미터들의 기울기를 0으로 만든다.
- torch.optim.lr_scheduler는 에포크에 따라 학습률을 조절할 수 있다.
- 학습률 스케줄러 : 미리 지정한 횟수의 에포크를 지날 때마다 학습률을 감소시켜 준다. 학습률 스케줄러를 이용하면 학습 초기에는 빠른 학습을 진행하다가 전역 최소점ㅇ 근처에 다다르면 학습률을 줄여서 최적점을 찾아갈 수 있도록 해준다. 학습률 스케줄러의 종류는 다음과 같다.
- optim.lr_scheduler.StepLR : 람다 함수를 이용하여 그 함수의 결과를 학습률로 설정한다.
- optim.lr_scheduler.MultiStepLR : StepLR과 비슷하지만 특정 단계가 아닌 지정된 에포크에만 감마 바율로 감소시킨다.
- optim.lr_scheduler.ExponentialLR : 에포크마다 이전 학습률에 감마만큼 곱한다.
- optim.lr_scheduler.CosineAnnealingLR : 학습률을 코사인함수의 형태처럼 변화시킨다. 따라서 학습률이 커지기도 작아지기도 한다.
- optim.lr_scheduler.ReduceLROnPlateau : 학습이 잘되고 있는지 아닌지에 따라 동적으로 학습률을 변화시킬 수 있다.
다음은 모델의 파라미터를 정의하는 예시 코드이다.
from torch.optim import optimizer
criterion = torch.nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer=optimizer,
lr_lambda=lambda eopch: 0.95 ** epoch)
for eopch in range(1, 100+1): # 에포크 수만큼 데이터를 반복하여 처리
for x, y in dataloader: # 배치 크기만큼 데이터를 가져와서 학습 진행
optimizer.zero_grad()
loss_fn(model(x), y).backward()
optimizer.step()
scheduler.step()
728x90
'딥러닝 > Pytorch' 카테고리의 다른 글
Pytorch 기본 문법 - 모델 평가 (0) | 2022.05.25 |
---|---|
Pytorch 기본 문법 - 모델 훈련 (0) | 2022.05.23 |
Pytorch 기본 문법 - 모델 정의 (0) | 2022.05.23 |
Pytorch 기본 문법 - 데이터 준비 (1) | 2022.05.18 |
Pytorch 기본 문법 - 텐서 (0) | 2022.05.18 |