嵌入数值类别

时间:2017-08-04 02:00:22

标签: python machine-learning keras lstm python-embedding

我有一个vanilla LSTM模型,它通过输出6个类别的概率分布对输入数据进行分类。没什么太疯狂的。

现在,模型工作并给我一个输出,其中我采取最大值来分类我的输入。但是,我认为我们可以做得更多。

而不是实际的类别,对我来说,看到我的LSTM输出的概率分布是非常有用的。

之类的东西
[ 0.0528042 ,  0.11904617,  0.27744624,  0.37874526,  0.13942425,
         0.03253399]

因为这些信息可以告诉我第二个最佳猜测,第三个等,以及LSTM将其标记为某个类别的信心。

有趣的是,我的类别非常相关;比方说,如果第1类和第2类对应的是“非常大的价值”。我知道我的价值很大,而不是第3类和第4类,它们的价值很小'并且'真的很小的价值'。

有没有办法利用类别密切相关的事实,以获得更好的输出?当然,我不想简单地有两个输出('大'和'小'),因为概率分布对我来说非常重要。

1 个答案:

答案 0 :(得分:2)

需要实现自定义损失函数来编码类间关系。

假设你的6个类被排序(比如["extremely large", "very large", "large", "small", "very small", "extremely small"]),合适的损失可能是1D-Wasserstein距离(a.k.a。earth mover's distance)。

有一维EMD的封闭形式公式。例如,您可以尝试实现this paper中描述的内容。

1D-EMD