赞
踩
在训练卷积神经网络时需要预定义很多参数,例如batch_size, backbone,dataset,dataset_root等等,这些参数多而且特别零散;如果我们最初不把这些参数定义,到时候修改是一件特别麻烦的事情,需要逐个修改;所以这个时候用到了python的add_argument()很好的规避了这些问题。
首先讲,argparse是Python内置的一个用于命令项选项与参数解析的模块,argparse模块可以让人轻松编写用户友好的命令接口。程序定义它需要的参数,然后argparse将弄清如何从sys.argv解析出那些参数。argparse模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。
【参考】:
使用python的parser.add_argument()在卷积神经网络中如何预定义参数?
argparse 模块是 Python 内置的一个用于命令项选项与参数解析的模块,argparse 模块可以让人轻松编写用户友好的命令行接口。通过在程序中定义好我们需要的参数,然后 argparse 将会从 sys.argv 解析出这些参数。argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。
一般步骤分为三步:
创建一个解析器——创建 ArgumentParser() 对象
parser = argparse.ArgumentParser(description='test')
description= 关键字参数。这个参数简要描述这个程度做什么以及怎么做。
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
add_argument(_),方法里面参数完整的话:除了name一共有10个
每个参数解释如下:
name or flags
:选项字符串的名字或者列表,例如 foo 或者 -f, --foo。
action
:命令行遇到参数时的动作,默认值是 store。
store_const
:表示赋值为const;
append
:将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
append_const
:将参数规范中定义的一个值保存到一个列表;
count
:存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;
nargs
:应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument
使用default
,对于 Optional argument
使用 const
;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。
const - action
:和 nargs 所需要的常量值。
default
:不指定参数时的默认值。
type
: 命令行参数应该被转换成的类型。
choices
:参数可允许的值的一个容器。
required
:可选参数是否可以省略 (仅针对可选参数)。
help
:参数的帮助信息,当指定为 argparse.SUPPRESS
时表示不显示该参数的帮助信息.
metavar
: 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.
dest
: 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.
例如:
parser.add_argument('--epochs', type=int, default=10, help='Number of epochs to train.')
args = parser.parse_args()
在脚本中,通常 parse_args() 会被不带参数调用,而 ArgumentParser 将自动从 sys.argv 中确定命令行参数。
sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那些试图从代码来说明它作用的解释一直没看明白。因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数。
lower()函数是将一个文本字符串中的所有大写字母转换为小写字母
raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。
raise 异常类:raise 后带一个异常类。该语句引发指定异常类的默认实例。
raise 异常对象:引发指定的异常对象。
例:
这段代码意为:如果if、if、elif中的条件均不满足则引发argparse.ArgumentTypeError错误
def test_args(*args):
test_args('name','age','address','sex')
# ('name', 'age', 'address', 'sex')
∗把函数test_args()接受到的多个参数’name’,‘age’,‘address’,‘sex’,打包成了元组(‘name’,‘age’,‘address’,‘sex’),赋值给了形参args。
例2,
def test(a,*args,**kwargs):
print(a)
print(args)
print(kwargs)
test(1,3,5,7,c='2',d=4)
在test(1,3,5,7,c=‘2’,d=4)中,函数里参数对应的数值为:a=1,*args表示剩下的没有名称的参数,**kwargs表示剩余的键值对。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。