TensorFlow中tf.app.flags命令行参数解析模块详解

Jasper
Jasper
发布时间:2026-10-16 | 14人浏览过
原创

本文介绍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函数,并解析命令行参数!

以上为个人经验分享,希望能为大家提供参考,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表