Python ArgumentParse的subparser用法说明


Posted in Python onApril 20, 2020

在写一些很小的机器学习项目的时候,我们往往希望training, testing和inference能共用一个入口main,但是不同的功能使用不同的input参数.当然如果三个功能对应三个.py脚本问题也不大,但是毕竟觉得不太优雅.这个时候就需要考虑如何让代码更加简单有条理.

主要是最近在看parser有关的东西,所以看到了一个项目,里面的使用subparser的地方是值得借鉴的,下面附上代码和部分自己的一些见解

def main():
 parser = argparse.ArgumentParser()
 subparsers = parser.add_subparsers()

 hparams = make_hparams() 
 # 这个函数是直接写了一些超参数,讲真我不太喜欢这个操作,个人还是比较倾向用一个额外的config文件来存储
 # 这些超参,这样输入的只要是config文件的路径即可;主要是这么做可以看到自己每一步的参数是怎么设置的
 # 便于后期出现了问题来排错
 subparser = subparsers.add_parser("train")
 # add subparser here
 subparser.set_defaults(callback=lambda args: run_train(args, hparams))
 # 加上callback选项,run_train是前期定义的一个函数,这条和后面的args.callback(args)对应
 hparams.populate_arguments(subparser) 
 # 这里就是作者自己定义的一个函数,本质其实还是一系列的add_argument
 subparser.add_argument("--numpy-seed", type=int)
 subparser.add_argument("--model-path-base", required=True)
 subparser.add_argument("--evalb-dir", default="EVALB/")
 subparser.add_argument("--train-path", default="data/02-21.10way.clean")
 subparser.add_argument("--dev-path", default="data/22.auto.clean")
 subparser.add_argument("--batch-size", type=int, default=250)
 subparser.add_argument("--subbatch-max-tokens", type=int, default=2000)
 subparser.add_argument("--eval-batch-size", type=int, default=100)
 subparser.add_argument("--epochs", type=int)
 subparser.add_argument("--checks-per-epoch", type=int, default=4)
 subparser.add_argument("--print-vocabs", action="store_true")

 subparser = subparsers.add_parser("test")
 subparser.set_defaults(callback=run_test)
 subparser.add_argument("--model-path-base", required=True)
 subparser.add_argument("--evalb-dir", default="EVALB/")
 subparser.add_argument("--test-path", default="data/23.auto.clean")
 subparser.add_argument("--test-path-raw", type=str)
 subparser.add_argument("--eval-batch-size", type=int, default=100)

 subparser = subparsers.add_parser("ensemble")
 subparser.set_defaults(callback=run_ensemble)
 subparser.add_argument("--model-path-base", nargs='+', required=True)
 subparser.add_argument("--evalb-dir", default="EVALB/")
 subparser.add_argument("--test-path", default="data/22.auto.clean")
 subparser.add_argument("--eval-batch-size", type=int, default=100)

 subparser = subparsers.add_parser("parse")
 subparser.set_defaults(callback=run_parse)
 subparser.add_argument("--model-path-base", required=True)
 subparser.add_argument("--input-path", type=str, required=True)
 subparser.add_argument("--output-path", type=str, default="-")
 subparser.add_argument("--eval-batch-size", type=int, default=100)

 subparser = subparsers.add_parser("viz")
 subparser.set_defaults(callback=run_viz)
 subparser.add_argument("--model-path-base", required=True)
 subparser.add_argument("--evalb-dir", default="EVALB/")
 subparser.add_argument("--viz-path", default="data/22.auto.clean")
 subparser.add_argument("--eval-batch-size", type=int, default=100)

 args = parser.parse_args()
 args.callback(args)

补充知识:python 学习笔记--argparse模块以及parse_known_args()函数

代码test.py:

import argparse
import sys

parse=argparse.ArgumentParser()
parse.add_argument("--learning_rate",type=float,default=0.01,help="initial learining rate")
parse.add_argument("--max_steps",type=int,default=2000,help="max")
parse.add_argument("--hidden1",type=int,default=100,help="hidden1")
flags,unparsed=parse.parse_known_args(sys.argv[1:])
print flags.learning_rate
print flags.max_steps
print flags.hidden1
print unparsed

运行

python test.py --learning_rate 20 --max_steps 10 --hidden1 100 --arg_int 2

其效果等同于

python test.py --learning_rate=20 --max_steps=10 --hidden1=100 --arg_int=2

输出:

20.0
10
100

['--arg_int', '2']

flags为namespace空间,结果是Namespace(hidden1=100, learning_rate=20.0, max_steps=10),包含程序定义了的命令行参数,而unparsed为程序没有定义的命令行参数。

以上这篇Python ArgumentParse的subparser用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python三元运算实现方法
Jan 12 Python
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
Mar 19 Python
Python编写生成验证码的脚本的教程
May 04 Python
举例讲解Python中的算数运算符的用法
May 13 Python
详解Python中break语句的用法
May 14 Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
python放大图片和画方格实现算法
Mar 30 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
Aug 16 Python
在Django中实现添加user到group并查看
Nov 18 Python
Python通过getattr函数获取对象的属性值
Oct 16 Python
python列表的逆序遍历实现
Apr 20 #Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 #Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 #Python
python 错误处理 assert详解
Apr 20 #Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
Apr 20 #Python
在ipython notebook中使用argparse方式
Apr 20 #Python
Python绘制全球疫情变化地图的实例代码
Apr 20 #Python
You might like
php遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
2014/06/04 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
2019/08/14 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
使用jspdf生成pdf报表
2015/07/03 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
python访问抓取网页常用命令总结
2017/04/11 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
python实现计算器简易版
2020/12/17 Python
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
实习生自荐信范文分享
2013/11/27 职场文书
教师个人剖析材料
2014/02/05 职场文书
《商鞅南门立木》教学反思
2014/02/16 职场文书
党员入党表决心的话
2014/03/11 职场文书
yy司仪主持词
2014/03/22 职场文书
操行评语大全
2014/04/30 职场文书
教师节学生演讲稿
2014/09/03 职场文书
个人合伙协议书范本
2014/10/14 职场文书
业务员年终工作总结2015
2015/05/28 职场文书