Pytorch(十二) —— argparse命令行读取指令

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--save_path", type=str, default='results/original+sem/', required=True, help="save_path")
parser.add_argument("--n_epochs", type=int, default=200, required=True, help="number of epochs of training")
parser.add_argument("--batch_size", type=int, default=64, help="size of the batches")
parser.add_argument("--lr", type=float, default=0.0002, help="adam: learning rate")
parser.add_argument("--b1", type=float, default=0.5, help="adam: decay of first order momentum of gradient")
parser.add_argument("--b2", type=float, default=0.999, help="adam: decay of first order momentum of gradient")
parser.add_argument("--n_cpu", type=int, default=8, help="number of cpu threads to use during batch generation")
parser.add_argument("--latent_dim", type=int, default=100, help="dimensionality of the latent space")
parser.add_argument("--img_size", type=int, default=28, help="size of each image dimension")
parser.add_argument("--channels", type=int, default=1, help="number of image channels")
parser.add_argument("--sample_interval", type=int, default=400, help="interval betwen image samples")
parser.add_argument("--close_wandb", type=bool, default=False)
    
parser.set_defaults(optimize=True)
parser.set_defaults(kitti_crop=False)
parser.set_defaults(absolute_depth=False)

args = parser.parse_args()
print(args)
 
img_shape = (args.channels, args.img_size, args.img_size)
 

判断opt有没有哪一项,可以用

hasattr(args, 'local_rank')

以后用的时候就用opt

opt.后跟的参数就是这一些

还可以设置默认参数

parser.set_defaults(optimize=True)
parser.set_defaults(kitti_crop=False)
parser.set_defaults(absolute_depth=False)

required=True

表示执行这个python程序的时候必须设定这个参数项

设置参数的输入只能是某些值

parser.add_argument('--modelname', '-m', type=str, required=True, choices=['dab_detr', 'dab_deformable_detr'])

传布尔值的注意事项

可以

parser.add_argument("--R_relation", type=bool, default=False)

然后 python lian.py --R_relation True

但是不能

parser.add_argument("--R_relation", type=bool, default=True)

然后 python lian.py --R_relation False

这样得到的结果arg.R_relation还是True

所以需要这样的情况一般改写成--wo_R_relation, 然后默认传False

保存argparse配置参数

保存成json文件,这对每个实验是必要的

args = parser.parse_args()
with open("new_json.json",'w',) as f:
    json.dump(args.__dict__, f, indent=4)

通过程序命令代替命令行传参

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--n_epochs", type=int, default=200, required=True, help="number of epochs of training")
parser.add_argument("--batch_size", type=int, default=64, help="size of the batches")

# opt = parser.parse_args()
opt = parser.parse_args('--n_epochs 5 --batch_size 4'.split())
print(opt)
print(opt.n_epochs)
print(opt.batch_size)

action='store_true' / store_false  触发

store_true 即如果运行程序的命令中带了这个参数,action就是True,不带就是False

store_false同理

dest参数,改变传入参数名

即如果我们想在命令行传参的时候用--batchsize 来指定batchsize,而在程序中却想用args.bs来用这个值

parser.add_argument('--batchsize', dest = 'bs' )

每个命令行参数后的help什么时候起作用

当执行程序时使用 python lian.py  --help就会将提示内容显示了

nargs / 传list

输入的一个参数后可能跟着多个值,例如

python lian.py -crop_size 128 128

import argparse

parser = argparse.ArgumentParser(description='Process some integers...')
parser.add_argument('--crop_size', help='Set the crop_size', default=[128, 128], nargs='+', type=int)

opt = parser.parse_args()
print(opt)

  • nargs=N,一个选项后可以跟多个参数(action='append'时,依然是一个选项后跟一个参数,只不过选项可以多次出现),参数的个数必须为N的值,这些参数会生成一个列表,当nargs=1时,会生成一个长度为1的列表。
  • nargs=?,如果没有在命令行中出现对应的项,则给对应的项赋值为default。特殊的是,对于可选项,如果命令行中出现了此可选项,但是之后没有跟随赋值参数,则此时给此可选项并不是赋值default的值,而是赋值const的值。
  • nargs=*,和N类似,但是没有规定列表长度。
  • nargs=+,和*类似,但是给对应的项当没有传入参数时,会报错error: too few arguments。
     

choices参数

choices参数用于限制参数的取值范围

choices参数接受一个列表或元组,其中包含可接受的参数值。在解析参数时,如果输入的参数值不在这个列表中,则会引发错误。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--color', choices=['red', 'green', 'blue'])
args = parser.parse_args()

print(args.color)

在运行该脚本时,只有当输入的参数值为redgreenblue时,程序才会正常执行并输出参数值。如果输入的参数值不在列表中,则会输出一个错误信息

--和没有--有什么区别

带-

import argparse
  
parser = argparse.ArgumentParser()
parser.add_argument('-seed', type=int, default=72, help='Random seed.')
parser.add_argument('-epochs','-e', type=int, default=10000, help='Number of epochs to train.')
  
args = parser.parse_args()
  
print(args.seed)
print(args.epochs)

都不带

import argparse
  
parser = argparse.ArgumentParser()
parser.add_argument('seed', type=int, default=72, help='Random seed.')
parser.add_argument('epochs', type=int, default=10000, help='Number of epochs to train.')
  
args = parser.parse_args()
  
print(args.seed)
print(args.epochs)

输入的值就必须按顺序来了

如果想定义argparser然后直接在程序制定,不接受命令行的传参

多用于一个程序有两套argparse的时候

args = argparse.Namespace(batch_size=128, 
                          data_path='path/to/dataset', 
                          pretrained='../GFM/gfm.pth',
                          cfg = '../GFM/configs/BEN.yaml',
                          )

argparse

使用步骤:

            (1)import argparse    首先导入模块
            (2)parser = argparse.ArgumentParser()    创建一个解析对象
            (3)parser.add_argument()    向该对象中添加你要关注的命令行参数和选项
            (4)parser.parse_args()    进行解析


例如,你使用的是parser.add_argument('--x')

那么你用命令行输入的值就保存在args.x中

import argparse
  
parser = argparse.ArgumentParser()
parser.add_argument('--seed', type=int, default=72, help='Random seed.')
parser.add_argument('--epochs','-e', type=int, default=10000, help='Number of epochs to train.')
  
args = parser.parse_args()
  
print(args.seed)
print(args.epochs)

add_argument中的参数都是可选参数,就是你运行程序的时候可以不带

python hello.py

python hello.py --seed 2

python hello.py --seed 2 --epochs 10

也可用-e 10

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值