我有一个用于多类分类问题的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 中的源,并假设两个相同形状的张量。有没有办法解决这个问题并使用我描述的方法?
谢谢!
如果您的目标是一键编码,请使用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)
您能发布其余的代码吗?根据我的理解,当使用分类交叉熵作为损失函数时,最后一层应该使用 softmax 激活函数,为每个输出神经元生成与所述神经元类别对应的输入的概率,而不是直接生成单热向量。然后分类交叉熵计算为
其中p是这些概率。通过仅输出类,您将无法访问这些概率,因此无法计算分类交叉熵。