繁体   English   中英

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

[英]How to use “FLAGS” (command line switches) in TensorFlow?

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

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

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

它说以下错误

argparse.ArgumentError: argument --batch_size: conflicting option string(s): --batch_size

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

usage: <myscript> [-h] [--batch_size BATCH_SIZE] [--data_dir DATA_DIR]
                      [--checkpoint_dir CHECKPOINT_DIR]

FLAGS.batch_size使用的行。

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

如何硬编码自定义batch_size?

UPDATE

我的命令行如下:

myscript image1.png image2.png image3.png

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

从您的更新中,听起来您根本不想使用FLAGS模块。 如果你看一下像cifar10_train.py这样的程序,你会看到脚本底部附近有以下内容:

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

if __name__ == '__main__':
  tf.app.run()

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)

我怀疑您正在导入已定义了batch_size标志的cifar10.py ,并且该错误是由于您尝试重新定义具有相同名称的标志。 如果要导入cifar10 ,你可以简单地使用--batch_size命令行,并FLAGS.batch_size在你的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM