如何在 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?
更新
我的命令行如下:
myscript image1.png image2.png image3.png
PNG 是来自 CIFAR 数据库的图像,我希望从命令行识别它。这是我希望的命令行,我不希望它包含 "usage" 输出中列出的选项。
我怀疑您导入的 cifar10.py 已经定义了 batch_size
标志,错误是由于您试图重新定义一个具有相同名称的标志。如果您要导入 cifar10
,您只需在命令行中使用 --batch_size
,然后在您的代码中使用 FLAGS.batch_size
。
从您的更新来看,您似乎根本不想使用 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)
我正在尝试在我的应用程序中设置自定义批量大小。
如果我将以下代码放入我的应用程序
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 数据库的图像,我希望从命令行识别它。这是我希望的命令行,我不希望它包含 "usage" 输出中列出的选项。
我怀疑您导入的 cifar10.py 已经定义了 batch_size
标志,错误是由于您试图重新定义一个具有相同名称的标志。如果您要导入 cifar10
,您只需在命令行中使用 --batch_size
,然后在您的代码中使用 FLAGS.batch_size
。
从您的更新来看,您似乎根本不想使用 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)