在Colab运行含argparse的train.py时遇未识别参数错误求助
Colab中argparse参数识别错误的解决方法
问题场景
在Colab平台运行包含argparse参数解析的情感分类训练脚本train.py时,出现参数识别错误,报错提示无法识别Colab内核自动传入的额外参数。
脚本主函数代码
if __name__ == '__main__': torch.cuda.empty_cache() """Parameters""" parser = argparse.ArgumentParser(description = "Emotion Classifier" ) parser.add_argument( "--batch", type=int, help = "batch_size", default = 1) parser.add_argument( "--epoch", type=int, help = 'training epohcs', default = 10) # 12 for iemocap parser.add_argument( "--norm", type=int, help = "max_grad_norm", default = 10) parser.add_argument( "--lr", type=float, help = "learning rate", default = 1e-6) # 1e-5 parser.add_argument( "--sample", type=float, help = "sampling trainign dataset", default = 1.0) # parser.add_argument( "--dataset", help = 'MELD or EMORY or iemocap or dailydialog', default = 'MELD') parser.add_argument( "--pretrained", help = 'roberta-large or bert-large-uncased or gpt2 or gpt2-large or gpt2-medium', default = 'roberta-large') parser.add_argument( "--initial", help = 'pretrained or scratch', default = 'pretrained') parser.add_argument('-dya', '--dyadic', action='store_true', help='dyadic conversation') parser.add_argument('-fr', '--freeze', action='store_true', help='freezing PM') parser.add_argument( "--cls", help = 'emotion or sentiment', default = 'emotion') args = parser.parse_args() logger = logging.getLogger(__name__) streamHandler = logging.StreamHandler() # Add the line below to fix the issue. sys.exit(main())
报错信息
usage: colab_kernel_launcher.py [-h] [--batch BATCH] [--epoch EPOCH] [--norm NORM] [--lr LR] [--sample SAMPLE] [--dataset DATASET] [--pretrained PRETRAINED] [--initial INITIAL] [-dya] [-fr] [--cls CLS] colab_kernel_launcher.py: error: unrecognized arguments: /root/.local/share/jupyter/runtime/kernel-1fba85a1-85fd-4471-a790-9c103c9dcac9.json An exception has occurred, use %tb to see the full traceback. SystemExit: 2 /usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py:3561: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
解决方法
方法1:使用parse_known_args()替代parse_args()
Colab内核会自动传递额外的运行参数,parse_known_args()会忽略未定义的参数,只解析我们自定义的参数。修改代码中的参数解析行:
# 替换原来的 args = parser.parse_args() args, _ = parser.parse_known_args()
方法2:手动传入空参数列表
直接给parse_args()传入空列表,避免读取系统自动传入的额外参数:
# 替换原来的 args = parser.parse_args() args = parser.parse_args([])
方法3:改用命令行方式运行脚本
如果不需要在代码单元格中交互式运行,可以在Colab中用!python命令执行脚本,并手动指定参数,这样不会受到内核额外参数的干扰:
!python train.py --batch 8 --epoch 20 --dataset MELD --pretrained roberta-large
内容的提问来源于stack exchange,提问作者Wahab Al Labib
相关产品推荐
相关产品推荐

