在使用许多具有相同Tensorflow FLAGS的python脚本之后,我厌倦了为每个更改更新多个标志,因此决定将tf.app.flags
重构为一个单独的类,我可以在脚本之间重用它。
然而,由于一些奇怪的原因,每当我在不同的方法中使用self.flags
时,它都无法识别先前设置的标志。例如,以下类对于标记project_dir2
可以正常工作,但对于标记project_dir3
`class MyClass():
def __init__(self):
self.flags = tf.app.flags
self.FLAGS = self.flags.FLAGS
#test code that works here
self.flags.DEFINE_string("project_dir2", "aValue", "project directory")
print("This will print correctly: "+self.FLAGS.project_dir2)
self.my_function()
def my_function(self):
#test code that fails
self.flags.DEFINE_string("project_dir3", "aValue", "project directory")
print("This will fail: "+self.FLAGS.project_dir3)`
我得到以下异常:
AttributeError: project_dir2
Exception TypeError: TypeError("'NoneType' object is not callable",) in <function _remove at 0x7fd4c3090668> ignored
有什么明显我做错了吗?或者这是Tensorflow标志无法做到的事情?这是否意味着无法跨脚本重构常用的标志设置?
答案 0 :(得分:0)
似乎有一个名为_parse_flags()
的内部方法叫做on first access。您可以在更新后手动调用它
IE
def my_function(self):
#test code that fails
self.flags.DEFINE_string("project_dir3", "aValue", "project directory")
self.flags.FLAGS._parse_flags()
关于tf.flags的背景 - 这是Google gflags库的部分重新实现,因此它缺少功能/文档。插入官方gflags(issue 1258)可以做更聪明的事情。这允许控制详细日志记录(需要重新编译right now)