通过 map 方法更改类型

Change of type via map method

我正在努力解决 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 应用为

来更改元素类型
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函数的return类型与其输入类型不一样。为什么会这样?不能改变类型吗?如果是这样,我怎样才能将数据集中的元素类型更改为 tf.float32?

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

我终于自己找到了。该问题与 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())