gpt4 book ai didi

python - TensorFlow 失败前提条件错误 : iterator has not been initialized

转载 作者:行者123 更新时间:2023-11-28 21:36:09 24 4
gpt4 key购买 nike

我想显示张量的值。

这是我的代码:

#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.

如何解决这个问题?

非常感谢。

最佳答案

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

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


此外,请注意,每次数据集迭代(运行 GetNext 节点)都会生成数据集的完整元素,即使您只关心该元素的子集。如果 data_dict 是迭代的输出(使用 data_dict = iterator.get_next() 创建),则执行 print(sess.run(i[1])) ,虽然只提供字典中的 k,v 对之一,但实际上会生成整个 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

关于python - TensorFlow 失败前提条件错误 : iterator has not been initialized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51419237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com