TensorFlow中tf.app.flags的目的是什么?

fly*_*217 107 python tensorflow

我正在阅读Tensorflow中的一些示例代码,我发现以下代码

flags = tf.app.flags
FLAGS = flags.FLAGS
flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.')
flags.DEFINE_integer('max_steps', 2000, 'Number of steps to run trainer.')
flags.DEFINE_integer('hidden1', 128, 'Number of units in hidden layer 1.')
flags.DEFINE_integer('hidden2', 32, 'Number of units in hidden layer 2.')
flags.DEFINE_integer('batch_size', 100, 'Batch size.  '
                 'Must divide evenly into the dataset sizes.')
flags.DEFINE_string('train_dir', 'data', 'Directory to put the training data.')
flags.DEFINE_boolean('fake_data', False, 'If true, uses fake data '
                 'for unit testing.')
Run Code Online (Sandbox Code Playgroud)

tensorflow/tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py

但我找不到任何关于这种用法的文档tf.app.flags.

我发现这个标志的实现在 tensorflow/tensorflow/python/platform/default/_flags.py

显然,这tf.app.flags在某种程度上用于配置网络,那么为什么它不在API文档中呢?谁能解释一下这里发生了什么?

mrr*_*rry 107

tf.app.flags模块目前是python-gflags的 一个薄包装器,因此该项目文档是如何使用它的最佳资源argparse,它实现了该功能的一个子集python-gflags.

请注意,此模块目前打包为编写演示应用程序的便利,并且在技术上不是公共API的一部分,因此将来可能会更改.

我们建议您使用argparse您喜欢的库或任何库来实现自己的标记解析.

编辑:tf.app.flags模块实际上并未使用python-gflags,但它使用类似的API.

  • "打包作为编写演示应用程序的便利,并且在技术上不是公共AP的一部分"......有点奇怪,几乎每个教程都使用它,但没有相关的文档.导致充足的混乱. (76认同)
  • 对于tensorflow中的所有内容,文档都不是文档问题. (5认同)
  • `tf.app.run`也不是公共API的一部分吗?因为它依赖于`tf.app.flags`并且它有公共文档(https://www.tensorflow.org/api_docs/python/tf/app/run),所以我认为它是公开的并且受支持.如果建议使用`argparse`,你能否提供一个简单的例子,推荐使用`argparse`的方法? (3认同)
  • 有关如何使用argparse将参数传递给TensorFlow模型以及如何将其捆绑到云模块的Python模块中的示例,请参阅[task.py](https://github.com/GoogleCloudPlatform/training-data [taxifare]中的-analyst/blob/master/courses/machine_learning/cloudmle/taxifare/trainer/task.py)(https://github.com/GoogleCloudPlatform/training-data-analyst/tree/master/courses/machine_learning/cloudmle/taxifare)模块,[培训 - 数据 - 分析师课程资料](https://github.com/GoogleCloudPlatform/training-data-analyst/tree/master/courses/machine_learning/cloudmle/)的一部分. (2认同)

小智 32

tf.app.flags模块是Tensorflow提供的功能,用于为Tensorflow程序实现命令行标志.例如,您遇到的代码将执行以下操作:

flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.')
Run Code Online (Sandbox Code Playgroud)

第一个参数定义标志的名称,第二个参数定义默认值,以防在执行文件时未指定标志.

因此,如果您运行以下内容:

$ python fully_connected_feed.py --learning_rate 1.00
Run Code Online (Sandbox Code Playgroud)

然后学习率设置为1.00,如果未指定标志,则保持0.01.

正如本文所述,文档可能不存在,因为这可能是Google内部需要开发人员使用的内容.

此外,正如帖子中所提到的,使用Tensorflow标志而不是其他Python包提供的标志功能有几个优点,例如argparse特别是在处理Tensorflow模型时,最重要的是您可以向代码提供Tensorflow特定信息,例如信息关于使用哪个GPU.


Ahm*_*med 7

在Google,他们使用标记系统来设置参数的默认值。它类似于argparse。他们使用自己的标记系统,而不是argparse或sys.argv。

资料来源:我以前在那里工作过。


小智 5

使用时tf.app.run(),可以使用方便地在线程之间传输变量tf.app.flags。请参阅此内容以进一步使用tf.app.flags


小智 5

多次尝试后,我发现这可以打印所有 FLAGS 键以及实际值 -

for key in tf.app.flags.FLAGS.flag_values_dict():

  print(key, FLAGS[key].value)
Run Code Online (Sandbox Code Playgroud)

  • 你是说 FLAGS[key] (3认同)