zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    前言
    实用逆袭课【时间管理、记忆训练、工作效率、人际社交】
    读书确实是一辈子的事
    求职宝典(笔记不详细,但你自己看完消化了真的受用)
    重新认识【时间、金钱、自我、人际关系】
    即兴演讲不是即兴
    大数据和AI的未来畅想
    女性30的思考1
    第四课 人际关系
    第三课 干好工作
  • 原文地址:https://www.cnblogs.com/wanghui-garcia/p/11267160.html
Copyright © 2011-2022 走看看