为什么 `tf.data.Dataset.map` 运行 只有一次?
Why does `tf.data.Dataset.map` run only once?
我一直在四处挖掘。仍然让我感到困惑,我无法在任何地方找到明确的解释。
dataset1 = tf.data.Dataset.from_tensor_slices(([1]*20))
dataset1 = (dataset1
.batch(4)
.map(lambda x: x+random.randint(0,20)))
for batch in iter(dataset1):
print(batch)
tf.Tensor([21 21 21 21], shape=(4,), dtype=int32)
tf.Tensor([21 21 21 21], shape=(4,), dtype=int32)
tf.Tensor([21 21 21 21], shape=(4,), dtype=int32)
tf.Tensor([21 21 21 21], shape=(4,), dtype=int32)
tf.Tensor([21 21 21 21], shape=(4,), dtype=int32)
我希望 .map
表现得像 正常 函数 map
。其中,它应该对每个元素应用一个函数。感觉我的一些假设完全不对。
任何 tensorflow 声明都是执行图的声明,在您的情况下
必须是 sess = tf.Session() , sess.run(object) , sess.run(dataset1
额外的 sess = tf.Session() , sess.run(object) , sess.run(dataset1
需要使用tf.random
模块,因为原生python只会生成数字
一次
dataset1 = tf.data.Dataset.from_tensor_slices(([1]*20))
dataset1 = (dataset1
.batch(4)
.map(lambda x: x+tf.random.uniform((), 0, 20, tf.int32)))
for batch in iter(dataset1):
print(batch)
我一直在四处挖掘。仍然让我感到困惑,我无法在任何地方找到明确的解释。
dataset1 = tf.data.Dataset.from_tensor_slices(([1]*20))
dataset1 = (dataset1
.batch(4)
.map(lambda x: x+random.randint(0,20)))
for batch in iter(dataset1):
print(batch)
tf.Tensor([21 21 21 21], shape=(4,), dtype=int32)
tf.Tensor([21 21 21 21], shape=(4,), dtype=int32)
tf.Tensor([21 21 21 21], shape=(4,), dtype=int32)
tf.Tensor([21 21 21 21], shape=(4,), dtype=int32)
tf.Tensor([21 21 21 21], shape=(4,), dtype=int32)
我希望 .map
表现得像 正常 函数 map
。其中,它应该对每个元素应用一个函数。感觉我的一些假设完全不对。
任何 tensorflow 声明都是执行图的声明,在您的情况下
必须是sess = tf.Session() , sess.run(object) , sess.run(dataset1
额外的 sess = tf.Session() , sess.run(object) , sess.run(dataset1
需要使用tf.random
模块,因为原生python只会生成数字
一次
dataset1 = tf.data.Dataset.from_tensor_slices(([1]*20))
dataset1 = (dataset1
.batch(4)
.map(lambda x: x+tf.random.uniform((), 0, 20, tf.int32)))
for batch in iter(dataset1):
print(batch)