【发布时间】:2018-01-28 19:07:06
【问题描述】:
我正在使用 Tensorflow 1.4.1 并了解 Tensorflow Dataset API。在描述consuming values from an iterator的部分,有如下例子
dataset1 = tf.data.Dataset.from_tensor_slices(tf.random_uniform([4, 10]))
dataset2 = tf.data.Dataset.from_tensor_slices((tf.random_uniform([4]), tf.random_uniform([4, 100])))
dataset3 = tf.data.Dataset.zip((dataset1, dataset2))
iterator = dataset3.make_initializable_iterator()
sess.run(iterator.initializer)
next1, (next2, next3) = iterator.get_next()
...带有以下指导性引用:
请注意,评估
next1、next2或next3中的任何一个都会推进 所有组件的迭代器。迭代器的典型消费者将 在一个表达式中包含所有组件。
我决定通过以下简单示例来测试这种行为。
import tensorflow as tf
dataset1 = tf.data.Dataset.range(5)
dataset2 = tf.data.Dataset.range(5)
dataset3 = tf.data.Dataset.zip((dataset1, dataset2))
iterator = dataset3.make_initializable_iterator()
with tf.Session() as sess:
sess.run(iterator.initializer)
next1, next2 = iterator.get_next()
A = next1
B = next1 + next2
while True:
try:
a, b = sess.run([A,B])
print(a,b)
except tf.errors.OutOfRangeError:
print('done')
break
如您所见,我在两个表达式中评估 next1,A 和 B。根据上面的引用,如果迭代器确实为每次评估都提前了,我期待迭代器在这两个评估中都提前并看到包含
(0, 2)
(2, 6)
但是,我得到的是:
(0, 0)
(1, 2)
(2, 4)
(3, 6)
(4, 8)
为什么迭代器只前进一次?什么是显示我期望看到的行为的工作示例?
【问题讨论】:
标签: python tensorflow tensorflow-datasets