首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TensorFlow/Python:使用自定义图的“默认堆栈嵌套违反”错误

TensorFlow/Python:使用自定义图的“默认堆栈嵌套违反”错误
EN

Stack Overflow用户
提问于 2017-10-26 20:52:51
回答 1查看 3.2K关注 0票数 0

当我试图在自定义的命名图中构造一个简单的表达式时,我在堆栈方面出现了一个奇怪的错误。

以下代码工作正常:

代码语言:javascript
复制
tf.reset_default_graph()

# The basic model
X = tf.placeholder(tf.float32, [None, MnistDim], "X")
W = tf.get_variable(
        name="W", 
        shape=[MnistDim, DigitCount], 
        dtype=np.float32,
        initializer=tf.zeros_initializer()
)
b = tf.get_variable(
        name="b", 
        shape=[DigitCount], 
        dtype=np.float32,
        initializer=tf.zeros_initializer()
)

a = tf.matmul(X, W, name="a") + b
y = tf.nn.softmax (a, name="y")

# The training elements  
t = tf.placeholder (tf.float32, [None, 10], "t")
cross_entropy = tf.reduce_mean(-tf.reduce_sum(t * tf.log(y), reduction_indices=[1]))
# I know about tf.nn.softmax_cross_entropy_with_logits(a)

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

但是,如果我将该代码放在一个自定义图中,则将其放在以下前面:

代码语言:javascript
复制
mnist_train_graph = tf.Graph()
with mnist_train_graph.as_default():
    tf.reset_default_graph()

    # The basic model
    X = tf.placeholder(tf.float32, [None, MnistDim], "X")

    etc. 
    etc.

    train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

然后我得到以下错误。

代码语言:javascript
复制
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-23-13b0e3c5f232> in <module>()
     30     # More stable to use the following
     31     # tf.nn.softmax_cross_entropy_with_logits(a)
---> 32     train_step =     tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/contextlib.py in __exit__(self, type, value, traceback)
     87         if type is None:
     88             try:
---> 89                 next(self.gen)
     90             except StopIteration:
     91                 return

    /opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/framework/ops.py in get_controller(self, default)
   3626     finally:
   3627       if self._enforce_nesting:
-> 3628         if self.stack[-1] is not default:
   3629           raise AssertionError(
   3630               "Nesting violated for default stack of %s objects"

IndexError: list index out of range

有人能解释一下吗?我在Python3.6上使用tensorflow-gpu版本1.1.0,在MacOS10.12上使用Pip安装。我是在木星的一段时间内运行的。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-26 21:21:07

所以我继续寻找,30分钟后,我找到了答案(典型的!)。本质上,在自定义图形tf.reset_default_graph()中使用as_default()是不安全的。删除它可以解决这个问题。这里有更多详细信息:http://github.com/tensorflow/tensorflow/issues/11121

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46963606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档