在训练卷积神经网络时,需要预定义很多参数,例如 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()很好的规避了这些问题。
本文主要以训练神经网络的角度,对 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)
parser = argparse.ArgumentParser(description='CV Train')
parser.add_argument('--epochs', type=int, default=10, help='Number of epochs to train.')
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 中确定命令行参数
print(args.epochs)
* 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)
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() 所返回对象上的属性名。
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 是否使用预训练
就这样,会自己在打印中,慢慢的使用,慢慢的了解与将其搞定,都行啦的里由与打算。慢慢的将其搞定都行啦的理由与打算。