TensorFlow FailedPreconditionError:迭代器尚未初始化

Cha*_*han 2 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)
Run Code Online (Sandbox Code Playgroud)

但是,我得到了错误:

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.
Run Code Online (Sandbox Code Playgroud)

如何解决问题?

非常感谢你。

rac*_*lim 5

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

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


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

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

## dataset: [{'a':0, 'b':10}, {'a':1, 'b':11}, {'a':2, 'b':12}, ...]
dataset = tf.data.Dataset.range(10).map(lambda x: {'a': x, 'b': x + 10})
iterator = dataset.make_initializable_iterator()
next_elem = iterator.get_next()
with tf.Session() as sess:
    sess.run(iterator.initializer)
    print(sess.run(next_elem['a']))  # 0
    print(sess.run(next_elem['a']))  # 1
    print(sess.run(next_elem['b']))  # 12
Run Code Online (Sandbox Code Playgroud)