csun22's picture
Upload 59 files
ca1888b verified
#!/usr/bin/env python
"""
config_parse
Argument parse
"""
from __future__ import absolute_import
import os
import sys
import argparse
import core_scripts.other_tools.list_tools as nii_list_tools
import core_scripts.other_tools.display as nii_display
__author__ = "Xin Wang"
__email__ = "wangxin@nii.ac.jp"
__copyright__ = "Copyright 2020, Xin Wang"
#############################################################
# argparser
#
def f_args_parsed(argument_input = None):
""" Arg_parse
"""
parser = argparse.ArgumentParser(
description='General argument parse')
######
# lib
mes = 'module of model definition (default model, model.py will be loaded)'
parser.add_argument('--module-model', type=str, default="model", help=mes)
mes = 'module of configuration (default config, config.py will be loaded)'
parser.add_argument('--module-config', type=str, default="config",
help=mes)
######
# Training settings
mes = 'batch size for training/inference (default: 1)'
parser.add_argument('--batch-size', type=int, default=1, help=mes)
mes = 'number of epochs to train (default: 50)'
parser.add_argument('--epochs', type=int, default=50, help=mes)
mes = 'number of no-best epochs for early stopping (default: 5)'
parser.add_argument('--no-best-epochs', type=int, default=5, help=mes)
mes = 'sampler (default: None). Default sampler is random shuffler'
mes += 'default'
parser.add_argument('--sampler', type=str, default='None', help=mes)
parser.add_argument('--lr', type=float, default=0.0001,
help='learning rate (default: 0.0001)')
mes = 'learning rate decaying factor, using '
mes += 'torch.optim.lr_scheduler.ReduceLROnPlateau(patience=no-best-epochs,'
mes += ' factor=lr-decay-factor). By default, no decaying is used.'
mes += ' Training stopped after --no-best-epochs.'
parser.add_argument('--lr-decay-factor', type=float, default=-1.0, help=mes)
mes = 'L2 penalty on weight (default: not use). '
mes += 'It corresponds to the weight_decay option in Adam'
parser.add_argument('--l2-penalty', type=float, default=-1.0, help=mes)
mes = 'gradient norm (torch.nn.utils.clip_grad_norm_ of Pytorch)'
mes += 'default (-1, not use)'
parser.add_argument('--grad-clip-norm', type=float, default=-1.0,
help=mes)
mes = 'lr scheduler: 0: ReduceLROnPlateau (default); 1: StepLR; '
mes += 'this option is set on only when --lr-decay-factor > 0. '
mes += 'Please check core_scripts/op_manager/lr_scheduler.py '
mes += 'for detailed hyper config for each type of lr scheduler'
parser.add_argument('--lr-scheduler-type', type=int, default=0, help=mes)
parser.add_argument('--no-cuda', action='store_true', default=False,
help='disables CUDA training')
parser.add_argument('--seed', type=int, default=1,
help='random seed (default: 1)')
mes = 'turn model.eval() on validation set (default: false)'
parser.add_argument('--eval-mode-for-validation', \
action='store_true', default=False, help=mes)
mes = 'if model.forward(input, target), please set this option on. '
mes += 'This is used for autoregressive model, auto-encoder, and so on. '
mes += 'When --model-forward-with-file-name is also on, '
mes += 'model.forward(input, target, file_name) should be defined'
parser.add_argument('--model-forward-with-target', \
action='store_true', default=False, help=mes)
mes = 'if model.forward(input, file_name), please set option on. '
mes += 'This is used with forward requires file name of the data. '
mes += 'When --model-forward-with-target is also on, '
mes += 'model.forward(input, target, file_name) should be defined'
parser.add_argument('--model-forward-with-file-name', \
action='store_true', default=False, help=mes)
mes = 'shuffle data? (default true). Set --shuffle will turn off shuffling'
parser.add_argument('--shuffle', action='store_false', \
default=True, help=mes)
mes = 'number of parallel workers to load data (default: 0)'
parser.add_argument('--num-workers', type=int, default=0, help=mes)
mes = 'use DataParallel to levarage multiple GPU (default: False)'
parser.add_argument('--multi-gpu-data-parallel', \
action='store_true', default=False, help=mes)
mes = 'way to concatenate multiple datasets: '
mes += 'concatenate: simply merge two datasets as one large dataset. '
mes += 'batch_merge: make a minibatch by drawing one sample from each set. '
mes += '(default: concatenate)'
parser.add_argument('--way-to-merge-datasets', type=str, \
default='concatenate', help=mes)
######
# options to save model / checkpoint
parser.add_argument('--save-model-dir', type=str, \
default="./", \
help='save model to this direcotry (default ./)')
mes = 'do not save model after every epoch (default: False)'
parser.add_argument('--not-save-each-epoch', action='store_true', \
default=False, help=mes)
mes = 'name prefix of saved model (default: epoch)'
parser.add_argument('--save-epoch-name', type=str, default="epoch", \
help=mes)
mes = 'name of trained model (default: trained_network)'
parser.add_argument('--save-trained-name', type=str, \
default="trained_network", help=mes)
parser.add_argument('--save-model-ext', type=str, default=".pt",
help='extension name of model (default: .pt)')
#######
# options to load model
mes = 'a trained model for inference or resume training '
parser.add_argument('--trained-model', type=str, \
default="", help=mes + "(default: '')")
mes = 'do not load previous training error information.'
mes += " Load only model para. and optimizer state (default: false)"
parser.add_argument('--ignore-training-history-in-trained-model',
action='store_true', \
default=False, help=mes)
mes = 'do not load previous training statistics in optimizer.'
mes += " (default: false)"
parser.add_argument('--ignore-optimizer-statistics-in-trained-model',
action='store_true', \
default=False, help=mes)
mes = 'run inference mode (default: False, run training script)'
parser.add_argument('--inference', action='store_true', \
default=False, help=mes)
#######
# options to output
mes = 'path to save generated data (default: ./output)'
parser.add_argument('--output-dir', type=str, default="./output", \
help=mes)
mes = 'which optimizer to use (Adam | SGD, default: Adam)'
parser.add_argument('--optimizer', type=str, default='Adam', help=mes)
mes = 'verbose level 0: nothing; 1: print error per utterance'
mes = mes + ' (default: 1)'
parser.add_argument('--verbose', type=int, default=1,
help=mes)
#######
# options for user defined
mes = 'a temporary flag without specific purpose.'
mes += 'User should define args.temp_flag only for temporary usage.'
parser.add_argument('--temp-flag', type=str, default='', help=mes)
#######
# backend options
parser.add_argument('--cudnn-deterministic-toggle', action='store_false', \
default=True,
help='use cudnn-deterministic? (default true)')
parser.add_argument('--cudnn-benchmark-toggle', action='store_true', \
default=False,
help='use cudnn-benchmark? (default false)')
#######
# data options
mes = 'option to set silence_handler on waveform data.\n'
mes += ' 0: do nothing, use the data as it is (default) \n'
mes += ' 1: remove segments with small energy, use other segments\n'
mes += ' 2: keep only segments with small energy, remove other segments\n'
mes += 'Code in core_scripts.data_io.wav_tools.silence_handler. '
mes += 'This option is used when input or output contains only waveform. '
mes += 'It only process waveform. Other features will not be trimmed.'
parser.add_argument('--opt-wav-silence-handler', type=int,
default=0, help=mes)
#
# done
if argument_input is not None:
return parser.parse_args(argument_input)
else:
return parser.parse_args()
if __name__ == "__main__":
pass