파이썬 머신러닝, 딥러닝 모델을 개발할 때, 호출 당시 인자값을 줘서 동작을 다르게 하고 싶은 경우가 있습니다.(하이퍼 파라미터 관리)

이때, 파이썬 내장함수인 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() 가 반환하는 객체에 추가될 어트리뷰트의 이름.

+ Recent posts