如何在TensorFlow中使用"FLAGS"(命令行开关)?

Dim*_*ims 6 python tensorflow

我想在我的应用程序中设置自定义批量大小.

如果我将以下代码放入我的应用程序

tf.app.flags.DEFINE_integer('batch_size', 128,
                            """Number of images to process in a batch.""")
Run Code Online (Sandbox Code Playgroud)

它说以下错误

argparse.ArgumentError: argument --batch_size: conflicting option string(s): --batch_size
Run Code Online (Sandbox Code Playgroud)

如果我删除此声明,它会发誓:

usage: <myscript> [-h] [--batch_size BATCH_SIZE] [--data_dir DATA_DIR]
                      [--checkpoint_dir CHECKPOINT_DIR]
Run Code Online (Sandbox Code Playgroud)

在使用的线FLAGS.batch_size.

myscript是我的脚本的名称,我没有在任何地方写这个消息,根本不期望这些命令行开关.看起来像TF使用一些Python开关解析库并以某种方式期待这些开关.如何避免这种情况并期望定制开关?

如何硬编码自定义batch_size?

UPDATE

我的命令行如下:

myscript image1.png image2.png image3.png
Run Code Online (Sandbox Code Playgroud)

PNG是我希望从命令行识别的CIFAR数据库中的图像.这是我希望的命令行,我不希望它包含"usage"输出中列出的选项.

mrr*_*rry 10

从您的更新中,听起来您根本不想使用该FLAGS模块.如果您查看类似的程序cifar10_train.py,您将在脚本底部附近看到以下内容:

def main(argv=None):  # pylint: disable=unused-argument
  # ...

if __name__ == '__main__':
  tf.app.run()
Run Code Online (Sandbox Code Playgroud)

tf.app.run()调用是一个比特的样板,其确保任何标志被解析,然后调用main()在同一模块中的功能.请注意,它main()有一个argv参数.这将填充程序的其余参数:在您的示例中,它将是一个列表["image1.png", "image2.png", "image3.png"].因此,您可以简单地将您的main()函数编写为:

def main(argv=None):
  if argv:
    for filename in argv:
      run_inference_on_file(filename)
Run Code Online (Sandbox Code Playgroud)

  • 为什么TensorFlow有一个标志包装器/库如果python已经有一个工作正常? (8认同)
  • 文档中是否包含FLAGS? (2认同)