根据我的测试,Keras中的to_categorical()
返回的是float64
类型的ndarray
。我想知道为什么默认不是float32
,因为float32
可以被GPU处理。据我所知,GPU无法处理float64
。to_categorical()
的文档并未说明返回类型应该是什么。因此,我猜测这可能是一个实现细节,并不属于协议/接口的一部分。总结一下,有两个问题:
- 为什么是
float64
而不是float32
? - 既然返回类型可能不属于接口的一部分,因此可能会改变,那么是否不应该依赖它?如果是这种情况,如果在意类型的话,应该始终附加一个
astype()
调用。
回答:
-
问题出在
to_categorical
中使用的numpy.zeros
函数这里。默认情况下,它会创建类型为float64
的数组。 -
不幸的是,我建议您测试解决此类问题的方案,因为目前数据类型的统一性无法保证。通常,大多数转换器会以提供的格式返回数据,因此只要您的基础数据是
float32
,它就会保持float32
。但也有一些特殊情况,比如to_categorical
。
在我的项目中,我使用docker
来确保在所有用于训练/推理的机器上保持一致性。