TensorFlow 1.5.0-rc0:使用`tf.app.flags`时出错

时间:2018-01-11 01:57:18

标签: python tensorflow

misc_fun.py文件中定义了以下标志,以包含计算机和目录信息:

import tensorflow as tf
flags = tf.app.flags
FLAGS = flags.FLAGS
# definitions
flags.DEFINE_string(
    'DEFAULT_IN',
    '~/PycharmProjects/myNN/Data/',
    """Default input folder.""")
...

它在TensorFlow 1.0 - 1.4版本(使用Pycharm)中运行良好。更新到TensorFlow 1.5.-rc0后,发生以下错误:

用法:

from misc_fun import FLAGS
FLAGS.DEFAULT_IN = FLAGS.DEFAULT_DOWNLOAD  # change default input folder

错误:

UnparsedFlagAccessError: Trying to access flag --DEFAULT_DOWNLOAD before flags were parsed.

然而print(FLAGS)工作正常,这给出了:

misc_fun:
  --DEFAULT_DOWNLOAD: default download folder for large datasets.
    (default: '/home/username/Downloads/Data/')
  --DEFAULT_IN: default input folder.
    (default: '~/PycharmProjects/myNN/Data/')
...

我尝试FLAGS = flags.FLAGS(sys.argv),导致以下错误:

UnrecognizedFlagError: Unknown command line flag 'f'

虽然有一个使用类对象的解决方法,但我想知道这里可能出现什么问题。

3 个答案:

答案 0 :(得分:4)

使用1.5.0-rc0时,Tensorflow维护人员已将tf.app.flags从abseil切换到flags模块。不幸的是,它与先前的实现不是100%API兼容。我用

之类的东西解决了你的问题
remaining_args = FLAGS([sys.argv[0]] + [flag for flag in sys.argv if flag.startswith("--")])
assert(remaining_args == [sys.argv[0]])
在第一次访问FLAGS对象之前

答案 1 :(得分:3)

我尝试在下面添加以下行。

tf.app.flags.DEFINE_string('f','','内核')

此解决方案与其他解决方案的不同之处在于它简单易用。您只需要将此添加到代码中,就不会更改您的系统。请让我知道该解决方案是否有助于解决其他人的问题。

此解决方案的参考来自一个中文网站:https://blog.csdn.net/qq_39956625/article/details/80500291

答案 2 :(得分:0)

或者,您可以使用FLAGS(sys.argv, known_only=True)来解析所有相关标志(使用tf.app.flags.DEFINE_xxx定义的标志)。这将释放任何其他未知的args。如果您有一些与TF无关的命令行参数,则非常有用。