Keras:使用categorical_crossentropy而不使用一键编码的目标数组

bcl*_*man 3 python keras

我有一个用于多类分类问题的Keras模型。我正在这样做:

model.compile(
    loss='categorical_crossentropy',
    optimizer='adam',
    metrics=['accuracy'],
)
Run Code Online (Sandbox Code Playgroud)

我目前有约100个功能,并且有约2000个可能的类。该类的一键编码会导致内存问题。

是否可以categorical_crossentropy不对类标签进行一次热编码的情况下与此Keras模型一起使用。例如,而不是使目标看起来像:

[0, 0, 0, 1, 0, 0, ...]

只是:

3

我查看了categorical_crossentropyKeras 中的源,并假设两个相同形状的张量。有没有办法解决这个问题并使用我描述的方法?

谢谢!

Kur*_*ker 5

如果您的目标是一键编码,请使用categorical_crossentropy。一键编码的示例:

[1,0,0]
[0,1,0]
[0,0,1]
Run Code Online (Sandbox Code Playgroud)

但是,如果目标是整数,请使用sparse_categorical_crossentropy。整数编码的示例:

1
2
3
Run Code Online (Sandbox Code Playgroud)


vli*_*ana 1

您能发布其余的代码吗?根据我的理解,当使用分类交叉熵作为损失函数时,最后一层应该使用 softmax 激活函数,为每个输出神经元生成与所述神经元类别对应的输入的概率,而不是直接生成单热向量。然后分类交叉熵计算为

在此输入图像描述

其中p是这些概率。通过仅输出类,您将无法访问这些概率,因此无法计算分类交叉熵。