我正在阅读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.')
tensorflow/tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py
中的
但我无法找到有关此tf.app.flags
用法的任何文档。
我发现这个标志的实现在
tensorflow/tensorflow/python/platform/default/_flags.py
显然,这个tf.app.flags
以某种方式用于配置网络,那么为什么它不在API文档中呢?谁能解释一下这里发生了什么?
答案 0 :(得分:97)
tf.app.flags
模块目前是围绕 python-gflags的瘦包装器,因此documentation for that project是如何使用它的最佳资源 argparse
,实现python-gflags
中的功能子集。
请注意,此模块目前打包为编写演示应用程序的便利,从技术上讲,它不是公共API的一部分,因此将来可能会发生变化。
我们建议您使用argparse
或您喜欢的任何库来实现自己的标记解析。
编辑 tf.app.flags
模块实际上并未使用python-gflags
实现,但它使用了类似的API。
答案 1 :(得分:18)
tf.app.flags
模块是Tensorflow提供的功能,用于为Tensorflow程序实现命令行标志。例如,您遇到的代码将执行以下操作:
flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.')
第一个参数定义标志的名称,第二个参数定义默认值,以防执行文件时未指定标志。
因此,如果您运行以下内容:
$ python fully_connected_feed.py --learning_rate 1.00
然后将学习率设置为1.00,如果未指定该标志,则将保持0.01。
如in this article所述,文档可能不存在,因为这可能是Google内部要求开发人员使用的文档。
此外,正如文章中提到的,使用Tensorflow标志比其他Python软件包(例如argparse
)提供的标志功能有多个优点,尤其是在处理Tensorflow模型时,最重要的是可以提供Tensorflow代码的特定信息,例如有关使用哪个GPU的信息。
答案 2 :(得分:5)
在Google,他们使用标记系统设置参数的默认值。它类似于argparse。他们使用自己的标记系统而不是argparse或sys.argv。
来源:我以前在那工作过。
答案 3 :(得分:3)
使用tf.app.run()
时,可以使用tf.app.flags
在线程之间非常方便地传输变量。有关tf.app.flags
的进一步用法,请参见this。
答案 4 :(得分:1)
尝试多次后,我发现它可以打印所有FLAGS键以及实际值-
for key in tf.app.flags.FLAGS.flag_values_dict():
print(key, FLAGS[key].value)