argparse 模块在深度学习的应用(简单易懂)

目录

讲个故事:小Q和大A

1.argparse模块

1.1argparse模块概念与应用

1)创建 ArgumentParser 对象:

2)定义命令行参数:

3)解析命令行参数:

4)使用命令行参数的值:

1.2argparse重要方法

1.2.1ArgumentParser 对象

1.2.2ArgumentParser.add_argument()

2.argparse 模块在深度学习的应用

3.References


讲个故事:小Q和大A

小Q命令行参数是什么?

大A命令行参数是通过命令行(或终端)传递给程序的值,用于配置程序的行为或提供程序所需的输入信息。在许多编程语言中,包括 Python,这些参数可以在程序运行时通过相应的库或模块进行解析和处理。

在命令行中,参数通常以一定的格式出现,例如:

python script.py --input_file data.txt --output_dir results --verbose

在这个例子中,--input_file--output_dir--verbose 都是命令行参数,它们后面跟着相应的值或标志。 

命令行参数值或标志
--input_filedata.txt: 这是一个带有参数值的参数,表示输入文件的名称是 data.txt
--output_dirresults: 同样是一个带有参数值的参数,表示输出目录为 results
--verbose这是一个标志参数,通常表示在程序运行时输出详细的信息,而不需要附加值

总而言之,命令行参数需要在命令行(或终端)使用的参数。

小Q命令行参数的概念我懂了,那么命令行参数究竟该怎么定义呢?

大A参数解析器(Argument Parser)是用于处理命令行参数的工具,它允许你定义和解析命令行输入。在Python中,argparse 是一个python常用的模块,用于创建参数解析器,定义命令行参数,并解析用户输入。


1.argparse模块

1.1argparse模块概念与应用

argparse 模块是 Python 内置的一个用于命令项选项与参数解析的模块,可以让人轻松编写用户友好的命令行接口。通过在程序中定义好我们需要的参数,然后 argparse 将会从 sys.argv 解析出这些参数。argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。

以下是使用argparse模块四个步骤:

1、创建一个解析器对象——创建 ArgumentParser() 对象
2、添加命令行参数——调用 add_argument() 方法添加参数
3、解析命令行参数——使用 parse_args() 解析添加的参数
4、使用命令行参数——使用'对象.参数'的方式调用参数的值


1)创建 ArgumentParser 对象
import argparse
parser = argparse.ArgumentParser(description='Description of your program')

这里创建了一个 ArgumentParser 对象,可以在构造函数中提供程序的描述性文本。 

2)定义命令行参数

使用 add_argument 方法来定义需要的命令行参数。例如:

parser.add_argument('--input_file', type=str, help='Path to input file')
parser.add_argument('--output_dir', type=str, default='output', help='Path to output directory')

这里定义了两个参数,--input_file--output_dir,分别用于指定输入文件的路径和输出目录的路径。

3)解析命令行参数

使用 parse_args 方法解析命令行参数,并得到一个包含用户输入的命名空间(namespace)对象:

args = parser.parse_args()

这里的 args 对象包含了用户提供的命令行参数的值。

4)使用命令行参数的值

通过访问 args 对象的属性来获取命令行参数的值。例如:

input_file_path = args.input_file
output_dir_path = args.output_dir

在这里,input_file_pathoutput_dir_path 分别包含了用户提供的 --input_file--output_dir 参数的值。 

举个栗子:

"""
四个步骤:
1、创建一个解析器对象——创建 ArgumentParser() 对象
2、添加参数——调用 add_argument() 方法添加参数
3、解析参数——使用 parse_args() 解析添加的参数
4、使用参数——使用'对象.参数'的方式调用参数的值
"""
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--learning_rate', type=float, default=0.01, help='Learning rate for the model')
args = parser.parse_args()
print(args.learning_rate)

运行结果: 

在这个例子中,我们定义了一个命令行参数 --learning_rate,它的类型是浮点数,默认值是 0.01。然后我们解析命令行参数,并将结果赋给 args。最后,我们可以通过 args.learning_rate 来访问这个命令行参数的值。

1.2argparse重要方法

1.2.1ArgumentParser 对象

