TensorFlow tf.app&tf.app.flags用法介紹

TensorFlow tf.app argparse 

tf.app.flags

下面介紹 tf.app.flags.FLAGS的使用,主要是在用命令列執行程式時,需要傳些引數,其實也就可以理解成對argparse庫進行的封裝,示例程式碼如下

  1. #coding:utf-8 


  2. # 學習使用 tf.app.flags 使用,全域性變數 

  3. # 可以再命令列中執行也是比較方便,如果只寫 python app_flags.py 則程式碼執行時預設程式裡面設定的預設設定 

  4. # 若 python app_flags.py --train_data_path <絕對路徑 train.txt> --max_sentence_len 100 

  5. # --embedding_size 100 --learning_rate 0.05 程式碼再執行的時候將會按照上面的引數來執行程式 


  6. import tensorflow as tf 


  7. FLAGS = tf.app.flags.FLAGS 


  8. # tf.app.flags.DEFINE_string("param_name", "default_val", "description") 

  9. tf.app.flags.DEFINE_string("train_data_path", "/desktop/train.txt", "training data dir") 

  10. tf.app.flags.DEFINE_string("log_dir", "./logs", " the log dir") 

  11. tf.app.flags.DEFINE_integer("max_sentence_len", 80, "max num of tokens per query") 

  12. tf.app.flags.DEFINE_integer("embedding_size", 50, "embedding size") 


  13. tf.app.flags.DEFINE_float("learning_rate", 0.001, "learning rate") 



  14. def main(unused_argv): 

  15. train_data_path = FLAGS.train_data_path 

  16. print("train_data_path", train_data_path) 

  17. print("*" * 30) 

  18. max_sentence_len = FLAGS.max_sentence_len 

  19. print("max_sentence_len", max_sentence_len) 

  20. print("*" * 30) 

  21. embdeeing_size = FLAGS.embedding_size 

  22. print("embedding_size", embdeeing_size) 

  23. print("*" * 30) 

  24. abc = tf.add(max_sentence_len, embdeeing_size) 


  25. init = tf.global_variables_initializer() 


  26. with tf.Session() as sess: 

  27. sess.run(init) 

  28. print("abc", sess.run(abc)) 


  29. # 使用這種方式保證了,如果此檔案被其他檔案 import的時候,不會執行main 函式 

  30. if __name__ == '__main__': 

  31. tf.app.run() # 解析命令列引數,呼叫main 函式 main(sys.argv) 



兩種呼叫方式:

方式一:

  1. python tf_app_flag.py 

結果如下:

方式二:

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


tf.app.run()

該函式一般都是出現在這種程式碼中:

  1. if __name__ == '__main__': 

  2. tf.app.run() 

上述第一行程式碼表示如果當前是從其它模組呼叫的該模組程式,則不會執行main函式!而如果就是直接執行的該模組程式,則會執行main函式。

具體第二行的功能從原始碼開始分析,原始碼如下:

flags_passthrough=f._parse_flags(args=args)這裡的parse_flags就是我們tf.app.flags原始碼中用來解析命令列引數的函式。所以這一行就是解析引數的功能;

下面兩行程式碼也就是tf.app.run的核心意思:執行程式中main函式,並解析命令列引數!


參考:

MARSGGBO♥原創







2018-8-5