tensorflow Tensor评估为None

db2dz4w8  于 4个月前  发布在  其他
关注(0)|答案(2)|浏览(41)

系统信息

  • TensorFlow版本(您正在使用的):TF1和TF2
  • 您是否愿意为其做出贡献(是/否):取决于所需的更改程度。
    描述功能及其当前行为/状态。

我有一些TF数据集(包括TF1和TF2),我想对它们进行转换(dataset.map)。Transforms将数据集打包成一个新的结构,这个结构可能包含一些None元素。如果我尝试将元素设置为None,我会收到一些“获取错误”,提示None不被支持。我在想是否有一个值可以评估为None?如果没有,我们能添加一个支持吗?
另一种选择是创建一个迭代器,并在获取的项目上手动执行map操作,但这会破坏外部API(因为我们现在不再使用tf.Datasets,而是使用迭代器)。

这将如何改变当前的API?

不确定。

谁将从这个特性中受益?

DeepMind内部。

其他信息。

huwehgph

huwehgph1#

你好,@hamzamerzic !你能分享一个用例或简单的代码片段来解释上述功能请求吗?

km0tfn4u

km0tfn4u2#

非常感谢您的快速回复!这里有一个例子:

from typing import NamedTuple, Optional

import numpy as np
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

import tensorflow_datasets as tfds

class DatasetOutputs(NamedTuple):
  image: np.array
  label: np.array
  metadata: Optional[np.array]

def _map_fn(data):
  return DatasetOutputs(
      image=tf.cast(data['image'], tf.float32) / 255.,
      label=data['label'],
      metadata=None)  # Problematic.

ds = tfds.load('mnist', split='train')
ds = ds.map(_map_fn)
data = next(iter(tfds.as_numpy(ds)))

这会导致错误
TypeError: Argument 获取 = None has invalid type "NoneType". Cannot be None
这个简单的复现器似乎在TF2中表现得很好。但是,在我特定的用例中,当我尝试使用TF2时,我试图使用的数据集似乎在其他地方失败了。

相关问题