创建一个新的 ArgumentParser 对象。所有的参数都应当作为关键字参数传入。每个参数在下面都有它更详细的描述,但简而言之,它们是:

  • prog - 程序的名称 (默认值: os.path.basename(sys.argv[0]))

  • usage - 描述程序用途的字符串(默认值:从添加到解析器的参数生成)

  • description - 要在参数帮助信息之前显示的文本(默认:无文本)

  • epilog - 要在参数帮助信息之后显示的文本(默认:无文本)

  • parents - 一个 ArgumentParser 对象的列表,它们的参数也应包含在内

  • formatter_class - 用于自定义帮助文档输出格式的类

  • prefix_chars - 可选参数的前缀字符集合(默认值: '-')

  • fromfile_prefix_chars - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值: None

  • argument_default - 参数的全局默认值(默认值: None

  • conflict_handler - 解决冲突选项的策略(通常是不必要的)

  • add_help - 为解析器添加一个 -h/--help 选项(默认值: True

  • allow_abbrev - 如果缩写是无歧义的,则允许缩写长选项 (默认值:True

  • exit_on_error - 决定当错误发生时是否让 ArgumentParser 附带错误信息退出。 (默认值: True)

1.2.2ArgumentParser.add_argument()

定义单个的命令行参数应当如何解析。每个形参都在下面有它自己更多的描述,长话短说有:

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
名称描述
name or flags一个命名或者一个选项字符串的列表例如 foo 或 -f, --foo

action

指明应当如何处理一个参数

'store''store_const''store_true''append''append_const''count''help''version'

choices

将值限制为指定的可选项集合

['foo', 'bar']range(1, 10) 或 Container 实例

const

存储一个常量值

default

当未提供某个参数时要使用的默认值

默认为 None

dest

指定要在结果命名空间中使用的属性名称

help

某个参数的帮助消息

metavar

要在帮助中显示的参数替代显示名称

nargs

参数可被使用的次数

int'?''*' 或 '+'

required

指明某个参数是必需的还是可选的

True 或 False

type

自动将参数转换为给定的类型

intfloatargparse.FileType('w') 或可调用函数

1)name or flags

add_argument() 方法必须知道是要接收一个可选参数,如 -f 或 --foo,还是一个位置参数,如由文件名组成的列表。 因此首先传递给 add_argument() 的参数必须是一组旗标,或一个简单的参数名称。(name or flags 的定义决定了后续命令行参数如何运行)

例如,可以这样创建可选参数:

>>> parser.add_argument('-f', '--foo')

而位置参数可以这么创建:

>>> parser.add_argument('bar')

parse_args()被调用,选项会以 - 前缀识别,剩下的参数则会被假定为位置参数:

>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('-f', '--foo')
>>> parser.add_argument('bar')
>>> parser.parse_args(['BAR'])
Namespace(bar='BAR', foo=None)
>>> parser.parse_args(['BAR', '--foo', 'FOO'])
Namespace(bar='BAR', foo='FOO')
>>> parser.parse_args(['--foo', 'FOO'])
usage: PROG [-h] [-f FOO] bar
PROG: error: the following arguments are required: bar

2)action

ArgumentParser 对象将命令行参数与动作相关联。这些动作可以做与它们相关联的命令行参数的任何事,尽管大多数动作只是简单的向 parse_args() 返回的对象上添加属性。action 命名参数指定了这个命令行参数应当如何处理。供应的动作有:

  • 'store'  - 存储参数的值。这是默认的动作。例如:
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> parser.parse_args('--foo 1'.split())
Namespace(foo='1')
  • 'store_const' - 存储由 const 关键字参数指定的值;请注意 const 关键字参数默认为 None。

'store_const' 动作最常被用于指定某类旗标的可选参数。 例如:

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_const', const=42)
>>> parser.parse_args(['--foo'])
Namespace(foo=42)

除此之外,供应的动作还有'store_true', 'append', 'appeed_const','count', 'help', 'version', 在此就不一一赘述了,有兴趣的同学可以查看action

3)type -- 类型

