理解tf.app.run()

感谢https://www.cnblogs.com/marsggbo/p/9719580.html

在程序中经常看见:

if __name__ == '__main__': 
    tf.app.run()

其中if name == ‘main’:的意思是当别的程序调用此程序模块的时候不运行main函数;当直接运行此程序模块的时候,会运行main函数。
tf.app.run()分为两个部分,看源码:

def run(main=None, argv=None):
  """Runs the program with an optional 'main' function and 'argv' list."""

  # Define help flags.
  _define_help_flags()

  # Parse known flags.
  argv = flags.FLAGS(_sys.argv if argv is None else argv, known_only=True)

  main = main or _sys.modules['__main__'].main

  # Call the main function, passing through any arguments
  # to the final program.
  _sys.exit(main(argv))

其中argv = flags.FLAGS(_sys.argv if argv is None else argv, known_only=True)
就是解析命令行参数args。第二部分是运行main()函数。
下面说说FLAGS命令行参数的定义和使用,上面提到的链接里有很详细的说明,我就直接粘贴过来:

#coding:utf-8 
  
# 学习使用 tf.app.flags 使用,全局变量 
# 可以再命令行中运行也是比较方便,如果只写 python app_flags.py 则代码运行时默认程序里面设置的默认设置 
# 若 python app_flags.py --train_data_path <绝对路径 train.txt> --max_sentence_len 100 
#    --embedding_size 100 --learning_rate 0.05  代码再执行的时候将会按照上面的参数来运行程序 
  
import tensorflow as tf 
  
FLAGS = tf.app.flags.FLAGS 
  
# tf.app.flags.DEFINE_string("param_name", "default_val", "description") 
tf.app.flags.DEFINE_string("train_data_path", "/desktop/train.txt", "training data dir") 
tf.app.flags.DEFINE_string("log_dir", "./logs", " the log dir") 
tf.app.flags.DEFINE_integer("max_sentence_len", 80, "max num of tokens per query") 
tf.app.flags.DEFINE_integer("embedding_size", 50, "embedding size") 
  
tf.app.flags.DEFINE_float("learning_rate", 0.001, "learning rate") 
  
  
def main(unused_argv): 
    train_data_path = FLAGS.train_data_path 
    print("train_data_path", train_data_path) 
    print("*" * 30) 
    max_sentence_len = FLAGS.max_sentence_len 
    print("max_sentence_len", max_sentence_len) 
    print("*" * 30) 
    embdeeing_size = FLAGS.embedding_size 
    print("embedding_size", embdeeing_size) 
    print("*" * 30) 
    abc = tf.add(max_sentence_len, embdeeing_size) 
  
    init = tf.global_variables_initializer() 
  
    with tf.Session() as sess: 
        sess.run(init) 
        print("abc", sess.run(abc)) 
  
# 使用这种方式保证了,如果此文件被其他文件 import的时候,不会执行main 函数 
if __name__ == '__main__': 
    tf.app.run()   # 解析命令行参数,调用main 函数 main(sys.argv) 

以上的修改,在调用此程序的时候的默认命令行参数,如将此程序保存为1.py,运行:

python 1.py

不传入任何命令行参数,结果就是我们设置的默认参数
如果传入:

python 1.py --max_sentence_len 100 --embedding_size 100

在这里插入图片描述
再次感谢博客园Marsggbo原文

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值