我正在使用Tensorflow 1.14.0和tensorflow_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'
根据tensorflow_datasets docs,这应该可以工作。
为什么不呢?为什么我首先要获得一个DatasetV1Adapter对象?
答案 0 :(得分:1)
您使用了错误的tensorflow
和tensorflow_datasets
版本。
除非出于某些特殊原因需要2.x
,否则请使用1.x
。
如果您使用tensorflow 2.1.0
和tensorflow_datasets 2.0.0
,则此代码有效。在here中可以找到1.x
中tf.data.Dataset
的正确文档,并且确实没有这种方法。
答案 1 :(得分:1)
如@szymon所述,tensorflow-1.14不支持as_numpy_iterator
。您应该将代码移至tf>=2.0
一个我经常使用的方便技巧是在一个bash shell中启动REPL python shell,并使用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)
,因此会出现错误。