我应该在LSTM中使用哪个损失函数,为什么?

时间:2019-02-23 13:41:20

标签: python python-3.x tensorflow keras

我尝试逐步了解Keras和LSTM。现在我建立一个LSTM,输入是一个句子,输出是五个值的数组,每个值可以是0或1。

示例: 输入句子:“我讨厌cookie” 输出示例:[0,0,1,0,1]

为此,我正在使用keras库。

现在我不确定应该使用哪种损失函数。现在,我只知道两个预定义的损失函数要好一些,而两个函数似乎都不适合我的示例:

二进制交叉熵:如果我的输出仅为0或1,则很好 分类交叉熵:如果我有一个输出为1且所有其他值为0的数组,则很好。

对于我的示例,这两个函数都没有任何意义。您将使用什么以及为什么?

编辑

另一个问题:您将在Keras中使用哪种激活功能?

4 个答案:

答案 0 :(得分:1)

关于交叉熵的入门知识是,交叉熵损失或对数损失可衡量分类模型的性能,该模型的输出为0到1之间的概率值。

随着预测概率与实际标记的偏离,交叉熵损失增加。因此,当实际观察标签为1时预测0.01的概率将很糟糕,并导致高损失值。

理想模型的对数损失为0。对于LSTM模型,您可能需要或可能不需要此损失函数。这是link来回答您的问题的详细信息。

答案 1 :(得分:0)

This链接应使您了解交叉熵的作用以及何时使用它。激活功能是在实验基础上使用的。 keras中有很多激活功能,您可以根据自己的情况进行尝试。

请务必参考youtube上的this Stanford videothis blog,它们都将为您提供有关如何选择损失函数的基本知识。

祝你好运!

答案 2 :(得分:0)

您将要使用logistic激活。这会将每个logit推到0到1之间,代表该类别的概率。

然后使用categorical cross entropy。因为您使用的是逻辑激活而不是softmax激活,所以这不会使您的模型成为单个类分类器。

根据经验:

  • 后勤激活会将值推入0到1
  • softmax将值推入0到1之间,并使它们成为有效的概率分布(总和为1)
  • 交叉熵计算任何类型的分布之间的差异。

答案 3 :(得分:0)

我自己发现了一个非常好的链接,解释说最好的方法是使用“ binary_crossentropy”。

原因是数组中的每个值都可以为0或1。所以我们有一个二进制问题。

我也尝试过。使用我的数据集,利用二进制交叉熵,我能够获得92%的精度。有了分类交叉熵,我的准确率只有81%。

编辑

我忘记添加链接。对于多种输入/输出模型以及要使用的损失函数的很好的解释:

https://towardsdatascience.com/deep-learning-which-loss-and-activation-functions-should-i-use-ac02f1c56aa8