【问题标题】:Change of type via map method通过 map 方法改变类型
【发布时间】:2022-01-05 22:23:42
【问题描述】:

我正在与 Tensorflow 中有关 Datasetmap 方法的细节苦苦挣扎,如 here 所述。例子

dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
dataset = dataset.map(lambda x: x + 2)
list(dataset.as_numpy_iterator())

工作正常,但通过应用 map as 来更改元素类型

dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
dataset = dataset.map(lambda x: x / 10.0)
list(dataset.as_numpy_iterator())

产生错误信息

TypeError: `x` and `y` must have the same dtype, got tf.int32 != tf.float32.

因为应用的map函数的返回类型与其输入类型不同。为什么会这样?不能改变类型吗?如果是这样,如何将数据集中的元素类型更改为tf.float32,达到预期的效果?

请注意,实际数据集更复杂,但这是说明问题的最小示例。

【问题讨论】:

    标签: python tensorflow tensorflow-datasets


    【解决方案1】:

    我终于自己发现了。该问题与map 完全无关,但对于除法,需要显式转换。

    dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
    dataset = dataset.map(lambda x: tf.cast(x, tf.float32) / 10.0)
    list(dataset.as_numpy_iterator())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 2019-04-01
      • 2019-01-01
      相关资源
      最近更新 更多