Не удается преобразовать объект tf.data.Dataset в numpy итератор - PullRequest
0 голосов
/ 16 февраля 2020

Я использую Tensorflow 1.14.0 и tenorflow_datasets 1.2.0

При попытке запустить следующий код

import tensorflow as tf
import tensorflow_datasets as tfds

smallnorb = tfds.load("smallnorb")
smallnorb_train, smallnorb_test = smallnorb["train"], smallnorb["test"]
assert isinstance(smallnorb_train, tf.data.Dataset)
smallnorb_train = smallnorb_train.as_numpy_iterator()

Я получаю следующую ошибку

AttributeError: 'DatasetV1Adapter' object has no attribute 'as_numpy_iterator'

Согласно документам tenorflow_datasets это должно работать.

Почему не будет? И почему я получаю объект DatasetV1Adapter?

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Как упомянуто @szymon, tenorflow-1.14 не поддерживает as_numpy_iterator. Вы должны переместить свой код на tf>=2.0

Удобный совет, который я часто использую, - запуск оболочки REPL python в одной из оболочек bash и использование dir(tf.data.Dataset) для получения списка всех атрибутов и методов, которые могут быть вызваны из этого объекта. Вы также можете использовать help(tf.data.Dataset.xxx) для параметров и возвращаемых значений этого метода.

>>> import tensorflow as tf
>>> dir(tf.data.Dataset) 
... <output>

>>> help(tf.data.Dataset.from_tensor_slices)
... and so on

Если вы сделаете то же самое, вы обнаружите, что as_numpy_iterator не будет присутствовать в выводе списка dir(tf.data.Dataset), следовательно, ошибка.

1 голос
/ 16 февраля 2020

Вы используете неправильные версии tensorflow и tensorflow_datasets.

Пожалуйста, используйте 2.x, если вам не нужно 1.x по очень конкретным c причинам.

Этот код работает, если вы используете tensorflow 2.1.0 и tensorflow_datasets 2.0.0. Надлежащую документацию для 1.x из tf.data.Dataset можно найти здесь , и такого метода у нее действительно нет.

...