【问题标题】:How to use "FLAGS" (command line switches) in TensorFlow?如何在 TensorFlow 中使用“FLAGS”(命令行开关)?
【发布时间】:2016-02-06 13:54:45
【问题描述】:

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

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

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?

更新

我的命令行如下:

myscript image1.png image2.png image3.png

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

【问题讨论】:

  • 能否请您添加用于运行脚本的命令行?
  • 我希望处理的图像 PNG 文件列表。这就是我想要的,我不想从命令行设置batch_size

标签: python tensorflow


【解决方案1】:

根据您的更新,听起来您根本不想使用 FLAGS 模块。如果您查看类似cifar10_train.py 的程序,您会看到以下near the bottom of the script

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)

【讨论】:

  • 如果 python 已经有一个可以正常工作的标志包装器/库,为什么 TensorFlow 有一个标志包装器/库?
  • 文档中是否有涉及 FLAGS 的地方?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    相关资源
    最近更新 更多