【问题标题】:Can't convert a tf.data.Dataset object to a numpy iterator无法将 tf.data.Dataset 对象转换为 numpy 迭代器
【发布时间】:2020-02-16 15:27:09
【问题描述】:

我正在使用 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 对象?

【问题讨论】:

    标签: python tensorflow tensorflow-datasets


    【解决方案1】:

    您使用了错误的tensorflowtensorflow_datasets 版本。

    请使用2.x,除非您出于某些非常具体的原因需要1.x

    如果您使用tensorflow 2.1.0tensorflow_datasets 2.0.0,则此代码有效。 tf.data.Dataset1.x 的正确文档可以在 here 找到,它确实没有这样的方法。

    【讨论】:

      【解决方案2】:

      正如@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) 列表输出中,因此会出现错误。

      【讨论】:

        猜你喜欢
        • 2021-12-15
        • 2019-03-26
        • 2019-06-20
        • 2021-04-02
        • 1970-01-01
        • 1970-01-01
        • 2018-06-02
        • 2021-09-04
        • 2021-05-31
        相关资源
        最近更新 更多