In [5]:
from IPython.core.display import display, HTML
display(HTML("<style>.container { width:140% !important; }</style>"))
Python argparse Part1)¶
usuage of argparse python module
- Attempt1. Handling argparse module on jupyter notebook
- Attempt2. Updating parse argument from config.json
- Goal. Handling model parameters using both "argparse" and "config.json"
Attempt 1. Handling argparse module on jupyter notebook¶
In [1]:
import argparse
import json
import os
from pprint import pprint
In [2]:
# Instantiate Parser
parser = argparse.ArgumentParser()
In [3]:
# Adding Parser Arguments
parser.add_argument('--seed', type=int, default=42, help='random seed (default: 42)')
parser.add_argument('--epochs', type=int, default=1, help='number of epochs to train (default: 1)')
parser.add_argument('--dataset', type=str, default='MaskBaseDataset', help='dataset augmentation type (default: MaskBaseDataset)')
parser.add_argument('--augmentation', type=str, default='BaseAugmentation', help='data augmentation type (default: BaseAugmentation)')
parser.add_argument("--resize", nargs="+", type=int,default=[128, 96], help='resize size for image when training')
parser.add_argument('--batch_size', type=int, default=64, help='input batch size for training (default: 64)')
parser.add_argument('--valid_batch_size', type=int, default=1000, help='input batch size for validing (default: 1000)')
parser.add_argument('--model', type=str, default='BaseModel', help='model type (default: BaseModel)')
parser.add_argument('--optimizer', type=str, default='SGD', help='optimizer type (default: SGD)')
parser.add_argument('--lr', type=float, default=1e-3, help='learning rate (default: 1e-3)')
parser.add_argument('--val_ratio', type=float, default=0.2, help='ratio for validaton (default: 0.2)')
parser.add_argument('--criterion', type=str, default='cross_entropy', help='criterion type (default: cross_entropy)')
parser.add_argument('--lr_decay_step', type=int, default=20, help='learning rate scheduler deacy step (default: 20)')
parser.add_argument('--log_interval', type=int, default=20, help='how many batches to wait before logging training status')
parser.add_argument('--name', default='exp', help='model save at {SM_MODEL_DIR}/{name}')
parser.add_argument('--config', type=str, default = './model_config_basic.json')
parser.add_argument('--data_dir', type=str, default='/opt/ml/input/data/train/images')
parser.add_argument('--model_dir', type=str, default='./model')
Out[3]:
In [4]:
args = parser.parse_args()
Jupyter Case¶
Insert
[]
or""
as an argument to parser.parse_args()
args = parser.parse_args("")
args = parser.parse_args([])
In [4]:
args = parser.parse_args("")
pprint(vars(args))
Attempt 2. Updating parse argument from config.json¶
model_config_basic.json¶
{
"seed": 42,
"epochs": 50,
"dataset": "MaskSplitByProfileDataset",
"augmentation": "BasicAugmentation2",
"resize": [224,224],
"batch_size": 64,
"valid_batch_size": 128,
"model": "EfficientNet",
"optimizer": "Adam",
"lr": 1e-4,
"criterion": "cross_entropy",
"name": "exp",
"lr_decay_step": 20,
"log_interval": 20,
"data_dir": "/opt/ml/input/data/train/images",
"model_dir": "./model"
}
In [ ]:
# reading model_config_basic.json file
def read_json(file):
with open(file) as json_file:
data = json.load(json_file)
return data
config = read_json(args.config)
pprint(config)
In [ ]:
# updating args object with config
def update_argument(args, configs):
for arg in configs:
if arg in args:
setattr(args, arg, configs[arg])
else:
raise ValueError(f"no argument {arg}")
return args
args = update_argument(args, config)
pprint(vars(args))
Conclusion¶
- We can now using parser arguments and modifying model parameters using config.json file
Need more attention¶
argparse versus config.json
- Here config.json precedes over parser argument, meaning config value having same key with parser overwrites default value
However making config.json as a default value and overwriting default value from the command line using argparse is more common practice!
How can we acheive that? -> check out
argparse Part2)
'programming > python' 카테고리의 다른 글
Python GIL (0) | 2022.08.04 |
---|---|
Python - argparse module part2) (2) | 2022.03.15 |
댓글