如何在Keras的LSTM的每个步骤中采用多种不同的损失函数

时间:2018-11-13 08:43:42

标签: keras lstm

我有一组句子及其分数,我想训练一个标记系统,该系统可以预测给定句子的分数,例如这样的例子:

(X =Tomorrow is a good day, Y = 0.9)

我想使用LSTM构建这样的标记系统,并考虑句子中每个单词之间的顺序关系,因此上面显示的训练示例如下:

(x1=Tomorrow, y1=is) (x2=is, y2=a) (x3=a, y3=good) (x4=day, y4=0.9)

在训练此LSTM时,我希望使用softmax分类器的前三个时间步骤,以及使用MSE的最后一步。显然,此LSTM中使用的损耗函数由两个不同的损耗函数组成。在这种情况下,Keras似乎没有提供直接解决我的问题的方法。另外,我不确定我建立标记系统的方法是否正确。

1 个答案:

答案 0 :(得分:1)

Keras还支持多种损失功能:

   model = Model(inputs=inputs,
                 outputs=[lang_model, sent_model])

    model.compile(optimizer='sgd', 
                  loss=['categorical_crossentropy', 'mse'],
                  metrics=['accuracy'], loss_weights=[1., 1.])

根据您的解释,我认为您需要一个模型,首先在NLP域中基于先前的令牌预测令牌,在NLP域中通常将其称为Language model,然后计算得分(我认为这是一种情感)(它适用于其他域。

为此,您可以使用LSTM训练语言模型,并为排名任务选择LSTM的最后输出。为此,您需要定义两个损失函数:categorical_crossentropy用于语言模型,MSE用于排名任务。

本教程将对您有所帮助:https://www.pyimagesearch.com/2018/06/04/keras-multiple-outputs-and-multiple-losses/