Python-argparse库基本使⽤⽅法和add_argument()参数详
解
简单介绍
官⽹:
argparse库是⼀个存储参数库,可以⽤来进⾏模型训练过程中的参数保存作为⼀个整体,以便于使⽤和更改。内容是依据:python 3.6.10版本写的。
创建
import argparse
parser = argparse.ArgumentParser(description='') #创建对象
添加参数
parser.add_argument() ##添加单个命令参数
args = parser.parse_args() ##使得参数创建并⽣效
(1)创建 ArgumenParser 对象
class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=
[], formatter_class=argparse.HelpFormatter, prefix_chars='-
', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True) 1->prog:the name of program 程序的名称 (默认:sys.argv[0])
2->usage:描述程序⽤法的字符串(默认:在利⽤add_argument时产⽣)
3->descripition:在使⽤ gragument help之前的说明⽂字 (默认:None)
4->epilog:在使⽤argument help后显⽰的⼀段⽂字(默认:None)[3-4命令类似于程序的说明书]
5->partents:⼀个列表形式的ArgumentParser对象,这个对象中的参数列表也要包含其中
6->formatter_class:⽤于⾃定义"帮助"输出的类
7->prefix_chars:前缀可选参数的字符集(默认值:' - ')
8->fromfile_prefix_chars:从前缀⽂件中读取的增加的可选参数的字符集(默认值:None)
9->argument_default:参数的全局默认值(默认值:None)
10->conflict_handler:解决选择冲突的⽅法(通常不需要)
11->add_help:是否允许向解析器添加-h/--help选项(默认值:True)
12->allow_abbrev:是否允许某些长字符串的选项⽤缩写代替,前提是缩写是明确的(默认值:True)
(2)add_argument() ⽅法
ArgumentParser.add_argument(name [, action][, nargs][, const][, default][, type][, choices][, required][, help] [, metavar][, dest])
有⼀些参数没有介绍,有两种情况:1,没理解 怕误导 2,不想写(-,-我好任性)1->name or flags:位置参数或者可选参数名称,如foo 或者 -foo,--foo
位置参数是按照输⼊的顺序赋值。可选参数是经过命令才会输⼊的。
例⼦:
import argparse
parser = argparse.ArgumentParser(description='') #创建对象
parser.add_argument('test',type=int) ##添加单个命令参数
parser.add_argument('test_1',type=float) ##type是输⼊的指定类型
parser.add_argument('-test_2','-i',type=float,default=2) ##dafault在没有命令输⼊时的默认值
## -test_2 命令和 -i 命令相同
#parser.add_argument('-') ##添加单个命令参数
args = parser.parse_args() ##使得参数创建并⽣效
st_1)
st_2)
图:
2->action: 命令⾏遇到参数时的动作,默认值是 store.
(1)action='store'表⽰存储参数值
(2)action='store_const',表⽰赋值为const
parser.add_argument('-test',action='store_const',const=12)
st)
#action='store_const' 不能与type⼀起使⽤
命令⾏:python untitled.py -test
output:12
命令⾏:python untitled.py -test 13 #报错
(3)action= 'store_true' or 'stror_false'
这种情况参考这篇博客:
(4)action='append' :将多次输⼊的参数值保存到⼀个list中。
parser.add_argument('-test',action='append')
st)
(5)action='append_const' :类似于append使⽤,这次是使⽤const值,⽽不是输⼊给定。
parser.add_argument('-test',action='append_const',const=1)
parser.add_argument('-int',action='append_const',const=12.3)
print(args)
(6)action='count' :存储遇到参数命令的次数 ;
parser.add_argument('-test',action='count')
print(args)
(7)action='help'; action='version' 感觉作⽤不⼤,有需要看官⽹。
3->nargs:命令⾏参数的数量
在1->name or flag的例⼦可以看出,命令⾏传⼊的参数默认都是1,这个参数可以指定传⼊的参数个数。
nargs有以下⼏种⽅式:
(1)nargs=N(N 是⼀个⼤于等于1的整数)
parser.add_argument('test',type=int,nargs=2) ##该参数可以有两个输⼊
st)
(2)nargs='?'(允许不指定参数,利⽤const中的常量给予值)
parser.add_argument('-test',type=int,const=10,nargs='?')
#允许不输⼊(也可以输⼊1个值)
st)
注意:上⾯的情况和default参数是不同的,default可以允许 ‘python untitled1.py’ 输⼊,但是‘python untitled1.py -test’是不允许的,在未设置nargs参数时。
还有其他⼏种参数类型,nargs='*'; nargs='+' ; nargs='argparse.REMAINDER。不写了,看官⽹把。
4->const:在action或者nargs选项中设置的常量
const与action和nargs配合使⽤。与action配合,看2->action='store_const'。与nargs配合看3->nargs='?'。
5->default:在没有参数输⼊时,默认输⼊值(具体看1->name or flag 中的例⼦)
6->type:命令⾏参数的类型(可看1->name or flag 中的例⼦)
7->choices:允许的参数集合
在1->name or flag 的例⼦可以看出,命令⾏只约定了传⼊类型,并没有约定传⼊的值,这个参数可以约定传⼊值。
parser.add_argument('test',type=int,choices=[1,3,5,7,9])
##约定只能传⼊1,3,5,7,9
st)
8->required:是否可以省略命令⾏选项(仅限可选类型)(默认值为True)
parser.add_argument('-test',type=int,default=10,required=True)
##required 规定-test参数是否可以省略
args = parser.parse_args() ##使得参数创建并⽣效
st)
从上图可以看出,如果设置了required=True是没有办法按照默认值,去使⽤-test参数的,默认值情况可以见1中的例⼦。
9->help:帮助简单的描述
10->metavar:参数使⽤信息名称(A name for the argument in usage messages)(没怎么看懂)
11->dest:命令的别称
parser.add_argument('-test',type=int,dest='a')
# dest -test的别称
print(args.a)
#等价于st)
(3)总结
详细总结argparse库,是因为看过斯cs224N的课程,⾥⾯有⼀些作业,是利⽤argparse去验证填充的代码部分是否可以通过验证。除了这个⽤处之外,github上有⼀些⼤⽜是⽤这个库来存储训练模型使⽤的各种参数的,⽐如batch_size,epoch等参数然后调⽤的train 的时候就直接调⽤args就可以了⽐较⽅便,也便于统⼀更改某些参数。下⾯举个简单的例⼦:
利⽤ argparse 存参数
import argparse
def parameter():
parser = argparse.ArgumentParser(description='TextCNN model parameter ')
parser.add_argument('-batch_size',default=10,help='the train batch size')python怎么读取py文件
parser.add_argument('-epoch',default=5,help='the time need train')
parser.add_argument('-learing_rate',default=1e-3)
parser.add_argument('-embed_size',default=100,help='the word dimensionality')
parser.add_argument('-output_size',default=2)
parser.add_argument('-k',default=10,help='the cross validation size')
parser.add_argument('-dropout_rate',default=0.1,help='dropout layer')
args = parser.parse_args()
return args
加载函数,放到模型和训练模型中去⽤。
from untitled1 import parameter
import torch
as nn
from torch.utils.data import DataLoader,Dataset
functional as F
args = parameter() #参数
x = torch.rand(100,bed_size) #100个句⼦,25个词,embed_size
label = [0] *50 +[1]*50
label = sor(label,dtype=torch.long)
class DataSet(Dataset):
def __init__(self,X,label):
self.x_data = X
self.y_data = label
self.len = len(label)
def __getitem__(self,index):
return self.x_data[index],self.y_data[index]
def __len__(self):
return self.len
class textCNN(nn.Module):
def __init__(self,words_num):
super(textCNN, self).__init__()
self.words_num = words_num
self.class_num = args.output_size #args
self.drop_rate = args.dropout_rate
nn.Conv2d(1,3,(bed_size)),
nn.BatchNorm2d(3)) ###in_channels, out_channels, kernel_size
nn.Conv2d(1,3,(bed_size)),
nn.BatchNorm2d(3))
nn.Conv2d(1,3,(bed_size)),
nn.BatchNorm2d(3))
self.max_pool1 = nn.MaxPool1d(5)
self.max_pool2 = nn.MaxPool1d(4)
self.max_pool3 = nn.MaxPool1d(3)
self.dropout = nn.Dropout(self.drop_rate)
self.linear = nn.Linear(48,self.class_num) ##后⾯算出来的
# 3 -> out_channels 3 ->kernel_size 1 ->max_pool
def forward(self,sen_embed): #(batch,max_len,embed_size)
sen_embed = sen_embed.unsqueeze(1) #(batch,in_channels,max_len,embed_size)
conv1 = F.v1(sen_embed)) # ->(batch_size,out_channels,output.size,1) conv2 = F.v2(sen_embed))
conv3 = F.v3(sen_embed))
conv1 = torch.squeeze(conv1,dim=3)
conv2 = torch.squeeze(conv2,dim=3)
conv3 = torch.squeeze(conv3,dim=3)
x1 = self.max_pool1(conv1)
x2 = self.max_pool2(conv2)
x3 = self.max_pool3(conv3) ##batch_size,out_channel,18
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论