Programming

[Argparse] 라이브러리

VL_HD 2020. 3. 1. 17:44

머신러닝, 딥러닝에서 가장 자주 사용 되는 라이브러리 중 하나인 Argparse 라이브러리에 대해 알아보록 하자. 

아래의 그림은 딥러닝에 적용된 예시 코드이다. 

아직 정확히 어떻게 작동 되는 것인지는 모르겠지만, parser.add_argument() 에서 lr(learning rate)를 설정하고 다음 줄에서 resume(저장 된 값들을 불러와 재 시작)하는 코드임을 짐작 할 수 있다. 이 코드들은 매우 유용한데, 만약 learning rate의 시작 값을 0.09로 바꿔 실행 하고 싶을때 코드 자체를 수정하는 것이 아닌, terminal 에서 실행 시 learning rate를 바꾸어 입력만 해주면 되기 때문이다. 

 

먼저 import 부터 살펴 보겠다. 

import 는 argparse라는 라이브러리를 불러오면 된다. 

 

주의 사항으로 Argparse 라이브러리는 기본적으로 Terminal에서 실행하는 것을 원칙으로 한다. jupyter note book이나 다른 환경에서는 정상적으로 실행이 되지 않을 가능성이 매우 높다. 

 

1. 인자 값을 받을 수 있는 인스턴스 생성 및 입력 받을 인자 값 등록. 

'입력을 받는다'라는 것은 terminal 환경에서 실행 시 파일 명과 같이 입력을 해주어야 하는 값이다. 

위의 코드를 보면 먼저, required = 옵션이 있다. 말 그대로 없으면 안된다는 말인데, terminal에서 실행 시 입력을 해주지 않으면 코드가 실행 되지 않는다. 

다음 옵션으로는 default = 옵션이다. 이 옵션은 required 옵션에 관계없이 입력을 해주어도 되고, 안해주어도 된다. 입력을 한다면 입력된 값으로 실행이 될 것이고, 입력을 하지 않는다면 default로 지정된 값으로 실행이 된다. 

 

아래 그림은 실행코드와 terminal 창에서의 결과이다.

 

2. Data type 지정. 

기본적으로 parse_args()가 주어진 인자들을 string type으로 받아들인다. (python의 input이 받아들이는 것처럼) 따라서 Data type을 지정하고 싶다면 add_argument()에서 type = 옵션을 통해 지정을 해 줄 수 있다. 

 

common built-in type과 function이 data type으로 가능한데, str, int, float, bool, open등 이 사용 가능하다. 

list 자료형을 사용 불가능 하다. 하지만 후에 나오는 기능인 action = append를 이용하여 사용가능하다. 

 

 

3. Positional / optional 인자 설정.

positional, optional 인자는 역시 이름 그대로 optional은 terminal 환경에서 실행 시 쓰지 않아도 무방한 값, positional 인자는 지정을 해주어야만 하는 값인 것을 알 수 있다. 

이를 판단하는 방법은 간단하다. 인자의 이름 앞에 - 가 붙어있다면 optional, 그렇지 않으면 positional 인자로 필수로 값을 입력해주어야 한다. 

 

현재 Optional 인자를 SGD로 정하였고, positional 인자를 learning_rate라고 사용하였다. 

terminal 창에서 실행 한 --SGD = 는 작성하여도 되고 작성하지 않아도 된다. 작성하지 않는다고 코드가 실행 안되는건 아니지만, None 이라는 값을 가지게 된다. 

positional 인자인 learning_rate 값은 단순히 0.1 혹은 -- 없이 learning_rate = 0.1 이라고 입력하면 실행이 된다. 

 

4. Action의 종류 지정

 

action의 종류에는 다음과 같은 것들이 있다. 기본값은 store이다. 

 

  • store : action을 지정하지않으면 stroe가 된다. 인자 이름 바로 뒤의 값을 해당인자에 대입(저장) 한다. 
  • store_const : add_argment()에서 미리 지정되어 있는 const= 에 해당하는 값이 저장된다. const= 는 반드시 써주어야 한다. 
  • append : 값을 하나가 아닌 여러개를 저장하고 싶을 때 쓴다. 인자를 여러번 호출하면 같이 주는 값이 계속 append 된다. 
  • append_const : append 와 비슷하지만 가전에 지정한 const값이 저장된다. 
  • count : 인자를 적은 횟수 만큼 값이 올라간다. 보통 verbose 옵션에 많이 사용한다. 
  • help : 도움말 메시지를 출력하게 하고 종료하여 코드는 실행시키지 않는다. --help의 역할을 대신한다.
  • version : version 인자에 사용가능하다. 버전 정보를 출력하고 종료한다. 

몇가지 예시를 직접 보자. 

먼저 action = 'store_const' 이다. 

인자를 적지 않으면 default 값인 None이 저장된다.

 

다음으로는 default이다. 

--target으로 지정을 해준다면 const값인 10으로 설정이 되고, --target을 설정하지 않는다면 None 값 대신 default 값으로 설정해 놓은 5가 출력 되게 된다. 

 

다음 예제는 append인데, 입력으로 받은 값을 list로 변환한다.

아래의 실행 예제에서도 알 수 있듯이 입력시 --target = 입력값 혹은 --target 입력값 으로 실행 가능하다. 

 

 

'Programming' 카테고리의 다른 글

[re] 라이브러리  (0) 2020.03.21
Neural Network의 기초 - 2 with Pytorch  (0) 2020.02.21
Neural Network의 기초 with Pytorch  (0) 2020.02.21