利用yaml文件更新argparse.ArgumentParser参数

目录

1--argparse介绍

2--利用yaml文件更新argparse参数值

3--参考


1--argparse介绍

argparse是python内置的一个命令行解析模块,其常见用法如下:

# 导入第三方库
import argparse

# 创建解析对象
parser = argparse.ArgumentParser(description = 'Used to describe the purpose of the object') 

# 添加参数
parser.add_argument(
    '--Parameter_name', # 参数名
    type = str,         # 参数类型
    default = None,     # 默认参数值
    help = 'The purpose of the parameter') # 参数的用途

# 实例化对象
p = parser.parse_args(args = [])

# 输出解析对象的参数
print(p.Parameter_name)

2--利用yaml文件更新argparse参数值

当解析对象的参数值过多,以及需要频繁调试更新参数值(例如深度学习调参)时,使用yaml文件更新argparse参数值能有效提高工作效率,下面将以代码的形式展示利用yaml文件更新argparse参数值:

# 导入第三方库
import argparse
import yaml
import os


# 创建对象并初始化参数
def get_parser():
    
    # 创建解析对象
    parser = argparse.ArgumentParser(description = 'A method to update parser parameters using yaml files') 
    
    # 添加参数1
    parser.add_argument(
        '--num_worker', 
        type = int,
        default = 4,
        help = 'the number of worker for data loader')
    
    # 添加参数2
    parser.add_argument(
        '--lr',
        type = float,
        default = 0.01,
        help = 'the learning rate of SGD')
    
    # 添加参数3
    parser.add_argument(
    '--batchsize',
    type = int,
    default = 64,
    help = 'the batchsize of training stage')
    
    # 返回解析对象
    return parser 



# 创建一个yaml文件
def creat_yaml():
    
    # yaml文件存放的内容
    caps = {
        'num_worker': 16,
        'lr': 0.05,
    }

    # yaml文件存放的路径
    yamlpath = os.path.join('./', 'test.yaml')

    # caps的内容写入yaml文件
    with open(yamlpath, "w", encoding = "utf-8") as f:
        yaml.dump(caps, f)

        
# main()函数    
def main():
    
    # 创建一个yaml文件
    creat_yaml()
    
    # 创建解析对象
    parser = get_parser()
    
    # 实例化对象
    p = parser.parse_args(args = [])
    
    # 输出参数原始默认值
    print('The default value of num_worker is: ', p.num_worker)
    print('The default value of lr is: ', p.lr)
    print('The default value of batchsize is: ', p.batchsize)
    print('##############################')
    
    # 导入创建的yaml文件
    with open('test.yaml', 'r') as f:
        default_arg = yaml.load(f)
        
    # 创建解析对象
    parser = get_parser() 
    
    # 利用yaml文件更新默认值
    parser.set_defaults(**default_arg)
    
    # 实例化对象
    p = parser.parse_args(args = [])

    # 输出更新后的参数值
    print('The updated value of num_worker is: ', p.num_worker)
    print('The updated value of lr is: ', p.lr)
    print('The updated value of batchsize is: ', p.batchsize) # batchsize并没有用yaml文件更新哦


# 执行main函数
main()

代码执行结果:

The default value of num_worker is:  4
The default value of lr is:  0.01
The default value of batchsize is:  64
##############################
The updated value of num_worker is:  16
The updated value of lr is:  0.05
The updated value of batchsize is:  64

3--参考

参考链接1

### PyCharm调试时传递配置文件作为参数 在PyCharm中进行调试并传入配置文件作为参数的操作可以通过编辑运行/调试配置来实现。以下是具体方法: #### 配置运行/调试选项 在PyCharm中,通过设置`Run/Debug Configurations`可以指定脚本所需的命令行参数。这些参数可以直接指向配置文件路径或其他必要输入。 1. **打开运行配置界面** 在工具栏中点击 `Edit Configurations...` 或者右键项目中的Python文件,在弹出菜单中选择 `Modify Run Configuration`。 2. **填写参数字段** 在弹出的窗口中找到 `Parameters` 字段,这里用于填入命令行参数。假设需要传递一个YAML格式的配置文件路径给脚本,则可以在该字段写入类似以下内容: ```bash --config_file /path/to/configs/VehicleID/vit_transreid_stride.yml ``` 3. **环境变量和其他选项** 如果还需要额外设定环境变量(如设备ID),可在同一窗口下的 `Environment variables` 中定义。例如: ``` MODEL.DEVICE_ID="('1')" ``` 4. **保存并应用更改** 完成上述操作后记得点击 `OK` 按钮保存修改后的配置[^1]。 #### 示例代码片段展示如何解析此类参数 下面是一个简单的例子演示如何利用 argparse 库读取来自命令行的配置文件路径,并加载其中的内容: ```python import argparse from yaml import safe_load def load_config(config_path): with open(config_path, 'r') as file: config_data = safe_load(file) return config_data if __name__ == "__main__": parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('--config_file', type=str, help='Path to the configuration YAML file') args = parser.parse_args() config_content = load_config(args.config_file) print(f'Configuration loaded successfully:\n{config_content}') ``` 当按照前述方式设置了正确的参数之后,这段程序能够正常接收外部提供的 `.yml` 文件地址并完成相应处理逻辑[^2]。 另外值得注意的是,在涉及远程主机上的资源访问场景下,可能还需提前做好本地与目标机器之间的数据同步工作以便及时获取最新版本的依赖文档等内容[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值