转自博主:非常感谢hhycsdn博主
在tensorflow程序中经常看到如下代码:
if __name__ == '__main__':
tf.app.run()
其中if name == ‘main’:的意思是当别的程序调用此程序模块的时候不运行main函数;当直接运行此程序模块的时候,会运行main函数。
tf.app.run()分为两个部分,看源码:
def run(main=None, argv=None):
"""Runs the program with an optional 'main' function and 'argv' list."""
# Define help flags.
_define_help_flags()
# Parse known flags.
argv = flags.FLAGS(_sys.argv if argv is None else argv, known_only=True)
main = main or _sys.modules['__main__'].main
# Call the main function, passing through any arguments
# to the final program.
_sys.exit(main(argv))
其中argv = flags.FLAGS(_sys.argv if argv is None else argv, known_only=True)
就是解析命令行参数args。第二部分是运行main()函数。
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)
两种调用方式:
方式一:
python textheheda.py (我这里随便新建的py文件)
结果如下:
方式二:
python app_flags.py --train_data_path ./test.py --max_sentence_len 100 --embedding_size 100 --learning_rate 0.05
其实就是不使用默认值,给参数赋值。