为了更格式化代码,在写深度学习时,我们通常会采用将所有参数都放在同一个容器里,如装在一个类里,或者装在内置于python中的命令行解析的标准模块argparse中,这样可以方便类或者函数中的参数传递(直接传一整个容器),这篇文章我们介绍argparse。
一、创建解析器
我们首先需要创建一个ArgumentParser模块的解析器,也可以把他看作是一个装参数的容器。
代码如下:
import argparse # 引入argparse库。
parser = argparse.ArgumentParser() # 我们可以把这一步看作是是创建一个装参数的容器。
二、在解析器中添加参数
我们在创建好容器(解析器)后,就可以往里面通过add_argument增加参数。
代码如下:
parser.add_argument('--seed', type=int, default=1, help='Random seed') # 这里只写了几个常用的参数。
# 在parser这个容器中装入了名为seed的参数,且数据类型是int,默认seed为1,help我认为就是注释的作用。
三、解析参数
我们在解析器中添加完参数后,我们需要将这个参数拿出来用,所以我们要用parse_args()来解析参数。
代码如下:
args = parser.parse_args() # 将parser中的参数解析出来,args就作为一个可以直接输出对应参数的容器
print(args.seed) # 输出1。
args.seed = 10 # 可以对args中的参数进行修改。
print(args.seed) # 输出10。
四、一些补充
1. 打印解析器中所有参数。
可以对args容器中的所有参数及参数值进行打印,以便跑完代码后可以根据参数值进行复现。
for arg, value in sorted(vars(args).items()):
print('%s: %s' % (arg, value))
2. 命令行输入改变参数值。
argparse.ArgumentParser()会自动从sys.argv中确定命令行参数
如在终端中输入:
python train.py ---seed 10
这样argparse.ArgumentParser()容器中的seed就为10,而不是他的默认值1。
总结
记录一下。