问题描述
简而言之就是,参数输出值与命令行输入值不一致。
比如我们有个main.py,具体代码如下:
import tensorflow as tf
tf.app.flags.DEFINE_boolean('if_gpu', True, 'if use gpu')
FLAGS = tf.app.flags
def main(_):
print(FLAGS.if_gpu)
if __name__ == '__main__':
tf.app.run()
python main.py --if_gpu False
当执行如上代码时(或者 if_gpu 后接任何值),该参数的输出恒为 True ;而且不管默认值为 True 还是 False,只要--if_gpu后面有值传入,参数值都会是 True,这个时候开始查阅资料,看到大家好像没遇到过这个问题似的,几乎没讨论。一个普遍的置 False 方法是参数前加 no,也就是执行 python main.py --noif_gpu,这ok,但是如若我们要写个脚本,就困难了,既然置 True 和置 False 形式不一样,就需对每个boolean参数传入值进行判断,是 True 可正常接参数;是False,需要在参数前加 no,会有 2^n 个执行形式...显然不能这样做。
解决办法
方法是很简单的,只是过程费了些时间。也是习惯所致,本人命令行传参时从来不用等号,没想到简单地加个等号,就解决了。如下所示:
python main.py --if_gpu=False
也就是,凡是boolean类型参数,加 “=” 就与参数输入一致了。
补充
这个问题好像之前是个bug,即使有等号,也同样有问题。
图片参考:https://github.com/tensorflow/tensorflow/issues/379