使用argparse模块以及shell脚本

很多深度学习的论文/项目,会使用argparse.ArgumentParser(),因为它解决了手动处理命令行参数的痛点。这里作一些记录方便以后写项目代码。

简单来说,argparse 是 Python 标准库中用于处理命令行参数的模块 ,而 ArgumentParser() 是它的核心类 。很多 Python 程序(比如脚本、工具、服务)不是在 IDE 里点运行就完事的,而是需要在终端 / 命令行中执行,并且接收外部输入。如果没有 argparse,那只能手动解析 sys.argv(保存命令行参数的列表),代码会非常繁琐且容易出错。

  1. 测试代码 test.py:(使用 ArgumentParser() 分为 3 个核心步骤)

    python 复制代码
    import argparse
    
    # 1. 创建解析器对象(核心步骤)
    parser = argparse.ArgumentParser(
        description="这是一个示例脚本,演示argparse的基础用法",  # 脚本描述(--help时显示)
        epilog="使用示例: python test.py -n 小明 -a 20"  # 帮助信息末尾的额外提示
    )
    
    # 2. 添加参数规则(最核心的配置)
    # 示例1:可选参数(-n/--name),带默认值
    parser.add_argument("-n", "--name", default="匿名用户", help="你的姓名(默认:匿名用户)")
    # 示例2:可选参数(-a/--age),指定类型为int,必填
    parser.add_argument("-a", "--age", type=int, required=True, help="你的年龄(必须是数字,必填)")
    # 示例3:位置参数(无需加--,按顺序传值)
    parser.add_argument("hobby", help="你的爱好(位置参数,直接传值)")
    
    # 3. 解析命令行输入,得到参数对象
    args = parser.parse_args()
    
    # 4. 使用解析后的参数
    print(f"姓名:{args.name}")
    print(f"年龄:{args.age}")
    print(f"爱好:{args.hobby}")
    print('\n')

    运行shell脚本

    bash 复制代码
    python test.py -n 蔡徐坤 -a 27 唱跳R打篮球
    python test.py -h   #-h可以用来确认所有参数的说明和默认值

    输出结果:

  2. 深度学习常用的Shell脚本+python组合

    python 复制代码
    import argparse
    import torch
    
    # 1. 创建解析器对象
    parser = argparse.ArgumentParser(
        description="深度学习训练脚本(argparse 示例)",
        formatter_class=argparse.ArgumentDefaultsHelpFormatter  # 显示默认值
    )
    
    # 2. 添加核心训练参数(必选/可选)
    # ---------------- 必选参数(无默认值,运行时必须指定) ----------------
    parser.add_argument("--data_path", type=str, required=True, help="数据集根目录(必选),如 ./data/imagenet")
    
    # ---------------- 可选参数(有默认值,可覆盖) ----------------
    # 基础训练参数
    parser.add_argument("--epochs", type=int, default=100, help="训练总轮数")
    parser.add_argument("--batch_size", type=int, default=32, help="批次大小(根据GPU显存调整)")
    parser.add_argument("--lr", type=float, default=1e-3, help="初始学习率")
    parser.add_argument("--device", type=str, default="cuda" if torch.cuda.is_available() else "cpu", help="训练设备(cuda/cpu)")
    
    # 模型相关参数 (限制可选值)
    parser.add_argument("--model_name", type=str, default="resnet50", choices=["resnet18", "resnet50", "vit"], help="使用的模型名称(仅支持指定选项)")
    
    # 布尔型参数(开关): 指定该参数则为True,否则False
    parser.add_argument("--use_amp", action="store_true", help="是否使用混合精度训练(默认关闭)")
    parser.add_argument("--save_model", action="store_false",help="是否保存训练后的模型(默认开启,加该参数则不保存)")
    
    # 3. 解析参数并返回
    args = parser.parse_args()
    
    # 4. 打印解析后的参数(方便调试)
    print("===== 训练参数汇总 =====")
    for k, v in vars(args).items():
        print(f"{k}: {v}")
    
    # 5. 模拟训练流程(替换为你的实际训练代码)
    print(f"\n===== 开始训练 =====")
    print(f"数据集路径: {args.data_path}")
    print(f"模型: {args.model_name} | 设备: {args.device}")
    print(f"训练轮数: {args.epochs} | 批次大小: {args.batch_size} | 学习率: {args.lr}")
    print(f"混合精度训练: {args.use_amp} | 保存模型: {args.save_model}")

    运行如下shell脚本

    bash 复制代码
    python DL_test.py -h

    输出结果

    运行如下shell脚本

    bash 复制代码
    python DL_test.py --data_path ./data 

    输出结果

相关推荐
SilentSamsara19 小时前
Python 环境搭建完整指南:从下载安装到运行第一个程序
开发语言·python
zhoutongsheng20 小时前
C#怎么实现Swagger文档 C#如何在ASP.NET Core中集成Swagger自动生成API文档【框架】
jvm·数据库·python
.54821 小时前
## Sorting(排序算法)
python·算法·排序算法
ydmy21 小时前
注意力机制(个人理解)
pytorch·python·深度学习
iwhitney1 天前
【次方量化】3分钟搞懂什么是量化策略
python
高洁011 天前
大模型部署资源不足?轻量化部署解决方案
python·深度学习·机器学习·数据挖掘·transformer
阿里云大数据AI技术1 天前
MaxFrame 视频帧智能分析:从视频到语义向量的端到端分布式处理
人工智能·python
淘矿人1 天前
从0到1:用Claude启动你的第一个项目
开发语言·人工智能·git·python·github·php·pygame
嘻嘻哈哈樱桃1 天前
牛客经典101题题解集--动态规划
java·数据结构·python·算法·职场和发展·动态规划
gmaajt1 天前
Golang怎么做国际化多语言_Golang i18n教程【核心】
jvm·数据库·python