很多时候在运行python代码的时候我们需要从外部定义参数(命令行传参),从而避免每次都需要改动代码。一般来说,使用的是argparse
这个库,但是tensorflow也提供了这个功能,就是tf.app.flags
。主要是在用命令行执行程序时,需要传些参数,其实也就可以理解成对argparse库进行的封装。
tf.app.flags
在定义参数时通常有这四种常用的类型
tf.app.flags.DEFINE_string
tf.app.flags.DEFINE_integer
tf.app.flags.DEFINE_boolean
tf.app.flags.DEFINE_float
示例代码
# tflearning.py
import tensorflow as tf
# 第一个是参数名称,第二个参数是默认值,第三个是参数描述
tf.app.flags.DEFINE_string('string_name', 'Robert', "string_description")
tf.app.flags.DEFINE_integer('int_name', 10, "integer_description")
tf.app.flags.DEFINE_boolean('bool_name', False, "bool_description")
tf.app.flags.DEFINE_float('float_name', 1.1, "float_description")
FLAGS = tf.app.flags.FLAGS
# 必须带参数,否则:'TypeError: main() takes no arguments (1 given)'; main的参数名随意定义,无要求
def main(_):
print(FLAGS.string_name)
print(FLAGS.int_name)
print(FLAGS.bool_name)
print(FLAGS.float_name)
if __name__ == '__main__':
# tf.app.run() 这种也可以
tf.compat.v1.app.run()
有两种运行方式
① python tflearning.py
②python tflearning.py --string_name aaa --integer_name 123 --bool_name True --float_name 123.456
tf.app.run() | tf.compat.v1.app.run()
表示执行程序中main函数,并解析命令行参数
其实默认是执行main()函数。 也可以传其他函数名,例如test