为什么tf.flags与argparse冲突?

时间:2018-12-12 06:59:02

标签: tensorflow argparse

我使用tf.app.flagsargparse编写了代码

flags = tf.app.flags
FLAGS = flags.FLAGS

flags.DEFINE_integer('hidden1', 16, 'Number of units in hidden layer 1.')
flags.DEFINE_integer('hidden2', 16, 'Number of units in hidden layer 2.')

parser = argparse.ArgumentParser(description='Single Deep GCNN 11, 22 and 33!', allow_abbrev=False)
parser.add_argument('--fc-neuron', type=int, default=64)
parser.add_argument('--num-epochs', type=int, default=10000, help='the number of training epochs')

在其他文件中,我使用FLAGS来获取一些参数,但是,我得到了错误

absl.flags._exceptions.UnrecognizedFlagError: Unknown command line flag 'fc-neuron'

如何解决此冲突?

1 个答案:

答案 0 :(得分:0)

因此,在使用 absl.flags 时,argparse 不太合作(至少对于我在 2021 年仍然必须使用的版本)。

找到的解决方法是让 FLAGS 在未知参数上优雅地失败,然后解析您的参数:

import argparse
from absl import flags

parser = argparse.ArgumentParser()
parser.add_argument('-i', '--imput_path', type=str)
parser.add_argument('-o', '--output_path', type=str)

if __name__ == "__main__":

    FLAGS = flags.FLAGS
    try:
        argv = FLAGS(sys.argv, known_only=True)  # parse flags
    except flags.Error, e:
        logger.error('%s\nUsage: %s ARGS\n%s' % (e, sys.argv[0], FLAGS))
        sys.exit(1)

    args, _ = parser.parse_known_args()