首先,我是 stackoverflow 的新手,所以如果有办法改进我提出问题的方式,或者如果我错过了一些明显的东西,请向我指出!
我正在 Keras 中构建一个分类卷积网络,其中要求网络预测用于生成图像的参数。这些类以 5 个浮点值进行编码,例如类列表可能如下所示:
[[0.], [0.76666665], [0.5], [0.23333333], [1.]]
我想使用keras.utils.to_categorical(y, num_classes=5, dtype='float32')
对这些类进行one-hot编码功能。
但是,它返回以下内容:
array(
[
[1., 0., 0., 0., 0.],
[1., 0., 0., 0., 0.],
[1., 0., 0., 0., 0.],
[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.]
],
dtype=float32)
它只接受整数作为输入,因此它映射所有值 < 1.
至0
。
我可以通过将所有值乘以一个常量来规避这个问题,这样它们都是整数,我认为在 scikit learn 中也有一种方法可以解决这个问题,但这听起来像是一个巨大的解决方法,可以解决一个应该微不足道的问题仅在 keras 内,这让我相信我错过了一些明显的东西。
我希望有人能够指出一个仅使用 Keras 的简单替代方案。
最佳答案
另一种选择是使用 sklearn
中的 OneHotEncoder
:
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(categories='auto')
input = [[0.], [0.76666665], [0.5], [0.23333333], [1.]]
output = encoder.fit_transform(input)
print(input)
print(output.toarray())
输出:
[[0.0], [0.76666665], [0.5], [0.23333333], [1.0]]
[[ 1. 0. 0. 0. 0.]
[ 0. 0. 0. 1. 0.]
[ 0. 0. 1. 0. 0.]
[ 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 1.]]
关于python - 仅使用 keras 对 float 数组进行 one-hot 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54807052/