Tensorflow 数据集 api 问题

Tensorflow Dataset api issue

这是我的代码片段

features=np.array([1,2,3,4,5,6,7],dtype=float)
labels=np.array([1,2,3,4,5,6,7],dtype=float)
training_data=(features,labels)

train_dataset=tf.data.Dataset.from_tensor_slices(training_data)
train_dataset=train_dataset.batch(1)

iter=train_dataset.make_one_shot_iterator()
batch=iter.get_next()

with tf.Session() as sess:
    x,y=batch
    a=x.eval()
    b=y.eval()   
    print(a,"---------->",b)

输出[1] ---------> [2]

预期输出[1] ---------> [1]

我在这上面花了 6 个小时,当我遇到这个问题时,我正在训练 LSTM 模型。我错过了什么?

问题是,在将 batch 分解为 x, y 之后,您不会得到两个普通张量,而是得到两个迭代器:

In [15]: batch
Out[15]:
(<tf.Tensor 'IteratorGetNext_1:0' shape=(?,) dtype=float64>,
 <tf.Tensor 'IteratorGetNext_1:1' shape=(?,) dtype=float64>)

因此,x.eval() 将迭代器增加 1,y.eval() 再次将迭代器增加,导致您看到值 (1, 2)

相反,只对 运行 迭代器执行一次:

with tf.Session() as sess:
    a, b = sess.run(batch)
    print(a,"---------->",b)

您应该会看到预期的结果。