TF.data.dataset.map (map_func) с активным режимом - PullRequest
0 голосов
/ 26 мая 2018

Я использую TF 1.8 с активным режимом ожидания.

Я не могу напечатать пример внутри mapfunc.Когда я запускаю tf.executing_eagerly () из mapfunc, я получаю «False»

import os
import tensorflow as tf
tf.logging.set_verbosity(tf.logging.ERROR)

tfe = tf.contrib.eager
tf.enable_eager_execution()
x = tf.random_uniform([16,10], -10, 0, tf.int64)
print(x)
DS = tf.data.Dataset.from_tensor_slices((x))


def mapfunc(ex, con):
    import pdb; pdb.set_trace()
    new_ex = ex + con
    print(new_ex) 
    return new_ex

DS = DS.map(lambda x: mapfunc(x, [7]))
DS = DS.make_one_shot_iterator()

print(DS.next())

print (new_ex) выводит:

Tensor("add:0", shape=(10,), dtype=int64)

За пределами mapfunc, он работает нормально.Но внутри него переданный пример не имеет ни значения, ни атрибута .numpy ().

1 Ответ

0 голосов
/ 26 мая 2018

Преобразования tf.data фактически выполняются в виде графика, поэтому тело самой функции карты не выполняется с нетерпением.См. # 14732 для более подробного обсуждения этого вопроса.

Если вам действительно нужно активное выполнение для функции карты, вы можете использовать tf.contrib.eager.py_func, поэтому что-то вроде:

DS = DS.map(lambda x: tf.contrib.eager.py_func(
  mapfunc,
  [x, tf.constant(7, dtype=tf.int64)], tf.int64)
# In TF 1.9+, the next line can be print(next(DS))
print(DS.make_one_shot_iterator().next())

Надеюсь, это поможет.

Обратите внимание, что при добавлении py_func к набору данных однопоточный интерпретатор Python будет в цикле для каждого создаваемого элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...