【问题标题】:why tf.flags conflicts with argparse?为什么 tf.flags 与 argparse 冲突?
【发布时间】:2019-05-13 05:43:54
【问题描述】:

使用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'

我该如何解决这个冲突?

【问题讨论】:

  • 不同的函数可以读取命令行 (sys.argvo),每个函数对它可以包含什么或不可以包含什么都有自己的期望。

标签: tensorflow argparse


【解决方案1】:

所以,absl.flags 在与argparse 合作时不太合作(至少对于我在 2021 年仍将使用的版本)。

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

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-30
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多