前言
在构建神经网络过程中,常常需要修改神经网络的超参数,比如说训练样本的批次大小、学习率等。为了方便参数修改,可以通过命令行来传递这些超参数,通过argparse也可以定义文件路径,读取文件夹列表下的所有文件。
argparse
argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数。
大白话说就是可以通过argparse配置程序中运行的相应参数。并可以在终端使用命令行的形式给程序命令行添加对应的参数来运行程序。
给程序配置argparse通常分为四个步骤:
- 导入模块 import argparse
- 创建解析对象 parser = argparse.ArgumentParser()
- 向该对象添加命令行参数 parser.add_argument()
- 调用parser.parse_args()进行解析
1.设置默认参数函数
import argparse parser = argparse.ArgumentParser() parser.add_argument("echo") args = parser.parse_args() print(args.echo)
(base) my macbook % python script.py haha haha (base) my macbook % python script.py -h usage: script.py [-h] echo positional arguments: echo optional arguments: -h, --help show this help message and exit
输入 -h 参数,命令行会提示 positional arguments 是 echo 是必填。
2.设置可选参数函数
- “-”:指定短的参数,如-h
- “–”指定长的参数,如-help
这两种方式可以同存,也可以只存在一个。
import argparse parser = argparse.ArgumentParser() parser.add_argument("-v","--verbose",help="添加输出 verbose",action="store_true") args = parser.parse_args() if args.verbose: print("输入参数成功")
其中action=“store_true”,表示可以不用为参数,-v,指定特定值。
3.类型 type
import argparse parser = argparse.ArgumentParser() parser.add_argument("-x",type=int,help="输入数字") args = parser.parse_args() y=args.x answer=y**3+y+1 print(answer)
默认情况下type为str。
(base) my macbook % python script.py -x 2 11
4.可选值 choices=[]
这里设定取值范围为0、1、2。
import argparse parser=argparse.ArgumentParser() parser.add_argument("-square",type=int,help="display number") parser.add_argument("-v","--verbosity",type=int,choices=[0,1,2],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)
(base) my macbook % python script.py -square 4 -v 0 16 (base) my macbook % python script.py -square 4 -v 1 4^2==16 (base) my macbook % python script.py -square 4 -v 2 the square of 4 equals 16 (base) my macbook % python script.py -square 4 -v 3 usage: script.py [-h] [-square SQUARE] [-v {0,1,2}] script.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)
5.互斥参数
group=parser.add_mutually_exclusive_group() group.add_argument("-v","--verbose",action="store_true") group.add_argument("-q","--quiet",action="store_true")
第一行定义一个互斥组,第二、三行在互斥组中添加-v和-q两个参数。
import argparse parser=argparse.ArgumentParser(description="my argparse script") group=parser.add_mutually_exclusive_group() group.add_argument("-v","--verbose",action="store_true") group.add_argument("-q","--quiet",action="store_true") parser.add_argument("-x",type=int,help="the base") parser.add_argument("-y",type=int,help="the exponent") args=parser.parse_args() answer=args.x**args.y if args.quiet: print(answer) elif args.verbose: print("{} to the power {} equals {}".format(args.x,args.y,answer)) else: print("{}^{}=={}".format(args.x,args.y,answer))
(base) my macbook % python script.py -h usage: script.py [-h] [-v | -q] [-x X] [-y Y] my argparse script optional arguments: -h, --help show this help message and exit -v, --verbose -q, --quiet -x X the base -y Y the exponent
(base) my macbook % python script.py -x 4 -y 2 -v 4 to the power 2 equals 16 (base) my macbook % python script.py -x 4 -y 2 -q 16 (base) my macbook % python script.py -x 4 -y 2 4^2==16 (base) my macbook % python script.py -x 4 -y 2 -v -q usage: script.py [-h] [-v | -q] [-x X] [-y Y] script.py: error: argument -q/--quiet: not allowed with argument -v/--verbose
-q 和 -v 不出现,或仅出现一个都可以,同时出现就会报错
6.参数默认值
parser.add_argument("-x",type=int,help="the base",default=6) • 1
default设定参数默认值
import argparse parser=argparse.ArgumentParser(description="my argparse script") parser.add_argument("-x",type=int,help="the base",default=6) parser.add_argument("-y",type=int,help="the exponent",default=2) args=parser.parse_args() answer=args.x**args.y print(answer)
(base) my macbook % python script.py 36
argparse库在计算机视觉中的应用
import cv2 from __future__ import print_function import argparse parser = argparse.ArgumentParser() parser.add_argument("-i", "--image", help = "Path to the image",default='1.jpg') args = vars(parser.parse_args()) image1 = cv2.imread(args["image"]) print("width: {}pixels".format(image1.shape[1])) print("hight: {}pixels".format(image1.shape[0])) print("channels: {}".format(image1.shape[2])) cv2.imshow("image", image1) cv2.waitKey(0) cv2.destroyAllWindows()
(base) my macbook % python script.py width: 450pixels hight: 288pixels channels: 3
这用到了vars(),是为了能够像字典一样访问 ap.parse_args()的值,即现在 args[“image”]=parser.parse_args()