使用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 

    输出结果

相关推荐
weixin_4713830314 分钟前
17 Self-RAG —— 幻觉检测 + 答案质量评估
python·agent
叠层归一研究院20 分钟前
如何用程序搭建一个 AGI 种子系统(三):生长如何对接物理与数学宇宙
人工智能·python·算法·机器学习·transformer·agi
jufeng130732 分钟前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 5 篇】
python·ai agent·上下文压缩
AndrewHZ32 分钟前
图像处理入门008 | 阶段总结:环境测试与基础概念测验
图像处理·python·opencv·计算机视觉·cv
北斗落凡尘41 分钟前
LangGraph 入门实战(10)--时光回溯
python·langchain
今天AI了吗42 分钟前
Agent & AI 名词大扫盲
数据库·人工智能·python·sql·rust
张张123y1 小时前
Hermes Agent 是什么?它能做什么,以及如何部署到飞书
人工智能·python·飞书
SamChan901 小时前
用Playwright端到端测试PDF翻译功能:Web自动化测试实战
前端·python·ai·pdf·wpf
袁袁袁袁满1 小时前
Python爬虫实战:利用巨量IP获取跨境电商数据
爬虫·python·网络爬虫·爬虫实战·跨境电商·电商爬虫
jufeng13071 小时前
【系列:TDengine 工业物联网实战:从零搭起可运行系统 · 第 4 篇】
python·时序数据库·tdengine·asyncio