TensorFlow: возможно ли отобразить функцию на набор данных, используя цикл for? - PullRequest
1 голос
/ 20 мая 2019

У меня есть tf.data.TFRecordDataset и (вычислительно дорогая) функция, которую я хочу сопоставить с ней.Я использую TensorFlow 1.12 и стремимся к исполнению, а функция использует NumPy ndarray интерпретации тензоров в моем наборе данных, используя EagerTensor.numpy().Тем не менее, код внутри функций, которые передаются tf.Dataset.map(), не выполняется с нетерпением, поэтому преобразование .numpy() там не работает, и .map() больше не вариант.Можно ли выполнить цикл для набора данных и изменить примеры в нем?Кажется, что просто назначить их не работает.

1 Ответ

1 голос
/ 20 мая 2019

Нет, не совсем.

Набор данных по своей природе лениво оценивается и не может быть назначен таким образом - концептуально попытайтесь представить его как конвейер, а не переменную: каждое значение читается, пропускается через любые операции map(), batch() ops, и т. д. и всплыли на модель по мере необходимости.«Назначить» значение означало бы записать его на диск в файле .tfrecord, и вряд ли когда-либо будет поддерживаться (эти файлы специально предназначены для быстрого чтения без случайного доступа).

Вместо этого вы можете использовать TensorFlow для выполнения предварительной обработки и использовать TfRecordWriter для записи в НОВУЮ запись tf с завершенной дорогостоящей предварительной обработкой, а затем использовать этот новый набор данных в качестве входных данных для вашей модели.Если у вас есть свободное место на диске, это может быть вашим лучшим вариантом.

...