본 글은 https://www.youtube.com/watch?v=ssf49Ppvh8c&list=PLSAJwo7mw8jn8iaXwT4MqLbZnS-LJwnBd&index=10
이 강의를 기반으로 작성되었습니다.
## 왜 코드에서 하이퍼 파라미터를 변수화 시키는게 중요한가?
하이퍼파라미터를 변수로 설정하지 않고 일반 숫자로 하드코딩 식으로 한다면 많은 실수들이 나올 수 있다.
예를 들어, weight initalization을 random하게 하는데 모르고 seed 값을 고정안했다고 가정하자.
그리고 모델의 하이퍼파라미터를 변경하면서 최적의 하이퍼 파라미터를 찾는다고 가정하자.
만약 이 상황에서 하이퍼파라미터를 변수가 아닌 숫자로 설정하였다면 깜빡하고 하이퍼파라미터를 변경하지 않고 실험을 진행할 수 있다. 또한, 시드값이 고정을 안하면 값이 계속 바뀌어서 하이퍼파라미터가 고정되어 있는 상태로 하이퍼파라미터가 변경된 상태로 실험을 하였는데 성능이 크게 차이 나지 않는구나라고 착각할 수 있다.
따라서 이러한 실수를 방지할 수 있게 변수로 설정해야한다.
또한, class로 모듈화를 시키면 재사용성이 뛰어나 다른 코드에서도 사용하기 용이하다.
그리고 변수 네이밍을 잘 했다면 어떤 변수가 어떻게 들어갔는지를 용이하게 파악할 수 있다.
## Hyperparameter vs parameter
- Hyperparameter : non-trainable = train 과정에 들어가지 않는 것
- parameter : trainable = train 과정에 들어가서 훈련이 되는 것
## Hyper paramter 예시
- 모델을 결정하는 하이퍼파라미터 : num_layer, attention 여부 등등..
- Optimizer 결정 하이퍼파라미터 : optimizer 종류 설정(Adam, SGD 등), learning rate
- Train/Evaluation process 하이퍼파라미터 : epoch 수, batch size
- device 설정 및 logging : cuda 설정, 저장 경로
## Argparser 문 이용하기
import argparse
parser = argparse.ArgumentParser()
args = parser.parse_args("")
args.num_layer = 5
print(args.num_layer) # 5
print(args) # Namespace(num_layer=5)
argparse문을 이용하면 다음과 같이 출력되는 것을 볼 수 있다.
이렇게 추가를 하면 변수가 새롭게 선언됨을 알 수 있다.
강의에는 없지만 보통 어느 경우에 사용하는지 예시를 보여준다.
보통 ubuntu나 terminal 창에서 옵션을 줄 때 사용한다.
import argparse
def tmp(opt):
weights = opt.weights
source = opt.source
return weights,source
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str,
default='yolov5/yolov5s.pt', help='model.pt path')
parser.add_argument('--source', type=str,
default='0', help='source')
print(tmp(opt))
이런 식으로 argument 를 줌으로써 option을 터미널창에서 직접 조절할 수 있도록 한다.
다음과 같은 파일 이름이 arg_tmp.py 라고 하자. 다음은 예시 실행 명령어 이다.
python arg_tmp.py --source tmp/test.mp4 --weights yolov5x.pt
이와 같이 활용할 수 있다.
'딥러닝 기초' 카테고리의 다른 글
Advanced Optimizer than SGD (0) | 2021.08.14 |
---|---|
Overfitting, Regularization (0) | 2021.08.01 |
MultiLayer Perceptron (0) | 2021.07.26 |
History of DeepLearning (0) | 2021.07.21 |
Binary/Multi Classification (0) | 2021.07.18 |
댓글