모델 학습이 잘 진행되는지 parameter norm과 gradient norm을 활용할 수 있다. (김기현님 강의를 보다가 알게 됨...)
일반적으로(?)
- parameter norm(L2)은 학습이 진행될 수록 커져야 한다.
- 모델이 복잡해 지면서...
- gradient norm(L2)는 점점 작아져야 한다.
- grad norm이 크다? 그 만큼 많이 배우고 있다는 뜻. 학습이 진행되면서 점점 작아진다.
- 학습 초반일 수록 틀리는 것이 많고, 많이 틀릴 수록 기울기가 가팔라짐.
@torch.no_grad()
def get_grad_norm(parameters, norm_type=2):
parameters = list(filter(lambda p: p.grad is not None, parameters))
total_norm = 0
try:
for p in parameters:
total_norm += (p.grad.data**norm_type).sum()
total_norm = total_norm ** (1. / norm_type)
except Exception as e:
print(e)
return total_norm
@torch.no_grad()
def get_parameter_norm(parameters, norm_type=2):
total_norm = 0
try:
for p in parameters:
total_norm += (p.data**norm_type).sum()
total_norm = total_norm ** (1. / norm_type)
except Exception as e:
print(e)
return total_norm
'DL&ML > code.data.tips' 카테고리의 다른 글
Kaggle Shopee 대회 top-solution 정리 (1) | 2021.05.13 |
---|---|
모델이 학습 이후에 모든 입력에 대해 동일한 출력을 내는 문제 (0) | 2021.05.03 |
Kaggle TSE 2020 대회 top-solution 정리 (0) | 2021.04.15 |
분류 문제 관련 torch loss (BCEWithLogitsLoss, CrossEntropyLoss, LogSoftmax, NLLLoss) (0) | 2021.04.14 |
torch amp mixed precision (autocast, GradScaler) (0) | 2021.04.13 |