TensorFlow tf.app&tf.app.flags用法介绍

TensorFlow tf.app&tf.app.flags用法介绍

TensorFlow tf.app argparse

tf.app.flags

下面介绍 tf.app.flags.FLAGS的使用,主要是在用命令行执行程序时,需要传些参数,其实也就可以理解成对argparse库进行的封装,示例代码如下

  1. #coding:utf-8


  1. # 学习使用 tf.app.flags 使用,全局变量

  1. # 可以再命令行中运行也是比较方便,如果只写 python app_flags.py 则代码运行时默认程序里面设置的默认设置

  1. # 若 python app_flags.py --train_data_path <绝对路径 train.txt> --max_sentence_len 100

  1. # --embedding_size 100 --learning_rate 0.05 代码再执行的时候将会按照上面的参数来运行程序


  1. import tensorflow as tf 


  1. FLAGS = tf.app.flags.FLAGS 


  1. # tf.app.flags.DEFINE_string("param_name", "default_val", "description")

  1. tf.app.flags.DEFINE_string("train_data_path", "/desktop/train.txt", "training data dir") 

  1. tf.app.flags.DEFINE_string("log_dir", "./logs", " the log dir") 

  1. tf.app.flags.DEFINE_integer("max_sentence_len", 80, "max num of tokens per query") 

  1. tf.app.flags.DEFINE_integer("embedding_size", 50, "embedding size") 


  1. tf.app.flags.DEFINE_float("learning_rate", 0.001, "learning rate") 



  1. def main(unused_argv):

  1. train_data_path = FLAGS.train_data_path 

  1. print("train_data_path", train_data_path) 

  1. print("*" * 30) 

  1. max_sentence_len = FLAGS.max_sentence_len 

  1. print("max_sentence_len", max_sentence_len) 

  1. print("*" * 30) 

  1. embdeeing_size = FLAGS.embedding_size 

  1. print("embedding_size", embdeeing_size) 

  1. print("*" * 30) 

  1. abc = tf.add(max_sentence_len, embdeeing_size) 


  1. init = tf.global_variables_initializer() 


  1. with tf.Session() as sess: 

  1. sess.run(init) 

  1. print("abc", sess.run(abc)) 


  1. # 使用这种方式保证了,如果此文件被其他文件 import的时候,不会执行main 函数

  1. if __name__ == '__main__': 

  1. tf.app.run() # 解析命令行参数,调用main 函数 main(sys.argv)



两种调用方式:

方式一:

  1. python tf_app_flag.py 

结果如下:

方式二:

  1. python app_flags.py --train_data_path ./test.py --max_sentence_len 100 --embedding_size 100 --learning_rate 0.05


tf.app.run()

该函数一般都是出现在这种代码中:

  1. if __name__ == '__main__': 

  1. tf.app.run() 

上述第一行代码表示如果当前是从其它模块调用的该模块程序,则不会运行main函数!而如果就是直接运行的该模块程序,则会运行main函数。

具体第二行的功能从源码开始分析,源码如下:

flags_passthrough=f._parse_flags(args=args)这里的parse_flags就是我们tf.app.flags源码中用来解析命令行参数的函数。所以这一行就是解析参数的功能;

下面两行代码也就是tf.app.run的核心意思:执行程序中main函数,并解析命令行参数!


参考:

MARSGGBO♥原创 2018-8-5

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WOLFRAM

Mma粉丝疑问【为啥不用个列表写短点呢?】

19340
来自专栏计算机视觉与深度学习基础

Leetcode 62 Unique Paths

A robot is located at the top-left corner of a m x n grid (marked 'Start' in th...

23580
来自专栏进击的程序猿

raft 系列解读(4) 之 etcd-raft学习

大多数Raft的实现都是整体设计,包括存储处理,消息序列化和网络传输,但是本raft库在实现的时候只实现了最核心的算法,换来了灵活性和性能,网络和disk IO...

14540
来自专栏hotqin888的专栏

HydroCMS-用ueditor无法实现word中图片转存的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

24510
来自专栏伪君子的梦呓

用 Python 生成彩色动态二维码

53970
来自专栏我是业余自学C/C++的

redis_3.0.7_sds.c_sdsll2str()

17520
来自专栏友弟技术工作室

http digest

HTTP digest 摘要访问认证是一种协议规定的Web服务器用来同网页浏览器进行认证信息协商的方法。它在密码发出前,先对其应用哈希函数,这相对于HTTP基本...

1.3K80
来自专栏北京马哥教育

用Linux命令行生成随机密码的十种方法

Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它。例如,你可以通过数十种方法来生成随机密码。本文将介绍生成随机密码的十种方法。 ...

35460
来自专栏贾老师の博客

【笔记】高性能服务器设计

14040
来自专栏菩提树下的杨过

利用mybatis-generator自动生成代码

mybatis-generator有三种用法:命令行、eclipse插件、maven插件。个人觉得maven插件最方便,可以在eclipse/intellij ...

41650

扫码关注云+社区

领取腾讯云代金券