代码之家  ›  专栏  ›  技术社区  ›  Codor

通过映射方法更改类型

  •  0
  • Codor  · 技术社区  · 3 年前

    我正在为Tensorflow中关于 map 的方法 Dataset 如所述 here .示例

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

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

    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.
    

    因为应用的映射函数的返回类型与其输入类型不同。为什么会这样?不可能更改类型吗?如果是,我如何实现将数据集中的元素类型更改为 tf.float32 ?

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

    0 回复  |  直到 3 年前
        1
  •  0
  •   Codor    3 年前

    我终于自己发现了。该问题与无关 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())