Tensorflow中 Graph和Session的关系

默认Session问题

  • session创建后,如果没有指定graph,则该session会调用默认的graph。
  • 调用默认graph的话,session创建语句可以在文件任意位置。因为即使session放在前文,后文里若是定义了新的graph节点,这些节点也会加到默认graph中,接下来调用该session时,调用的也是新的默认graph。
  • 如果以sess = tf.Session()创建session,则该session不会作为下文的默认session,需要以with语句开头调用该session后,才作为下文的默认session。如果以sess = tf.InteractiveSession()创建session, 则该session即是下文的默认session。默认session的好处是可以直接使用operation.run()或tensor.eval(),无需指定session来run。
  • with语句有个好处是,该代码块结束后,session会自动close。

默认Graph问题

  • 如果不指定graph,创建的新节点都会加入到默认graph中。注意,该graph是一个全局默认graph,也就说如果你定义了一个函数,这个函数里增加了一些节点,那么,每次调用这个函数,都会在默认graph中增加新节点!因此,如果想要定义类来实现算法,那么以防这种情况,建议将所有的节点操作放在类的初始化init方法中,这样对于每个实例,初始化也只会执行一次而已。
  • 有个要特别注意的节点操作tf.global_variables_intializer()。该项操作读取的是当前默认graph中的variable,如果在前文中定义就会出现问题!举个例子,我在前文中定义init_var = tf.global_variables_intializer(),然后中间加入新的variable, 最后再执行init_var.run(),这样就会出现编译错误信息Attempting to use uninitialized value beta1_power!也就是我今天遇到的编译问题!我们只能重新执行tf.global_variables_intializer().run()才行!

总结

其实上面说了那么多问题,其实只要规范好代码就可以避免上述问题。所谓的规范就是,session创建和variable初始化这两个步骤,都在graph定义完成后再执行!

转载自https://levylv.github.io/2017/questions-about-graph-and-session-of-tensorflow.html

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值