在训练卷积神经网络时,需要预定义很多参数,例如 b a t c h s i z e batch_size batchsize, b a c k b o n e , d a t a s e t , d a t a s e t r o o t backbone,dataset,dataset_root backbone,dataset,datasetroot等等,这些参数多而且特别零散,如果我们最初不把这些参数定义,到时候修改是一件特别麻烦的事情,需要逐个修改,所以这个时候用到了python的add_argument()很好的规避了这些问题。
argparse模块
argparser: 命令行选项,参数和子命令行解析器。
本文主要以训练神经网络的角度,对
a
r
g
p
a
r
s
e
argparse
argparse的使用进行讲解。
首先给出代码示例,在对其进行分析,在将其应用在训练卷积神经网络中:
import argparse
parser = argparse.ArgumentParser(description='CV Train')
parser.add_argument('--epochs', type=int, default=10, help='Number of epochs to train.')
args = parser.parse_args()
print(args.epochs)
运行结果
分析
- 首先创建解析器 A r g u m e n t P a r s e r ( ) ArgumentParser() ArgumentParser()对象。
- A r g u m e n t P a r s e r ( ) ArgumentParser() ArgumentParser()对像包含将命令行解析成 P y t h o n Python Python数据类型所需的全部信息。
parser = argparse.ArgumentParser(description='CV Train')
- 其次,添加参数调用 a d d a r g u m e n t ( ) add_argument() addargument()方法添加参数。
- 给一个 A r g u m e n t P a r s e r ( ) ArgumentParser() ArgumentParser()添加程序参数信息是通过 a d d a r g u m e n t ( ) add_argument() addargument()方法完成的,通常这些调用指定 A r g u m e n t P a r s e r ArgumentParser ArgumentParser如何获取命令行字符串并将其转换为对象,这些信息在 p a r s e a r g s ( ) parse_args() parseargs()调用时被存储和使用。
parser.add_argument('--epochs', type=int, default=10, help='Number of epochs to train.')
- 然后调用 p a r s e a r g s ( ) parse_args() parseargs()将返回一个具有 e p o c h s epochs epochs属性的对象, e p o c h s epochs epochs属性将是一个包含一个或多个整数的列表。
- 这个epochs属性的名字叫做epochs,类型为int,默认情况下其值为10,对其的解释为Number of epochs to train->训练的epoch数。
-
- 最后,解析参数使用parse_args()解析添加参数
A r g u m e n t P a r s e r ArgumentParser ArgumentParser通过 p a r s e a r g s ( ) parse_args() parseargs()方法解析参数,其将检查命令行,把每个参数转换为适当类型,然后调用相应的操作,在脚本中,通常 p a r s e a r g s ( ) parse_args() parseargs()会被不带参数调用,而 ArgumentParser 将自动从 sys.argv 中确定命令行参数
- `args = parser.parse_args()
- 将args.epoch打印出来
print(args.epochs)
*
ArgumentParser对象的参数很多,其参数解释如下:仅作了解,了解description即可。
- Desrciption: 帮助信息之前的描述信息.
prog - The name of the program (default: os.path.basename(sys.argv[0]))
usage - 描述程序用途的字符串(默认值:从添加到解析器的参数生成)
description - 在参数帮助文档之前显示的文本(默认值:无)
epilog - 在参数帮助文档之后显示的文本(默认值:无)
parents - 一个 ArgumentParser 对象的列表,它们的参数也应包含在内
formatter_class - 用于自定义帮助文档输出格式的类
prefix_chars - 可选参数的前缀字符集合(默认值: '-')
fromfile_prefix_chars - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值: None)
argument_default - 参数的全局默认值(默认值: None)
conflict_handler - 解决冲突选项的策略(通常是不必要的)
add_help - 为解析器添加一个 -h/--help 选项(默认值: True)
allow_abbrev - 如果缩写是无歧义的,则允许缩写长选项 (默认值:True)
exit_on_error - 决定当错误发生时是否让 ArgumentParser 附带错误信息退出。 (默认值: True)
add_argument()方法定义如何解析命令行参数
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
其参数解释如下
name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。
action - 当参数在命令行中出现时使用的动作基本类型,其默认值是store。
nargs - 命令行参数应当消耗的数目。
const - 被一些 action 和 nargs 选择所需求的常数。
default - 当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值。[不指定参数时的默认值]
type - 命令行参数应当被转换成的类型。
choices - 可用的参数的容器。
required - 此命令行选项是否可省略 (仅选项可用)。
help - 一个此选项作用的简单描述。
metavar - 在使用方法消息中使用的参数值示例。
dest - 被添加到 parse_args() 所返回对象上的属性名。
parser.add_argument(argparse)应用在训练卷积神经网络中,
import argparse
def parse_args():
parser = argparse.ArgumentParser(description='PyTorch Detection Training')
parser.add_mutually_exclusive_group()
parser.add_argument('--dataset',
type=str,
default='ImageNet',
choices=['ImageNet', 'CIFAR'],
help='ImageNet, CIFAR')
parser.add_argument('--dataset_root',
type=str,
default=ImageNet_ROOT,
help='Dataset root directory path')
parser.add_argument('--basenet',
type=str,
default='VGG',
help='Pretrained base model')
parser.add_argument('--batch_size',
type=int,
default=64,
help='Batch size for training')
parser.add_argument('--resume',
type=str,
default=None,
help='Checkpoint state_dict file to resume training from')
parser.add_argument('--cuda',
type=str,
default=True,
help='Use CUDA to train model')
parser.add_argument('--momentum',
type=float,
default=0.9,
help='Momentum value for SGD optim')
parser.add_argument('--gamma',
type=float,
default=0.1,
help='Gamma update for SGD')
parser.add_argument('--save_folder',
type=str,
default=config.checkpoint_path,
help='Directory for saving checkpoint models')
parser.add_argument('--log_folder',
type=str,
default=config.log,
help='Log Folder')
parser.add_argument('--lr',
type=float,
default=1e-2,
help='learning rate')
parser.add_argument('--epochs',
type=int,
default=100,
help='Number of epochs')
parser.add_argument('--num_classes',
type=int,
default=1000,
help='the number classes, like ImageNet:1000, cifar:10')
parser.add_argument('--image_size',
type=int,
default=224,
help='image size, like ImageNet:224, cifar:32')
parser.add_argument('--pretrained',
type=str,
default=False,
help='Models was pretrained')
return parser.parse_args()
args = parse_args()
dataset数据集: ImageNet
dataset_root数据集的路径: ImageNet_ROOT = 'data/public/ImageNet'
basenet即backbone: VGG
batch_size: 64
resume接着上次训练的文件继续训练:None 或者 'XX.pth'
cuda cuda是否使用:True
momentum 使用SGD学习的动量: 0.9(初始值)
gamma 使用SGD更新的gamma: 0.1
save_folder 训练好之后保存的.pth文件
log_folder 日志文件
lr 学习率
epochs 训练使用的epochs
num_classes 使用数据集的类别总数
image_size 图像大小的尺寸
pretrained 是否使用预训练
总结
就这样,会自己在打印中,慢慢的使用,慢慢的了解与将其搞定,都行啦的里由与打算。慢慢的将其搞定都行啦的理由与打算。
- 将其全部研究透彻,研究彻底,会在程序中使用 a r g p a r s e argparse argparse模块。