728x90
이런 코드를받으면 어떻게 해야할까?
import os
import argparse
def parse_args(mode='train'):
parser = argparse.ArgumentParser()
parser.add_argument('--seed', default=42, type=int, help='seed')
parser.add_argument('--device', default='cpu', type=str, help='cpu or gpu')
parser.add_argument('--data_dir', default='/opt/ml/input/data/train_dataset', type=str, help='data directory')
parser.add_argument('--asset_dir', default='asset/', type=str, help='data directory')
parser.add_argument('--file_name', default='train_data.csv', type=str, help='train file name')
parser.add_argument('--model_dir', default='models/', type=str, help='model directory')
parser.add_argument('--model_name', default='model.pt', type=str, help='model file name')
parser.add_argument('--output_dir', default='output/', type=str, help='output directory')
parser.add_argument('--test_file_name', default='test_data.csv', type=str, help='test file name')
parser.add_argument('--max_seq_len', default=20, type=int, help='max sequence length')
parser.add_argument('--num_workers', default=1, type=int, help='number of workers')
# 모델
parser.add_argument('--hidden_dim', default=64, type=int, help='hidden dimension size')
parser.add_argument('--n_layers', default=2, type=int, help='number of layers')
parser.add_argument('--n_heads', default=2, type=int, help='number of heads')
parser.add_argument('--drop_out', default=0.2, type=float, help='drop out rate')
# 훈련
parser.add_argument('--n_epochs', default=20, type=int, help='number of epochs')
parser.add_argument('--batch_size', default=64, type=int, help='batch size')
parser.add_argument('--lr', default=0.0001, type=float, help='learning rate')
parser.add_argument('--clip_grad', default=10, type=int, help='clip grad')
parser.add_argument('--patience', default=5, type=int, help='for early stopping')
parser.add_argument('--log_steps', default=50, type=int, help='print log per n steps')
### 중요 ###
parser.add_argument('--model', default='lstm', type=str, help='model type')
parser.add_argument('--optimizer', default='adam', type=str, help='optimizer type')
parser.add_argument('--scheduler', default='plateau', type=str, help='scheduler type')
args = parser.parse_args()
return args
Import
import argparse
argparse
python train.py --epochs 50 --batch-size 64 --save-dir weights
Machine Learning을 포함해서, 위와 같은 실행 옵션은 많은 코드에서 볼 수 있었을 것이다. 학습 과정을 포함하여 대부분은 명령창 또는 콘솔에서 python 파일명 옵션들...으로 실행시키기 때문에, argparse에 대한 이해는 필요하다.
중요:
- 기본적으로 argparse 라이브러리는 명령창(터미널)에서 실행하는 것을 원칙으로 한다. Jupyter notebook이나 (iPython) 대화형 실행 framework에서는 제대로 실행되지 않을 수 있다. 또한 이러한 대화형 framework에서는 코드 상에서 명시적으로 집어 넣는 게 아닌 이상 인자에 값을 바로 줄 수도 없다.
- 그래도 쓰고 싶다면 args = parser.parse_args()를 args = parser.parse_args(args=[])로 바꾸고 사용할 수는 있다…하지만 위의 이유로 인해 별 의미는 없을 듯하다.
이 글에서 위의 명령 중 --epochs와 같은 것을 인자, 50과 같은 것을 (같이 준) 값이라고 하자
argparse를 쓰려면 기본적으로 다음 코드가 필요하다.
import argparse
parser = argparse.ArgumentParser(description='Argparse Tutorial')
# argument는 원하는 만큼 추가한다.
parser.add_argument('--print-number', type=int,
help='an integer for printing repeatably')
args = parser.parse_args()
for i in range(args.print_number):
print('print number {}'.format(i+1))
- 일단 ArgumentParser에 원하는 description을 입력하여 parser 객체를 생성한다. description 외에도 usage, default value 등을 지정할 수 있다.
- 그리고 add_argument() method를 통해 원하는 만큼 인자 종류를 추가한다.
- parse_args() method로 명령창에서 주어진 인자를 파싱한다.
- args라는 이름으로 파싱을 성공했다면 args.parameter 형태로 주어진 인자 값을 받아 사용할 수 있다.
실행 결과
> python argparseTest.py -h
usage: argparseTest.py [-h] [--print-number PRINT_NUMBER]
Argparse Tutorial
optional arguments:
-h, --help show this help message and exit
--print-number PRINT_NUMBER
an integer for printing repeatably
> python argparseTest.py --print-number 5
print number 1
print number 2
print number 3
print number 4
print number 5
argparse의 인자는 지정할 수 있는 종류가 상당히 많다.
reference
https://greeksharifa.github.io/references/2019/02/12/argparse-usage/
728x90
'python > 라이브러리' 카테고리의 다른 글
[Deep learning] 정형데이터를 위한 딥러닝 신경망 TabNet (0) | 2023.02.27 |
---|---|
[Jupyter notebook] vscode 안에서 ipynb에서 html로 바꾸기 (0) | 2023.02.06 |
[Tensorflow] InternalError: Blas xGEMM launch failed : a.shape=[1,15,1024], b.shape=[1,1024,1024], m=15, n=1024, k=1024 [Op:MatMul] 오류 (1) | 2023.01.25 |
[Flask] 플라스크 웹 배포 (0) | 2022.11.18 |
[Python] import aspose.words 텍스트 파일을 PDF 파일로 변환하기 (0) | 2022.11.16 |