很多深度学习的论文/项目,会使用argparse.ArgumentParser(),因为它解决了手动处理命令行参数的痛点。这里作一些记录方便以后写项目代码。
简单来说,argparse 是 Python 标准库中用于处理命令行参数的模块 ,而 ArgumentParser() 是它的核心类 。很多 Python 程序(比如脚本、工具、服务)不是在 IDE 里点运行就完事的,而是需要在终端 / 命令行中执行,并且接收外部输入。如果没有 argparse,那只能手动解析 sys.argv(保存命令行参数的列表),代码会非常繁琐且容易出错。
-
测试代码 test.py:(使用 ArgumentParser() 分为 3 个核心步骤)
pythonimport 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脚本
bashpython test.py -n 蔡徐坤 -a 27 唱跳R打篮球 python test.py -h #-h可以用来确认所有参数的说明和默认值输出结果:

-
深度学习常用的Shell脚本+python组合
pythonimport 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脚本
bashpython DL_test.py -h输出结果

运行如下shell脚本bashpython DL_test.py --data_path ./data输出结果
