본문 바로가기
딥러닝 기초

코드에서 파라미터 최적화

by winston1214 2021. 7. 28.
반응형

본 글은 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 여부 등등..

model determine parameter

 - Optimizer 결정 하이퍼파라미터 : optimizer 종류 설정(Adam, SGD 등), learning rate

optimizer hyperparameter

- Train/Evaluation process 하이퍼파라미터 : epoch 수, batch size

train/evaluation

- device 설정 및 logging : cuda 설정, 저장 경로

cuda, logging

 

## 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

댓글