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

    输出结果

相关推荐
梨子串桃子_11 小时前
推荐系统学习笔记 | PyTorch学习笔记
pytorch·笔记·python·学习·算法
文言一心12 小时前
LINUX离线升级 Python 至 3.11.9 操作手册
linux·运维·python
诗词在线12 小时前
中国古代诗词名句按主题分类有哪些?(爱国 / 思乡 / 送别)
人工智能·python·分类·数据挖掘
高锰酸钾_12 小时前
机器学习-L1正则化和L2正则化解决过拟合问题
人工智能·python·机器学习
天天睡大觉13 小时前
Python学习11
网络·python·学习
智航GIS13 小时前
11.11 Pandas性能革命:向量化操作与内存优化实战指南
python·pandas
写代码的【黑咖啡】14 小时前
Python中的Selenium:强大的浏览器自动化工具
python·selenium·自动化
抠头专注python环境配置14 小时前
解决Windows安装PythonOCC报错:从“No module named ‘OCC’ ”到一键成功
人工智能·windows·python·3d·cad·pythonocc
华研前沿标杆游学14 小时前
2026年华研就业实践营|走进字节跳动,解锁科技行业职业新航向
python