这个东西,用于从命令行读取参数。
用法:
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可省略。