介绍
这篇文章主要讲解了如何使用Python ArgumentParse的subparser,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
在写一些很小的机器学习项目的时候,我们往往希望训练、测试和推理能共用一个入口主要,但是不同的功能使用不同的输入参数。当然如果三个功能对应三个. py脚本问题也不大,但是毕竟觉得不太优雅。这个时候就需要考虑如何让代码更加简单有条理。
主要是最近在看解析器有关的东西,所以看到了一个项目,里面的使用subparser的地方是值得借鉴的,下面附上代码和部分自己的一些见解
def main (): 解析器=argparse.ArgumentParser () subparsers=parser.add_subparsers () hparams=make_hparams () #这个函数是直接写了一些超参数,讲真我不太喜欢这个操作,个人还是比较倾向用一个额外的配置文件来存储 #这些超参,这样输入的只要是配置文件的路径即可,主要是这么做可以看到自己每一步的参数是怎么设置的 #便于后期出现了问题来排错 subparser=subparsers.add_parser (“train") #添加subparser这里 subparser。set_defaults(回调=λ参数:run_train (args, hparams)) #加上调选项,run_train是前期定义的一个函数,这条和后面的args.callback (args)对应 hparams.populate_arguments (subparser) #这里就是作者自己定义的一个函数,本质其实还是一系列的add_argument subparser.add_argument (“——numpy-seed",类型=int) subparser.add_argument (“——model-path-base",需要=True) subparser.add_argument (“——evalb-dir",默认=癊VALB/? subparser.add_argument (“——train-path",默认=笆?02 - 21.10 - way.clean") subparser.add_argument (“——dev-path",默认=笆?22. auto.clean") subparser.add_argument (“——batch-size"=int类型,默认=250) subparser.add_argument (“——subbatch-max-tokens"=int类型,默认=2000) subparser.add_argument (“——eval-batch-size"=int类型,默认=100) subparser.add_argument (“——epochs",类型=int) subparser.add_argument (“——checks-per-epoch"=int类型,默认=4) subparser.add_argument (“——print-vocabs", action=皊tore_true") subparser=subparsers.add_parser (“test") subparser.set_defaults(回调=run_test) subparser.add_argument (“——model-path-base",需要=True) subparser.add_argument (“——evalb-dir",默认=癊VALB/? subparser.add_argument (“——test-path",默认=笆?23. auto.clean") subparser.add_argument (“——test-path-raw",类型=str) subparser.add_argument (“——eval-batch-size"=int类型,默认=100) subparser=subparsers.add_parser (“ensemble") subparser.set_defaults(回调=run_ensemble) subparser.add_argument (“——model-path-base",娜戈=& # 39;+ & # 39;,要求=True) subparser.add_argument (“——evalb-dir",默认=癊VALB/? subparser.add_argument (“——test-path",默认=笆?22. auto.clean") subparser.add_argument (“——eval-batch-size"=int类型,默认=100) subparser=subparsers.add_parser (“parse") subparser.set_defaults(回调=run_parse) subparser.add_argument (“——model-path-base",需要=True) subparser.add_argument (“——input-path",类型=str=True) subparser.add_argument (“——output-path",类型=str,默认=安澄拧? subparser.add_argument (“——eval-batch-size"=int类型,默认=100) subparser=subparsers.add_parser (“viz") subparser.set_defaults(回调=run_viz) subparser.add_argument (“——model-path-base",需要=True) subparser.add_argument (“——evalb-dir",默认=癊VALB/? subparser.add_argument (“——viz-path",默认=笆?22. auto.clean") subparser.add_argument (“——eval-batch-size"=int类型,默认=100) args=parser.parse_args () args.callback (args)
<强> python学习笔记——argparse模块以及parse_known_args()函数强>
代码测试。py:
进口argparse 导入系统 解析=argparse.ArgumentParser () parse.add_argument (“——learning_rate",类型=浮动,默认=0.01,帮助=俺跏糽earining rate") parse.add_argument (“——max_steps"=int类型,默认=2000,帮助=癿ax") parse.add_argument (“——hidden1"=int类型,默认=100,帮助=癶idden1") 旗帜,未解析=parse.parse_known_args (sys.argv [1:]) 打印flags.learning_rate 打印flags.max_steps 打印flags.hidden1 打印未解析如何使用Python ArgumentParse的subparser