关于Tensorflow ValueError: Tensor must be from the same graph报错的解决

关于Graph(图)和会话(Session)的基础知识如下图所示:
https://zhuanlan.zhihu.com/p/87299728
需要明确的一点是:
但凡import tensorflow后,都会自动创建一副默认图,
如果需要新创建一张图,则需要:

import tensorflow as tf
print(tf.get_default_graph())
$ result:
<tensorflow.python.framework.ops.Graph object at 0x7fe0ae6b2208>

有新的操作,都是默认添加到图中:

import tensorflow as tf
c = tf.constant(value=1)
print(c.graph)
print(tf.get_default_graph())
$ result:
<tensorflow.python.framework.ops.Graph object at 0x7f39496a90f0>
<tensorflow.python.framework.ops.Graph object at 0x7f39496a90f0>

当然也可以新定义一个图,在新的图当中做操作

import tensorflow as tf
print(tf.get_default_graph())
g = tf.Graph()
print(g)
with g.as_default():
    d = tf.constant(value=2)
    print(d.graph)
f = tf.constant(value=2)
print(f.graph)
$ result:
<tensorflow.python.framework.ops.Graph object at 0x7f0debc51dd8>
<tensorflow.python.framework.ops.Graph object at 0x7f0debbad160>
<tensorflow.python.framework.ops.Graph object at 0x7f0debbad160>

但凡在with之外做的操作,都属于默认图

需要注意的是:
TensorFlow将所有操作都储存在图上,图决定了函数的输出流向,图将所有操作连接起来,让整体操作是连通的可以获得最终的结果。如果尝试将一张图上Tensor或者操作放入到另一张图上的Tensor或者操作就会失败,所有的东西都必须在同一张图上。
解决办法查看有没有不同Graph的函数放在一个session当中,如果是的话,创建的时候就要注意,要在同一个Graph创建变量和操作!!
还需要注意的是,在图中的操作不要用到numpy和Tensor混着来,比如这样就会报错
InvalidArgumentError: You must feed a value for placeholder tensor ‘Placeholder_367’ with dtype float and shape [2]
[[{{node Placeholder_367}}]]
这样boxes是Tensor list的结构,但是仍然不OK
中间还遇到了Tensor.numpy(), Tensor has no attribute numpy等等问题(这个bug是Tensorflow自带的bug解决不了)
没有办法将Tensor转成numpy,注意跟占位符相加或者想乘或者占位符本身都没有办法转换成numpy,具体原因不清楚。。。
总之,TF keras不如pytorch好用。。。。
而且不能看到变量的值,调试起来很麻烦。。。。。。。各种方式都用了,都不可以
以下原因强烈不推荐tensorflow和Keras:
1.Graph建立流程,Session运行的方式,调试起来看不到变量太麻烦了。。。。
2.v1和v2差别很大很多地方不兼容
3.动不动就把功能弃用,规则多
4.非常非常非常不灵活!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值