为什么“ tf.data.Dataset.map”只能运行一次?

时间:2019-06-03 11:55:19

标签: python tensorflow tensorflow-datasets tensorflow2.0

我一直在挖掘。仍然让我感到困惑,我在任何地方都找不到清晰的解释。

BEGIN

INSERT INTO USERS 
SELECT STUDENT_ID, PASSWORD , STATUS
FROM student_backup
WHERE STUDENT_ID NOT IN (SELECT STUDENT_ID FROM USERS)
AND is_active_flg = 'Y';

END;
/
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。它应该对每个元素应用一个功能。感觉我的某些假设完全不对。

2 个答案:

答案 0 :(得分:1)

任何tensorflow声明都是执行图的声明,在您的情况下,必须通过sess = tf.Session() , sess.run(object) , sess.run(dataset1)额外实际运行

答案 1 :(得分:0)

您需要使用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)