Почему `tf.data.Dataset.map` запускается только один раз? - PullRequest
0 голосов
/ 03 июня 2019

Я копался. Все еще сбит с толку меня, я не могу найти четкого объяснения нигде

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. Который, он должен применить функцию к каждому элементу. Такое ощущение, что некоторые из моих предположений полностью неверны.

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Любое объявление тензорного потока - это объявление графа выполнения, которое в вашем случае должно запускаться дополнительно через sess = tf.Session() , sess.run(object) , sess.run(dataset1)

0 голосов
/ 03 июня 2019

Вам необходимо использовать модуль 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)
...