解决python中argparse模块add_argument问题 和 tf.app.flags

本文介绍如何使用argparse和tf.app.flags模块从命令行读取参数,包括参数的定义、引用和解析过程,以及在PyCharm中直接运行命令行参数的方法。

这个东西,用于从命令行读取参数。

用法:

import argparse
parser=argparse.ArgumentParser()
parser.add_argument("echo",help="echo the string")
args=parser.parse_args()
print args.echo

以yolov3中的convert.py为例

在命令行键入

如果不想在命令行中用,我在pycharm中打开,直接可以run。

nargs=‘?’ 表示读入一个参数或者没有。

default=‘’ 表示没有给参数的默认值。

然后直接run就行,不用调命令行。

ps:pycharm里也有terminal,dangdangdang~

把命令输入到这跟终端是一样的

终于知道怎么弄了,很开心~加油!




import argparse
from config import cfg


parser = argparse.ArgumentParser(description='training')
parser.add_argument('-i', '--max-epoch', type=int, nargs='?', default=160,
                    help='max epoch')
parser.add_argument('-n', '--tag', type=str, nargs='?', default='default',
                    help='set log tag')
parser.add_argument('-b', '--single-batch-size', type=int, nargs='?', default=2,
                    help='set batch size')
parser.add_argument('-l', '--lr', type=float, nargs='?', default=0.001,
                    help='set learning rate')
parser.add_argument('-al', '--alpha', type=float, nargs='?', default=1.0,
                    help='set alpha in los function')
parser.add_argument('-be', '--beta', type=float, nargs='?', default=10.0,
                    help='set beta in los function')
parser.add_argument('--output-path', type=str, nargs='?',
                    default='./predictions', help='results output dir')
parser.add_argument('-v', '--vis', type=bool, nargs='?', default=False,
                    help='set the flag to True if dumping visualizations')
args = parser.parse_args()

print(args.max_epoch)

注意:

1.  在parser.add_argument('-i', '--max-epoch', type=int , nargs='?', default=160, help='要提示的内容')

max-epoch 之间是  - - - - - - ,但在下面引用的时候 ,要写下划线 _   max_epoch才对。

2.  -i  在终端输入时等同于  --max-epoch 这里也是 - - - - - - ,相当于简写。

3. 引用  就写  args.max_epoch   args.tag 之类的。




 tf.app.flags

#coding:utf-8 
  
# 学习使用 tf.app.flags 使用,全局变量 
# 可以再命令行中运行也是比较方便,如果只写 python app_flags.py 则代码运行时默认程序里面设置的默认设置 
# 若 python app_flags.py --train_data_path <绝对路径 train.txt> --max_sentence_len 100 
#    --embedding_size 100 --learning_rate 0.05  代码再执行的时候将会按照上面的参数来运行程序 
  
import tensorflow as tf 
  
FLAGS = tf.app.flags.FLAGS 
  
# tf.app.flags.DEFINE_string("param_name", "default_val", "description") 
tf.app.flags.DEFINE_string("train_data_path", "/desktop/train.txt", "training data dir") 
tf.app.flags.DEFINE_string("log_dir", "./logs", " the log dir") 
tf.app.flags.DEFINE_integer("max_sentence_len", 80, "max num of tokens per query") 
tf.app.flags.DEFINE_integer("embedding_size", 50, "embedding size") 
  
tf.app.flags.DEFINE_float("learning_rate", 0.001, "learning rate") 
  
  
def main(unused_argv): 
    train_data_path = FLAGS.train_data_path 
    print("train_data_path", train_data_path) 
    print("*" * 30) 
    max_sentence_len = FLAGS.max_sentence_len 
    print("max_sentence_len", max_sentence_len) 
    print("*" * 30) 
    embdeeing_size = FLAGS.embedding_size 
    print("embedding_size", embdeeing_size) 
    print("*" * 30) 
    abc = tf.add(max_sentence_len, embdeeing_size) 
  
    init = tf.global_variables_initializer() 
  
    with tf.Session() as sess: 
        sess.run(init) 
        print("abc", sess.run(abc)) 
  
# 使用这种方式保证了,如果此文件被其他文件 import的时候,不会执行main 函数 
if __name__ == '__main__': 
    tf.app.run()   # 解析命令行参数,调用main 函数 main(sys.argv) 
 
 



4.对比记忆

1.
import argparse
 
parser=argparse.ArgumentParse()
# 创建对象

parser.add_argument('-i','--max-epoch',type= int ,nargs= '?', default=32, help='')
# 传入参数

args = parser.parse_args()

args.max_epoch
# 参数引用


2. 
import tensorflow as tf

FLAGS= tf.app.flags.FLAGS

tf.app.flags.DEFINE_string("name", value , "help")
tf.app.flags.DEFINE_float()
tf.app.flags.DEFINE_boolean()
tf.app.flags.DEFINE_integar()

# 参数引用
FLAGS.name

if __name__ == '__main__':

tf.app.run(main)
# 解析tensorflow传入的命令行参数,并调用 main 函数,main可省略。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值