【问题标题】:Error when calling global_variables_initializer in TensorFlow在 TensorFlow 中调用 global_variables_initializer 时出错
【发布时间】:2018-08-07 08:24:19
【问题描述】:

我在TensorFlow中有以下代码:

def func(a):
    b = tf.Variable(10) * a
    return a
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(func(tf.constant(4))))

效果很好。但是当我将a 替换为b 时,如下所示:

def func(a):
    b = tf.Variable(10) * a
    return b
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(func(tf.constant(4))))

得到以下错误:

----------------------------------- ---------------------------- FailedPreconditionError Traceback(最近一次调用 最后的) c:\programdata\anaconda3\lib\site-packages\tensorflow\python\client\session.py 在 _do_call(self, fn, *args) 1138 中尝试: -> 1139 return fn(*args) 1140 除了errors.OpError as e:

c:\programdata\anaconda3\lib\site-packages\tensorflow\python\client\session.py 在 _run_fn(会话,feed_dict,fetch_list,target_list,选项, 运行元数据)1120 feed_dict, 获取列表,目标列表, -> 1121 状态,run_metadata) 1122

c:\programdata\anaconda3\lib\contextlib.py in exit(self, type, 值,回溯) 88 尝试: ---> 89 下一个(self.gen) 90 除了 StopIteration:

c:\programdata\anaconda3\lib\site-packages\tensorflow\python\framework\errors_impl.py 在 raise_exception_on_not_ok_status() 第465章 --> 466 pywrap_tensorflow.TF_GetCode(status)) 467终于:

FailedPreconditionError: 尝试使用未初始化的值 Variable_94 [[节点:Variable_94/read = IdentityT=DT_INT32, _class=["loc:@Variable_94"], _device="/job:localhost/replica:0/task:0/cpu:0"]]

在处理上述异常的过程中,又发生了一个异常:

FailedPreconditionError Traceback(最近调用 最后)在() 4 使用 tf.Session() 作为 sess: 5 sess.run(tf.global_variables_initializer()) ----> 6 次打印(sess.run(func(tf.constant(4))))

c:\programdata\anaconda3\lib\site-packages\tensorflow\python\client\session.py 在运行中(self,fetches,feed_dict,options,run_metadata) 787尝试: 第788章 --> 789 run_metadata_ptr) 790 如果运行元数据: 第791章

c:\programdata\anaconda3\lib\site-packages\tensorflow\python\client\session.py 在 _run(self、handle、fetches、feed_dict、options、run_metadata) 995 如果 final_fetches 或 final_targets: 996 个结果 = self._do_run(handle, final_targets, final_fetches, --> 997 feed_dict_string,选项,run_metadata) 998 其他: 999 个结果 = []

c:\programdata\anaconda3\lib\site-packages\tensorflow\python\client\session.py 在 _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata) 1130 如果句柄为 None: 1131 返回 self._do_call(_run_fn, self._session, feed_dict, fetch_list, -> 1132 target_list, options, run_metadata) 1133 else: 1134 return self._do_call(_prun_fn, self._session,句柄,feed_dict,

c:\programdata\anaconda3\lib\site-packages\tensorflow\python\client\session.py 在 _do_call(self, fn, *args) 1150 中,除了 KeyError: 1151 经过 -> 1152 raise type(e)(node_def, op, message) 1153 1154 def _extend_graph(self):

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    在您的第一段代码中,您没有使用tf.Variable(10),因此它是否没有被初始化并不重要,而在您的第二段代码中,您确实尝试评估它,因此 TensorFlow 抱怨它还没有被初始化。

    在您的代码中,Variable 是在初始化完成后定义的(当调用 func 方法时)。

    def func(a):
        b = tf.Variable(10) * a
        return b
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer()) # At this stage the TensorFlow graph is empty
        print(sess.run(func(tf.constant(4)))) # The func method is called, it defines the `tf.Variable(10)`
                                              # and tries to evaluate `b` which depends on it.
    

    在下面的部分中,tf.Variable(10) 在初始化操作运行之前定义。

    b = func(tf.constant(4)) # tf.Variable(10) is defined
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer()) # tf.Variable(10) is initialized
        print(sess.run(b))
    

    【讨论】:

    • 您能详细解释一下您的代码吗?内b和外b不一样?
    • 该变量仅在调用func 时定义。请参阅我的更新答案。
    猜你喜欢
    • 2019-10-05
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 2019-01-20
    • 2018-01-22
    • 1970-01-01
    相关资源
    最近更新 更多