Как преобразовать тензор TensorFlow в массив NumPy в tf.Dataset.map () при многопоточности / многопроцессорности? - PullRequest
0 голосов
/ 19 мая 2019

Я использую TensorFlow 1.12 в нетерпеливом исполнении.У меня есть вычислительно дорогая функция, которую я отображаю на этот набор данных, используя tf.Dataset.map().Внутри этой функции, которую я разработал, просто зацикливая на наборе данных в нетерпеливом исполнении, я конвертирую тензоры в массивы NumPy, используя EagerTensor.numpy().Поскольку предварительная обработка моего набора данных занимает слишком много времени, я теперь хочу многопоточность всей этой процедуры карты, используя tf.Dataset.map(myfunction, num_cores=30).Тем не менее, теперь myfunction() больше не выполняется с нетерпением.Я попробовал две вещи: 1) обернуть myfunction() с использованием tf.py_function, в этом случае map() больше не является многопоточным, и 2) открыть tf.Session внутри myfunction() и получить мой массив NumPy, используя .eval() вместо.numpy(), в этом случае мне нужно указать входные тензоры (я не понимаю, почему):

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'arg0' with dtype string
     [[node arg0 (defined at /home/.../semantic_fpn.py:101)  = Placeholder[dtype=DT_STRING, shape=<unknown>]]```

Is there an easy why for me to loop over my dataset with ```myfunction()``` (and its NumPy conversion) while multithreading/multiprocessing? I had additionally considered using a for-loop instead of ```.map()```, but I wouldn't know how to alter/write to records in a ```tf.Dataset```.
...