首页 文章

keras分类和二元交叉熵

提问于
浏览
1

通过实现一些示例和寻找教程来使用keras后,我有点困惑我应该在我的项目中使用哪种交叉熵函数 . 在我的情况下,我想用LSTM模型预测多个标签,如(正面,负面和中性)在线评论 . 使用keras中的 to_categorical 方法将标签转换为单热矢量,这也记录在keras中:

(...)当使用categorical_crossentropy损失时,你的目标应该是分类格式(例如,如果你有10个类,每个样本的目标应该是一个10维向量,全0期望1为对应于样本类的索引) .

单热阵列如下:

array([[1., 0., 0.],
      [1., 0., 0.],
      [0., 0., 1.],

因为有多个标签我宁愿使用 categorical_crossentropy . 我也用这个标准实现了一个模型,但这个模型的准确率只有20%以上 . 使用具有sigmoid功能的 binary_crossentropy ,我的准确度已达到80% . 我真的很困惑,因为有些人争论以下statements

当使用带有2个以上标签的binary_crossentropy时,使用Keras方法“evaluate”计算的精度是完全错误的

而其他已经实现了high performanced model二进制交叉熵和多个标签,这是一种相同的工作流程 .

我们想要每个 class 的概率 . 所以我们在最后一层使用sigmoid,它给出0到1范围内的输出 . 如果我们的目标是找到类,那么我们将使用softmax

所以我只想知道是否有任何问题,如果我想选择binary_crossentropy,如下面的链接预测结果类 .

1 回答

  • 1

    你混淆了 multilabelmulticlass 分类 .

    multiclass 中,您的分类器从N个其他类中选择一个类 . 通常,进行多类分类的神经网络中的最后一层是softmax层 . 这意味着每个输出行总和为1(它形成了这N个类的概率分布) .

    另一方面, Multilabel 分类包括为N个问题做出二元选择 . 因此,使用二进制交叉熵是有意义的,因为大多数神经网络框架的工作方式使其行为类似于计算这些二进制任务的平均二进制交叉熵 . 在作为多标记分类器的神经网络中,sigmoid用作最后一层(您链接的Kaggle内核使用sigmoid作为最后一层中的激活) .

相关问题