1. 程式人生 > >tf.app.flags和tf.app.run的使用

tf.app.flags和tf.app.run的使用

tf.app.flagstf.app.run的使用

tf.app.flags主要用於處理命令列引數的解析工作,其實可以理解為一個封裝好了的argparse包(argparse是一種結構化的資料儲存格式,類似於JsonXML)。

 

我們通過tf.app.flags來呼叫這個flags.py檔案,這樣我們就可以用flags.DEFINE_interger/float()來新增命令列引數,而FLAGS=flags.FLAGS可以例項化這個解析引數的類從對應的命令列引數取出引數。
新建test.py檔案,並輸入如下程式碼,程式碼的功能是建立幾個命令列引數,然後把命令列引數輸出顯示

import tensorflow as tf  

flags = tf.app.flags
flags.DEFINE_string('data_dir', '/tmp/mnist', 'Directory with the MNIST data.')
flags.DEFINE_integer('batch_size', 5, 'Batch size.')
flags.DEFINE_integer('num_evals', 1000, 'Number of batches to evaluate.')
FLAGS = flags.FLAGS

print(FLAGS.data_dir, FLAGS.batch_size, FLAGS.num_evals)

 

·  在命令列中輸入test.py -h就可以檢視幫助資訊,也就是Directory with the MNIST data.,Batch size和Number of batches to evaluate這樣的訊息。

·  在命令列中輸入test.py --batchsize 10就可以將batch_size的值修改為10!



tf.app.run()

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

import tensorflow as tf



flags = tf.flags

flags.DEFINE_string('str_name', 'hjd', 'str_vale')

flags.DEFINE_integer('int_name', 200, 'int_value')

flags.DEFINE_bool('bool_name', False, 'bool_value')

flags = flags.FLAGS





#必須帶引數,否則:'TypeError: main() takes no arguments (1 given)';

#main的引數名隨意定義,無要求

def main(agr_123):

    print(flags.str_name)

    print(flags.int_name)

    print(flags.bool_name)



if __name__ == '__main__':

    tf.app.run()#執行main函式

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