作者:风 | 来源:互联网 | 2022-12-10 11:25
我想显示张量的值。
这是我的代码:
#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.
如何解决问题?
非常感谢你。
1> rachelim..:
看起来您有一个尚未初始化的数据集迭代器。数据集迭代器不是变量,因此不会使用进行初始化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