鱼C论坛

 找回密码
 立即注册
查看: 1761|回复: 1

[技术交流] 机器学习系列------tensorflow的‘命名空间’

[复制链接]
发表于 2018-6-26 08:31:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
        tensorflow的每一个变量和常量都有一个graph作为‘命名空间’,叫做default_graph,代码如下:
  1. import tensorflow as tf

  2. x1=tf.Variable(1)
  3. x1.graph is tf.get_default_graph()
复制代码

        实际上系统将这个x1变量暂存在内存里,所以我说的命名空间是带引号的。如果我们想创建多个graph,要用下列代码:
  1. graph=tf.Graph()
  2. with graph.as_default():
  3.     x2=tf.Variable(2)
  4. x2.graph is graph
复制代码

        输出为:True。然后看看x2这个变量是否在环境默认的graph里:
  1. x2.graph is tf.get_default_graph()
复制代码

        输出为:False。如果想重置默认的graph,代码如下:
  1. tf.reset_default_graph()
复制代码

        tensorflow被设计成两部分,一部分就是graph,相当于我们建立模型。另外一部分叫Session,相当于执行这个模型。对于Session有个生命周期,当一个变量被initiallizer的时候生命周期开始,当Session被关闭的时候生命就结束了。我们看下列代码事例:
  1. w=tf.constant(3)
  2. x=w+2
  3. y=x+5
  4. z=x*3

  5. with tf.Session() as sess:
  6.     print(y.eval())
  7.     print(z.eval())
复制代码

        w是常量,x,y,z是3个变量,在session里执行y的时候自动会先执行x和w,同样执行z的时候也会先执行x,w,所以x跟w各被执行了2次。代码效率会变低。如何让只执行一次呢,代码如下:
  1. with tf.Session() as sess:
  2.     y_val,z_val=sess.run([y,z])
  3.     print(y_val)
  4.     print(z_val)
复制代码

        以上2组代码都输出10和15,第二段代码效率高.

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-8 22:54:19 | 显示全部楼层
新手路过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 06:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表