tf.app.flags主要用于处理命令行参数的解析工作,可以理解为一个封装好了的argparse包(argparse是一种结构化的数据存储格式,类似于Json、XML)
1.导入了argparse
包
2.创建一个解析器对象,argparse
中的解析器类是ArgumentParser
3.定义_FlagValue类
要处理命令行参数,就要用解析器类_global_parser里的方法来解析,这里使用了parse_known_args()
函数
函数返回的”result“是参数解析完的数据,而”unparsed“是未被解析的参数list。
将命令行传入的命令和解析出来的数据以字典的形式放到__dict__
的['_flags']
这个字典中,方便后续调用。
4.设置和获得解析的命令行参数,setattr/getattr
获取参数,除了要判断参数是否在字典里的基本要求外,还要判断有没有解析过参数
如果没有就运行_parse_flags
解析参数,如果有,那么self.__dict__[‘__parsed’]
就会为True。
5.实例化——FlagValues类
6.定义_define_helper方法
_define_helper
函数中调用了_global_parser.add_argument
完成对命令行参数的添加(传入flag_name,default_value,docstring,flagtype参数)
添加参数使用的是解析器类_global_parser
的方法
第一个参数是‘--’+flag_name这个表示定义的命令行参数使用时必须以‘--’开头
第二个参数default_value
是参数的默认值
第三个参数docstring
保存帮助信息
第四个参数表示限定了赋予命令行参数数据的类型
7. DEFINE_string方法
由于_define_helper()
最后一个type参数是str,说明DEFINE_string()
限定了可选参数输入必须是string
8. mark_flags_as_required
方法
在程序运行前先将某些命令行参数加入到”必备参数“(__required_flags
)的字典中,以判断解析完的参数是否满足这些必备要求
mark_flags_as_required
方法会调用mark_flag_as_required
方法,来将当前传入的参数加入到__required_flags
字典中(_add_required_flag
方法)
9. 使用tensorflow
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
if __name__ == '__main__':
tf.app.run()