argparse(argument parse解析)
[教程]https://datawhalechina.github.io/thorough-pytorch/第六章/6.6 使用argparse进行调参.html
- 在深度学习中,简便的超参数的修改和保存是非常重要的一步。尤其是在服务器上跑模型时。
- argparse是用来解析python命令行的标准模块,是python标准库的一部分,内置于python,不需要安装。
- 这个库可以让我们直接在命令行中就可以向程序中传入参数。我们可以使用python file.py来运行python文件。而argparse的作用就是将命令行传入的其他参数进行解析、保存和使用。例如我们的命令行输入参数可以是python file.py --lr 1e-4 --batch_size 32.
argparse的使用
可以归纳为三个步骤
- 1.创建ArgumentParser()对象
- 2.调用add_argument()方法添加函数
- 3.使用parse_args()解析参数
# demo.py
import argparse
# 创建ArgumentParser()对象
parser = argparse.ArgumentParser()
# 添加参数
parser.add_argument('--output', action='store_true', help='shows output')
parser.add_argument('--lr', type=float, default=3e-5, help='learning rate')
parser.add_argument('--batch_size', type=int, required=True, help='input batch size')
# 使用parse_args()解析函数
args = parser.parse_args()
if args.output:
print("This is some output:")
print(f"learning rate:{args.lr}")
在命令行输入以下命令
python demo.py --output --lr 3e-4 --batch_size 32
可得到如下输出:
其中,如果在命令行中加入了output这个命令,则会有打印输出,如果不加入这个命令,只有lr\batch_size等相关参数命令,则不会打印输出。
同时,从命令行输入的参数可以将原先设定好的参数或者默认参数覆盖掉。
最后,argparse的参数主要分为可选择参数和必选参数。可选参数就与lr参数类似,未输入的情况下会设置为默认值(有default)。必选参数与batch_size类似,我们必须传入参数,否则会报错(有required)。
其他方法
为了使代码更加简洁和模块化,也可以将有关超参数的操作写在config.py,然后在train.py或者其他文件导入就可以。
PS
- 1.argparse提供了一种便捷的管理超参数的方式,而在一些大型的深度学习项目中,人们也会使用它json、dict、yaml等文件格式去保存超参数进行训练。
- 2.args.xxx变量未提前设置是否可以使用的问题
import argparse
parser = argparse.ArgumentParser()
args = parser.parse_args()
# 此时 args 是一个空的命名空间对象
# 可以直接为其添加属性
args.n_gpu = 2
print(args.n_gpu) # 输出 2