TensorFlow tf.app&tf.app.flags用法介绍_Tensorflow

作  者:​marsggbo

Tensorflow       tf.app  &  tf.app.flags    用法介绍


1.     tf.app.flags

下面介绍 tf.app.flags.FLAGS的使用,主要是在用命令行执行程序时,需要传些参数,其实也就可以理解成对argparse库进行的封装,示例代码如下

#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)


两种调用方式:

方式一:

  1. python tf_app_flag.py

结果如下:

TensorFlow tf.app&tf.app.flags用法介绍_Tensorflow_02

方式二:

python app_flags.py --train_data_path ./test.py --max_sentence_len 100 --embedding_size 100 --learning_rate 0.05

TensorFlow tf.app&tf.app.flags用法介绍_Tensorflow_03

 3.         tf.app.run()

该函数一般都是出现在这种代码中:

if __name__ == '__main__': 
tf.app.run()

上述第一行代码表示如果当前是从其它模块调用的该模块程序,则不会运行main函数!而如果就是直接运行的该模块程序,则会运行main函数。



具体第二行的功能从源码开始分析,源码如下:

TensorFlow tf.app&tf.app.flags用法介绍_python_04


flags_passthrough=f._parse_flags(args=args)这里的parse_flags就是我们tf.app.flags源码中用来解析命令行参数的函数。所以这一行就是解析参数的功能;

下面两行代码也就是tf.app.run的核心意思:执行程序中main函数,并解析命令行参数!

参考:

----------------------------------------------------------------------------------------------------