TensorFlow中tf.app.flags命令行参数解析模块详解
本文介绍TensorFlow中tf.app.flags模块的使用方法,该模块功能类似Python的argparse。通过示例代码展示如何定义字符串、整数和浮点型参数,并解析命令行输入。同时深入分析tf.app.run()的执行流程,揭示其调用main函数及解析参数的底层逻辑,帮助开发者理解并正确使用该模块。
tf.app.flags命令行参数解析模块
在讨论命令行参数解析时,Python标准库中的argparse模块是绕不开的话题,具体用法可参考相关文档。
在查阅TensorFlow相关工程源码时,经常能看到tf.app.flags模块的应用。它与Python原生的argparse模块功能相似,用于处理命令行输入。
以下通过具体代码实例进行说明。新建一个名为test_flags.py的文件,内容如下:
#coding:utf-8
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", "/home/feige", "training data dir")
tf.app.flags.DEFINE_string("log_dir", "./logs", " the log dir")
tf.app.flags.DEFINE_integer("train_batch_size", 128, "batch size of train data")
tf.app.flags.DEFINE_integer("test_batch_size", 64, "batch size of test data")
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)
train_batch_size = FLAGS.train_batch_size
print("train_batch_size", train_batch_size)
test_batch_size = FLAGS.test_batch_size
print("test_batch_size", test_batch_size)
size_sum = tf.add(train_batch_size, test_batch_size)
with tf.Session() as sess:
sum_result = sess.run(size_sum)
print("sum_result", sum_result)
# 使用这种方式保证了,如果此文件被其他文件 import的时候,不会执行main 函数
if __name__ == '__main__':
tf.app.run() # 解析命令行参数,调用main 函数 main(sys.argv)上述代码已包含详细注释,此处不再重复解释。
该文件的调用示例及运行结果如下所示

若需修改默认参数值,只需在命令行传入自定义参数即可;若希望全部使用默认值,则直接运行该Python文件即可。
读者可能对tf.app.run()的作用存在疑问,前述注释中已有简要说明,但要彻底理解其运行原理,
还需查阅其源代码实现。
def run(main=None, argv=None):
"""Runs the program with an optional 'main' function and 'argv' list."""
f = flags.FLAGS
# Extract the args from the optional `argv` list.
args = argv[1:] if argv else None
# Parse the known flags from that list, or from the command
# line otherwise.
# pylint: disable=protected-access
flags_passthrough = f._parse_flags(args=args)
# pylint: enable=protected-access
main = main or sys.modules['__main__'].main
# Call the main function, passing through any arguments
# to the final program.
sys.exit(main(sys.argv[:1] + flags_passthrough))flags_passthrough=f._parse_flags(args=args)这里的_parse_flags就是我们tf.app.flags源码中用来解析命令行参数的函数。
因此,这一行代码实现了参数解析的功能;
接下来的两行代码构成了tf.app.run的核心逻辑:执行程序中的main函数,并解析命令行参数!
以上为个人经验分享,希望能为大家提供参考,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













