tensorflow 错误:Tensor XXX is not an element of this graph,常见的几种情况!

一、不同的graph 中变量名重复,覆盖

理解每个graph 中的变量都是全局变量,而不是局部变量。这样最终的结果是只有一个 a ,那么gh1 中没有变量a(name='dd'),所以当试图输出gh1 中的a的时候会有这种错误。(如何理解这里的覆盖,我还没有想好怎么描述)

 

 #代码手写,并没有运行,仅是展示
#错误代码
gh1 = tf.Graph()
 with gh1.as_default():
     a = tf.Variable(10, tf.float32, name='dd')
  
 gh2 = tf.Graph()
 with gh2.as_default():
     a  = tf.Variable(11, tf.float32, name='dd')

with tf.Session(graph=gh1) as sess1:
    sess1.run(tf.global_variables_initializer())
    print(sess1.run(a))

with tf.Session(graph=gh2) as sess2:
    sess2.run(tf.global_variables_initializer())
    print(sess2.run(a))

#正确代码
gh1 = tf.Graph()
 with gh1.as_default():
     a = tf.Variable(10, tf.float32, name='dd')
  
 gh2 = tf.Graph()
 with gh2.as_default():
     b = tf.Variable(11, tf.float32, name='dd')

with tf.Session(graph=gh1) as sess1:
    sess1.run(tf.global_variables_initializer())
    print(sess1.run(a))

with tf.Session(graph=gh2) as sess2:
    sess2.run(tf.global_variables_initializer())
    print(sess2.run(b))



二、  graph 中的变量初始化错误

 #代码手写,并没有运行,仅是展示
#错误代码
aa = tf.Variable(10, tf.float32, name='dd')
gh1 = tf.Graph()
 with gh1.as_default():
     a = tf.Variable(10, tf.float32, name='dd')

tf.Session(graph=gh1) as sess1:
sess1.run(tf.global_variables_initializer())    
print(sess1.run(a))

#这种情况下不能正确输出,主要是因为sess1.run(tf.global_variables_initializer()) 初始化位置错误 

2.1 首先理解默认graph,在tensorflow 中有一个默认的,一开始就创建好的graph。 大部分情况下都是这个对这个graph进行操作。如果想要创建新graph ,并添加元素。应该是:

gh = tf.Graph()
with gh.as_default():
    a = tf.Variable(10,tf.float32, name='dd')
aa =tf.Variable(10,tf.float32, name='dd')

在with中新建的各种量会添加到gh图中。一旦推出 with ,就又会回到 default_graph 中去,例如 aa 就是添加到默认 graph 中。

2.2 在进行sess1.run(tf.global_variables_initializer())的时候

     是将默认的 graph 中的变量加载到Session中。而不是将Session(graph=gh1)中 gh1中的变量加载到 Session 中。通过以下方法验证:

 #代码手写,并没有运行,仅是展示
#正确代码
aa = tf.Variable(10, tf.float32, name='dd')
gh1 = tf.Graph()
 with gh1.as_default():
     a = tf.Variable(10, tf.float32, name='dd')

tf.Session(graph=tf.get_default_graph) as sess1:
sess1.run(tf.global_variables_initializer())    
print(sess1.run(aa))

2.3 两种方式解决

(1)使用with tf.Session(graph=gh1) as sess ; 在其内部执行变量初始化

(2)单独使用with gh1.as_default() ; 将变量初始化操作置于此图的作用区域(有点别扭)。

注:这两种方法是在你一定要将“变量初始化”操作放在后面写解决方案

 

 #代码手写,并没有运行,仅是展示
#方案1
#正确代码
aa = tf.Variable(10, tf.float32, name='dd')
gh1 = tf.Graph()
with gh1.as_default():
    a = tf.Variable(10, tf.float32, name='dd')
with tf.Session(graph=gh1) as sess1:
    sess1.run(tf.global_variables_initializer())    
    print(sess1.run(a))


#方案1
#正确代码
aa = tf.Variable(10, tf.float32, name='dd')
gh1 = tf.Graph()
with gh1.as_default():
    a = tf.Variable(10, tf.float32, name='dd')
sess1 = tf.Session(graph=gh1) 
with gh1.as_default():
    sess1.run(tf.global_variables_initializer())    
print(sess1.run(a))

sess1.close()

注:以上所有的结论来自一步步的实验,加上自己的猜测,并非来自官方手册。希望批评指正。

因分享而快乐

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值