argparse很强大,但是我们未必需要使用这么繁杂的东西,TensorFlow自己封装了一个简化版本的解析方式,实际上是对argparse的封装
脚本化调用tensorflow的标准范式:
import pprint import tensorflow as tf flags = tf.app.flags # 脚本参数名,值,描述 # 脚本参数有四种取值:整数,浮点数,字符串,布尔类型,也是相比argv模块高级 flags.DEFINE_integer("epoch", 25, "Epoch to train [25]") flags.DEFINE_float("learning_rate", 0.0002, "Learning rate of for adam [0.0002]") flags.DEFINE_string("sample_dir", "samples", "Directory name to save the image samples [samples]") flags.DEFINE_boolean("train", False, "True for training, False for testing [False]") FLAGS = flags.FLAGS # main必须带参数 # 否则:'TypeError: main() takes no arguments (1 given)'; # 其中main的参数名随意定义,无要求 def main(_): # flags.FLAGS.__flags为包含了所有输入的列表 pp = pprint.PrettyPrinter() pp.pprint(flags.FLAGS.__flags) # 也可以单个查询,格式为:FLAGS.参数名 if FLAGS.epoch is None: FLAGS.epoch = 50 if __name__=='__main__': # 下面的函数会自动调用main函数 tf.app.run()
作为参考,稍微提一下使用sys包接收脚本参数的格式:
import sys a=sys.argv[0] print(a) # 打印出脚本名
tf的方法更为高级一些,自动区分参数类型,自动设定默认值,自动和参数名称对应,在tf脚本中,指定规定参数时只要:[脚本名 –参数名 参数值]即可,而且FLAGS可以直接传给函数增加便捷度:『TensorFlow』以GAN为例的神经网络类范式