python - 仅使用 keras 对 float 数组进行 one-hot 编码

标签 python keras one-hot-encoding

首先,我是 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/

相关文章:

machine-learning - 使用 OneHotEncoder 进行机器学习时出现 "ValueError: could not convert string to float"

python - 将 Numpy 二维数组转换为字典映射列表

python - 强制显示索引值

python - numpy 数组的谱质心

python - 将 Scikit-Learn OneHotEncoder 与 Pandas DataFrame 结合使用

python - 字符串分类特征的一种热编码

0 的 Python reduce() 函数

tensorflow - 如何从不同时期的 Mask R-CNN 开始训练?

tensorflow - Keras 前 5 名预测

tensorflow - 用于图像分类的多输入卷积神经网络