默认情况下,解析器会将命令行参数当作简单字符串读入。 然而,命令行字符串经常应当被解读为其他类型,例如 float 或 int。 add_argument()的 type 关键字允许执行任何必要的类型检查和类型转换。

如果 type 关键字使用了 default 关键字,则类型转换器仅会在默认值为字符串时被应用。

传给 type 的参数可以是任何接受单个字符串的可调用对象。 如果函数引发了ArgumentTypeError,TypeError,ValueError 异常会被捕获并显示经过良好格式化的错误消息。 其他异常类型则不会被处理。

普通内置类型和函数可被用作类型转换器:

>>> parser = argparse.ArgumentParser(prog='game.py')
>>> parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
>>> parser.parse_args(['rock'])
Namespace(move='rock')
>>> parser.parse_args(['fire'])
usage: game.py [-h] {rock,paper,scissors}
game.py: error: argument move: invalid choice: 'fire' (choose from 'rock',
'paper', 'scissors')

4)help

help 值是一个包含参数简短描述的字符串。 当用户请求帮助时(一般是通过在命令行中使用 -h 或 --help 的方式),这些 help 描述将随每个参数一同显示:

>>> parser = argparse.ArgumentParser(prog='frobble')
>>> parser.add_argument('--foo', action='store_true',
                    help='foo the bars before frobbling')
>>> parser.add_argument('bar', nargs='+',
                    help='one of the bars to be frobbled')
>>> parser.parse_args(['-h'])
usage: frobble [-h] [--foo] bar [bar ...]

positional arguments:
 bar     one of the bars to be frobbled

options:
 -h, --help  show this help message and exit
 --foo   foo the bars before frobbling

5)default

所有选项和一些位置参数可能在命令行中被忽略。add_argument() 的命名参数 default,默认值为 None,指定了在命令行参数未出现时应当使用的值。对于选项, default 值在选项未在命令行中出现时使用:

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', default=42)
>>> parser.parse_args(['--foo', '2'])
Namespace(foo='2')
>>> parser.parse_args([])
Namespace(foo=42)

想了解更多其余参数的请查看add_argument() 方法

2.argparse 模块在深度学习的应用

了解了argparse 模块的概念和应用,下面我们来进一步学习argparse 模块在深度学习的应用。下面定义了一个简单的深度学习模型案例进行演示:

import argparse
import torch
import torch.nn as nn
import torch.optim as optim

class SimpleModel(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(SimpleModel, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x

def train(model, train_data, optimizer, criterion):
    # 训练逻辑
    pass

def main(args):
    # 创建模型
    model = SimpleModel(args.input_size, args.hidden_size, args.output_size)

    # 定义损失函数和优化器
    criterion = nn.CrossEntropyLoss()
    optimizer = optim.Adam(model.parameters(), lr=args.learning_rate)

    # 进行训练
    train(model, args.train_data, optimizer, criterion)

if __name__ == "__main__":
    # 创建参数解析器
    parser = argparse.ArgumentParser(description='Simple Deep Learning Model Training')

    # 添加模型参数
    parser.add_argument('--input_size', type=int, default=10, help='Input size of the model')
    parser.add_argument('--hidden_size', type=int, default=20, help='Hidden size of the model')
    parser.add_argument('--output_size', type=int, default=5, help='Output size of the model')

    # 添加训练参数
    parser.add_argument('--learning_rate', type=float, default=0.001, help='Learning rate for training')
    parser.add_argument('--train_data', type=str, default='train_data.csv', help='Path to training data')

    # 解析命令行参数
    args = parser.parse_args()

    # 调用主函数
    main(args)

在这个例子中,使用了一个简单的前馈神经网络模型 (‘ SimpleModel’) 作为示例。argparse 用于定义模型的输入大小、隐藏层大小、输出大小等超参数。这些参数可以通过命令行输入进行配置,例如:

python train_model.py --input_size 10 --hidden_size 20 --output_size 5 --learning_rate 0.001 --train_data train_data.csv

通过这样的方式,你可以通过命令行输入配置模型的超参数,而无需直接修改代码。

3.References

1.argparse --- 命令行选项、参数和子命令解析器. 官方文档

2.argparse 模块详解

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值