Python argparse报错Too few arguments,求训练脚本问题排查方法
解决Train.py运行时的"too few arguments"错误
这个问题其实很好定位——你的脚本里csv_path是一个必填的位置参数(没有加--前缀),但你运行Train.py的时候没有传入这个参数,所以脚本才会提示参数不足。
问题原因拆解
先看你的parse_args()代码:
def parse_args(): parser = argparse.ArgumentParser(description='Simple training script for object detection from a CSV file.') parser.add_argument('csv_path', help='Path to CSV file') # 这是必填位置参数 parser.add_argument('--weights', help='Weights to use for initialization (defaults to ImageNet).', default='imagenet') parser.add_argument('--batch-size', help='Size of the batches.', default=1, type=int) return parser.parse_args()
这里的csv_path没有--前缀,属于Python argparse里的位置必填参数,脚本运行时必须在命令行里明确指定这个参数的值,完全不能省略。你运行时没传这个路径,自然就触发了错误。
解决方法
只需要在运行命令里加上你的CSV文件路径就行,比如:
python Train.py /path/to/your/training_data.csv
如果需要同时指定其他可选参数(比如自定义权重或调整batch大小),可以这样写:
python Train.py /path/to/your/training_data.csv --weights my_custom_weights.h5 --batch-size 8
额外小提示
如果想把csv_path改成可选参数(比如给个默认路径),可以修改代码给它加上--前缀并设置default值:
parser.add_argument('--csv-path', help='Path to CSV file', default='./default_train.csv')
不过从你的脚本描述来看,核心功能就是基于CSV做目标检测训练,所以保持它作为必填参数会更合理,避免用户忘记指定数据源。
内容的提问来源于stack exchange,提问作者Wiliam
相关产品推荐
相关产品推荐

