首先需要说明的是tf.app.flags是TensorFlow 1.x版本中的代码,它本质上和tf.flags是等价的。为什么是等价的呢?请看代码:
print(dir(tf.app.flags) == dir(tf.flags))
如果使用其他深度学习框架,可以使用argparse模块中的类ArgumentParser,使用示例代码如下:
parser = ArgumentParser()
parser.add_argument("--batch_size", type=int, default=32)
parser.add_argument("--load_pre", default=False, action="store_true")
parser.add_argument("--ckpt_path", type=str, default="") # 模型训练完后使用对应的ckpt路径
parser.add_argument("--test", action="store_true", default=True)
parser.add_argument("--train", action="store_true", default=True)
parser.add_argument("--save_state_dict", default=True, action="store_true")
parser.add_argument("--data_dir", default="data/corpus", type=str, help="train data dir")
parser.add_argument("--max_seq_length", default=128, type=int, help="sentence max length")
parser.add_argument("--pre_train_path", default="pre_model/bert-base-chinese", type=str)
parser.add_argument("--model_name_or_path", default="bert_bilstm_crf", type=str)
parser.add_argument("--overwrite_cache", default=False, type=bool)
parser.add_argument("--epoch", default=20, type=int)
具体可参考大佬博客:https://catcoder.blog.csdn.net/article/details/96429152
flags机制是Tensorflow中经常要使用到的知识,具体内容如下所示:
从本质上来说,tf.app.flags是Python参数解析模块的装饰器,它通常用于处理命令行参数,但也有其他的功能。
举例来说,假设输入为:
python distribute.py --job_name="ps" --task_index=0
则参数为job_name=“ps”、task_index=0。
如果通过代码来设定参数的话,代码如下所示:
tf.app.flags.DEFINE_string("job_name", "", "name of job") # 参数名称、默认值、参数描述
tf.app.flags.DEFINE_integer("task_index", 0, "Index of task")
flags机制定义了不同类型的参数:
- tf.app.flags.DEFINE_string defines a string value.
- tf.app.flags.DEFINE_boolean defines a Boolean value.
- tf.app.flags.DEFINE_float defines a floating-point value.
- tf.app.flags.DEFINE_integer defines an integer value
另外,tf.app.flags.FLAGS是对命令行输入的参数进行解析的结构。参数可通过FLAGS.arg进行访问,或者通过FLAGS.__flags字典进行访问,但是更加推荐前者。