使用InceptionV4时遇SystemExit及TypeError问题求助
问题解决步骤
错误原因分析
第一个SystemExit: 2是因为你开启了num_classes的required=True,但运行时没传入这个必填参数;后来移除required=True但没设默认值,导致num_classes为None,后续代码里int(None)触发TypeError。
正确解决方法
方法1:命令行传参(推荐)
恢复原代码的argparse配置:
ap = argparse.ArgumentParser() ap.add_argument("-g", "--gpus", default=1, type=int, help="# of available GPUs") ap.add_argument("-train", "--train_dir", type=str, default="train/", help="train directory") ap.add_argument("-val", "--val_dir", type=str, default="val/", help="val directory") ap.add_argument("-c", "--checkpoint", type=str, default="no") ap.add_argument("-classes", "--num_classes", type=int, required=True) ap.add_argument("-epochs", "--epochs", type=int, default=1000) ap.add_argument("-steps", "--steps_per_epoch", type=int, default=500) ap.add_argument("-lr", "--learning_rate", type=float, default='1e-3') ap.add_argument("-log", "--log_dir", type=str, default="logs/") args = vars(ap.parse_args()) # 去掉args=[]
然后在命令行运行脚本时,传入你的分类数(比如分类数是10):
python inceptionv4.py --num_classes 10
如果需要修改其他参数,比如训练目录,可一起传入:
python inceptionv4.py -classes 10 -train my_train_data/ -val my_val_data/
方法2:代码内固定默认值
如果不想每次命令行传参,给num_classes设置默认值并移除required=True:
ap.add_argument("-classes", "--num_classes", type=int, default=10) # 替换10为你的实际分类数
然后保留args = vars(ap.parse_args()),这样运行时会自动使用默认的分类数,无需命令行传参。
为什么之前的操作无效
- 加
args=[]会强制argparse不读取任何命令行参数,必填参数缺失自然报错; - 移除
required=True但没设默认值,num_classes会变成None,int(None)无法转换触发类型错误; args是argparse返回的字典,不是列表,用args[6]索引取值完全错误,必须用键名args["num_classes"]。
内容的提问来源于stack exchange,提问作者Syuuuu
相关产品推荐
相关产品推荐

