파이썬 머신러닝, 딥러닝 모델을 개발할 때, 호출 당시 인자값을 줘서 동작을 다르게 하고 싶은 경우가 있습니다.(하이퍼 파라미터 관리)
이때, 파이썬 내장함수인 argparse 모듈을 사용하여 원하는 기능을 개발할 수 있습니다.
사용법
먼저, 다음과 같은 python file 을 만든다.
import argparse
# 인자값을 받을 수 있는 인스턴스 생성
parser = argparse.ArgumentParser(description='Argparse Tutorial')
# 입력받을 인자값 설정 (default 값 설정가능)
parser.add_argument('--epoch', type=int, default=150)
parser.add_argument('--batch_size', type=int, default=128)
parser.add_argument('--lr_initial', type=float, default=0.1)
# args 에 위의 내용 저장
args = parser.parse_args()
# 입력받은 인자값 출력
print(args.epoch)
print(args.batch_size)
print(args.lr_initial)
이후, 터미널에서 파이썬 파일을 실행 시키면 아래와 같은 결과를 보여준다.
파이썬 파일 실행 방법은 python 파일이름.py 로 실행할 수 있다.
# python 파일을 터미널에서 실행 시킨다.
$ python argparse_example.py
150 # default epoch
128 # default batch size
0.1 # default learning rate
# 뒤쪽에 -h 또는 --help 를 붙이면 내용에 대해서 보여준다.
$ python argparse_example.py -h
usage: argparse_example.py [-h] [--epoch EPOCH] [--batch_size BATCH_SIZE]
[--lr_initial LR_INITIAL]
Argparse Tutorial
optional arguments:
-h, --help show this help message and exit
--epoch EPOCH
--batch_size BATCH_SIZE
--lr_initial LR_INITIAL
# 다음과 같이 명령시에 직접 값을 설정해 적용할 수 있다.
$ python argparse_example.py --epoch=256 --batch_size 64 --lr_initial 0.1111
256 # epoch
64 # batch_size
0.1111 # learning rate
일반적인 머신러닝에서 위의 모듈을 사용하는 방법은 다음과 같다.
- main.py : 모델 학습/평가가 수행되는 파이썬 코드 ( run in python)
- main.sh : main.py 에 특정한 하이퍼 파라미터를 부여하는 코드 ( run in shell )
# main.py
import argparse
# 인자값을 받을 수 있는 인스턴스 생성
parser = argparse.ArgumentParser(description='Argparse Tutorial')
# 입력받을 인자값 설정 (default 값 설정가능)
parser.add_argument('--epoch', type=int, default=150)
parser.add_argument('--batch_size', type=int, default=128)
parser.add_argument('--lr_initial', type=float, default=0.1)
# args 에 위의 내용 저장
args = parser.parse_args()
# 입력받은 인자값 출력
print(args.epoch)
print(args.batch_size)
print(args.lr_initial)
# main.sh
# 본인이 원하는대로 값을 설정해줄 수 있다.
python argparse_example.py # default value
python argparse_example.py --epoch=200 --batch_size=256 --lr_initial=0.3
python argparse_example.py --epoch=300 --batch_size=64 --lr_initial=0.03
python argparse_example.py --epoch=400 --batch_size=32 --lr_initial=0.003
위와 같은 .py .sh 파일을 만든 후 터미널에서 다음과 같이 sh 파일을 실행 시켜준다.
$ sh main.sh
# 결과
150 # default epoch
128 # default batch size
0.1 # default learning rate
200 # epoch
256 # batch size
0.3 # learning rate
300 # epoch
64 # batch size
0.03 # learning rate
400 # epoch
32 # batch size
0.003 # learning rate
ArgumentParser()
해당 객체에는 아래와 같이 입력받고 있습니다.
- prog: 프로그램의 이름 (기본값: sys.argv[0])
- 기본값으로 실행한 스크립트파일명을 노출. 작성 시 스크립트 파일 대신 입력한 값이 노출
- usage: 프로그램 사용법을 설명하는 문자열 (기본값: 파서에 추가된 인자로부터 만들어지는 값)
- 사용방법을 노출. 기본값으로 실행한 파일 + 입력한 인자값들을 노출
- description: 인자 도움말 전에 표시할 텍스트 (기본값: none)
- 스크립트에 -h 옵션을 주어 실행 시, usage 아래에 노출
- epilog: 인자 도움말 후에 표시할 텍스트 (기본값: none)
- parents: ArgumentParser 객체들의 리스트이고, 이 들의 인자들도 포함
- formatter_class: 도움말 출력을 사용자 정의하기 위한 클래스
- prefix_chars: 선택 인자 앞에 붙는 문자 집합 (기본값: '-').
- fromfile_prefix_chars: 추가 인자를 읽어야 하는 파일 앞에 붙는 문자 집합 (기본값: None).
- argument_default: 인자의 전역 기본값 (기본값: None)
- conflict_handler: 충돌하는 선택 사항을 해결하기 위한 전략 (일반적으로 불필요함)
- add_help: 파서에 -h/--help 옵션을 추가 (기본값: True)
- allow_abbrev: 약어가 모호하지 않으면 긴 옵션을 축약할 수 있도록 함. (기본값: True)
add_argument()
해당 메서드는 아래와 같이 입력받고 있습니다.
- name or flags: 옵션 문자열의 이름이나 리스트, 예를 들어 foo 또는 -f, --foo.
- action: 명령행에서 이 인자가 발견될 때 수행 할 액션의 기본형.
- nargs: 소비되어야 하는 명령행 인자의 수.
- const: 일부 action 및 nargs 를 선택할 때 필요한 상숫값.
- default: 인자가 명령행에 없는 경우 생성되는 값.
- type: 명령행 인자가 변환되어야 할 형.
- choices: 인자로 허용되는 값의 컨테이너.
- required: 명령행 옵션을 생략 할 수 있는지 아닌지 (선택적일 때만).
- help: 인자가 하는 일에 대한 간단한 설명.
- metavar: 사용 메시지에 사용되는 인자의 이름.
- dest: parse_args() 가 반환하는 객체에 추가될 어트리뷰트의 이름.
'Python' 카테고리의 다른 글
[python] from glob import glob (0) | 2022.08.31 |
---|---|
[python] 함수 파라미터 args, kwarg (0) | 2022.08.26 |
[python] iterator => iter(), next() 함수 (0) | 2022.08.26 |
[네이버부스트코스] 모듈, 패키지, 프로젝트 (0) | 2022.07.23 |
[네이버부스트코스] Numpy Numerical Python (0) | 2022.07.21 |