• python的argparse模块parse_known_args()方法的使用


    parse_known_args()方法的用处就是有些时候,你的选项配置可能不会在一个函数或包中调用完成

    在很多使用,我们可能会需要根据一些输入的选项,比如在深度学习中,我们可能会根据传入的模型设置--model来决定我们调用的是那个模型代码,然后在该模型中还会有一部分的选项设置

    那么这时候就会出现一种情况就是运行命令中会传入所有需要设置的选项值,但是有时候仅获取到基本设置时可能要进行一些操作然后才继续导入剩下的参数设置

    parse_known_args()方法的作用就是当仅获取到基本设置时,如果运行命令中传入了之后才会获取到的其他配置,不会报错;而是将多出来的部分保存起来,留到后面使用

    举例说明:

    import argparse
    def basic_options():
        parser = argparse.ArgumentParser()
        parser.add_argument('--data_mode', type=str, default= 'unaligned', help='chooses how datasets are loaded')
        parser.add_argument('--mode', type=str, default='test', help='test mode')
        return parser
    
    def data_options(parser):
        parser.add_argument('--lr', type=str, default='0.0001', help='learning rate')
        return parser
    
    if __name__ == '__main__':
        parser = basic_options()
        opt, unparsed = parser.parse_known_args()
        print(opt)
        print(unparsed)
        parser = data_options(parser)
        opt = parser.parse_args()
        print(opt)

    运行:

    (deeplearning) userdeMacBook-Pro:pytorch-CycleGAN user$ python test_data.py --data_mode aligned --lr 0.0002
    Namespace(data_mode='aligned', mode='test')
    ['--lr', '0.0002']
    Namespace(data_mode='aligned', lr='0.0002', mode='test')

    该例子说明了在一开始仅导入了basic_options()选项时,多余出来的--lr选项会被保存起来,不会报错,直到接下来导入了data_options(parser)之后再将其赋值

    这时候如果我们传入一个没有配置的选项,它在中间的时候也会保存起来,但是最后就会报错:

    (deeplearning) userdeMacBook-Pro:pytorch-CycleGAN user$ python test_data.py --data_mode aligned --lr 0.0002 --no_clue True
    Namespace(data_mode='aligned', mode='test')
    ['--lr', '0.0002', '--no_clue', 'True']
    usage: test_data.py [-h] [--data_mode DATA_MODE] [--mode MODE] [--lr LR]
    test_data.py: error: unrecognized arguments: --no_clue True

    其他:如果想要以字符串形式获取选项值,在最后添加一行:

    print('{data_mode}_{mode}_{lr}'.format(**vars(opt)))

    返回:

    (deeplearning) userdeMacBook-Pro:pytorch-CycleGAN user$ python test_data.py --data_mode aligned --lr 0.0002
    Namespace(data_mode='aligned', mode='test')
    ['--lr', '0.0002']
    Namespace(data_mode='aligned', lr='0.0002', mode='test')
    aligned_test_0.0002
  • 相关阅读:
    优化你的手机游戏
    vuforia 结合 unity3d 开发 AR 的 androidAPP 总结
    self._raiseerror(v) File "D:GameDevelopmentPython27libxmletreeElementTree.py", line 1506, in _raiseerror
    自定义TexturePacker插件导出自己的plist文件
    还原TexturePacker plist 文件以及图片的方法 (切开各小图片)
    no module named firefly.master.master
    c#比较器 排序
    python ——面向对象进阶(反射,双下线方法,静态方法,类方法)
    python——模块和包 需要注意的地方
    举例详解Python中的split()函数的使用方法
  • 原文地址:https://www.cnblogs.com/wanghui-garcia/p/11267160.html
Copyright © 2020-2023  润新知