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)
您应该会看到预期的结果。
这是我的代码片段
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)
您应该会看到预期的结果。