TensorFlow FailedPreconditionError:迭代器尚未初始化

时间:2018-07-19 09:38:16

标签: python tensorflow

我想显示张量的值。

这是我的代码:

#some code here
data = [data_tensor for data_tensor in data_dict.items()]
for i in data:
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        print (sess.run(i[1]))
        print('_'*100)

但是,我得到了错误:

FailedPreconditionError (see above for traceback): 
GetNext() failed because the iterator has not been initialized. 
Ensure that you have run the initializer operation for this iterator 
before getting the next element.

如何解决问题?

非常感谢您。

2 个答案:

答案 0 :(得分:1)

看起来您有一个尚未初始化的数据集迭代器。数据集迭代器不是变量,因此不会使用tf.global_variables_intializer()进行初始化。

您必须通过在创建的任何数据集迭代器上调用sess.run(iterator.initializer)来显式初始化它(例如,使用iterator = dataset.make_initializable_iterator()


此外,请注意,即使只关心元素的子集,每次迭代(运行GetNext节点)也会产生数据集的完整元素。如果data_dict是迭代的输出(由data_dict = iterator.get_next()创建),则在仅给您字典中k,v对之一的情况下,进行print(sess.run(i[1])),实际上会产生整个{{ 1}}。我希望除非您在for循环中重新初始化迭代器,否则该管道不会为您提供期望的输出。

为了使我所说的更为具体,如果您创建了一个如下所示的数据集,那么您将期望获得以下迭代输出:

data_dict

答案 1 :(得分:0)

在先前的代码中是否使用了任何迭代器?如果是这样,也将它们初始化。

例如。 sess.run(validation_iterator.initializer)