PytorchCNN项目搭建2---Argparse
整体的代码在我的github上面可以查阅
argparse 模块可以让人轻松编写用户友好的命令行接口。
程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。
argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。
import argparse
位置参数介绍
"""一个简单的例子"""
## 此程序需要在命令行运行,然后查看相应的结果
parser = argparse.ArgumentParser()
parser.add_argument('echo', help='echo the string you use here')
args = parser.parse_args()
print(args.echo)
程序运行结果说明:
- 使用了add_argument()方法, 该方法用于指定程序能够接受哪些命令选项。在这个例子中,将选项命名为 echo, 功能与其一致,此外使用了help,说明此参数的作用
- 现在调用程序时,必须指定一个选项
- parser_args() 方法实际上会返回选项中的特定的数据,这这个例子中,返回的是 echo
'''例子2'''
parser = argparse.ArgumentParser()
parser.add_argument('square', help='display a square of a given number')
args = parser.parse_args()
print(args.square**2)
可选参数介绍
parser = argparse.ArgumentParser()
parser.add_argument('--verbosity', '-v', help='increase output verbosity')
args = parser.parse_args()
if args.verbosity:
print('verbosity turned on')
程序说明:
- 当着以程序被设计为指定 –verbosity 参数时显示某些东西,否则不显示
- 不添加这一选项时,程序没有提示任何错误而退出,说明参数是可选的。但是在帮助信息中会显示
- 使用 –verbosity时, 必须指定一些值
- 上诉例子杰哥任何整数值作为 –verbosity 的参数,但对于我们的简单程序而言,只有两个实际意义, True 或 False。 对程序进行修改如下:
下面对此例子进行修改,添加 action 参数,并且把 –verbosit 简化为 -v,在命令行中,使用这两个是相同的作用
扫描二维码关注公众号,回复:
12572457 查看本文章
parser = argparse.ArgumentParser()
parser.add_argument('-v','--verbosity', help='increase output verbosity', action='store_true') #默认为True
args = parser.parse_args()
if args.verbose:
print("verbosity turned on")
结合位置参数和可选参数
parser = argparse.ArgumentParser()
parser.add_argument('square', type=int, help='display a square of a given number')
parser.add_argument('-v', '--verbosity', action='store_true', help='increase output verbosity')
args = parser.parse_args()
answer = args.square ** 2
if args.verbosity:
print('the square of {} equals {}'.format(args.square, answer))
else:
print(answer)
再添加一些复杂的功能:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int, choice=[0, 1, 2], default=0, # 限制verbosity的值,并设置默认值
help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity == 1:
print("{}^2 == {}".format(args.square, answer))
else:
print(answer)
由上可知,argparse模块是一个很简单模块,但是实际上有很多可选择的参数,大家在之后的学习中可以自己查看学习,
最后,我把自己在之后的程序中需要用到的参数进行设置并封装成一个函数,如下所示:
def parser():
parse = argparse.ArgumentParser(description='Pytorch Cifar10 Training')
parse.add_argument('--config','-c',default='./config/config.py',help='config file path') #设置config参数
parse.add_argument('--net','-n',type=str,required=True,help='input which model to use') #设置选择进行训练的model类型
parse.add_argument('--pretrain','-p',action='store_true',help='Location pretrain data') #设置模型是否进行预训练
parse.add_argument('--resume','-r',action='store_true',help='resume from checkpoint') #设置模型是否进行断点续训
parse.add_argument('--epoch','-e',default=None,help='resume from epoch') #设置从哪个epoch进行断点续训
parse.add_argument('--gpuid','-g',type=int,default=0,help='GPU ID') #设置使用的GPU_ID
args = parse.parse_args()
return args
参考文献
最后还要感谢我的师兄,是他手把手教我搭建了整个项目,还有实验室一起学习的小伙伴~ 希望他们万事胜意,鹏程万里!