【问题标题】:What loss function to use if the output layer (label) is composed of one-hot vectors and zero vectors?如果输出层(标签)由 one-hot 向量和零向量组成,使用什么损失函数?
【发布时间】:2020-03-12 06:32:59
【问题描述】:

我正在尝试使用 TensorFlow 和 Keras 设计基于深度学习的分类模型。在我的模型中,标签是一个可变长度的序列,例如:ABC、CADB 或 ABCDB。

为简单起见,在输出层我使用固定长度(等于最长序列的长度)来存储所有序列。因此,如果序列的长度比固定长度短,则该序列由 one-hot 向量(对应于序列的实际长度)和零向量(对应于剩余长度)表示。

例如,如果固定长度为 5,则一个序列 CADB 用一个 4 * 5 的矩阵表示,如下所示:

请注意:这个矩阵的前 4 列是 one-hot 向量,每个向量都有一个且只有一个 1 条目,其他所有条目都是 0。但是最后一列的条目都是0,可以看作是补零,因为序列不够长。

如果所有向量都是 one-hot 向量,分类交叉熵是损失函数的不错选择。但在我的情况下,一些向量(例如上图中的第 5 列)只有 0 个条目,分类交叉熵在这里不起作用。

所以我的问题是:在这种情况下使用什么损失函数

【问题讨论】:

  • 您能否添加更多关于您正在解决的问题的信息?以及您使用的架构类型?
  • 嗨@VivekMehta,感谢您的回复。我正在设计一个基于深度学习的分类模型。在我的模型中,标签是字母序列,而字母来自像 {A,B,C,D} 这样的有限集合。主要问题是序列具有可变长度。所以我对输出层有两种选择:要么先预测长度,要么使用带有零填充的固定长度。
  • 模型的输入是什么?在做文本分类吗?
  • 有点像文本分类。但关键是输出层复杂且难以设计。你有什么好主意吗? @VivekMehta
  • 是的,你是对的。那么您对我的问题有什么解决方案吗?

标签: machine-learning optimization keras deep-learning loss-function


【解决方案1】:

这就是我的理解:你有固定的序列长度作为输出。例如,序列的最大长度为 10,那么最后一层的输出长度为 10。在某些情况下,生成的长度序列只有 4,在这种情况下,最后 6 个输出将为 0。
这是一个多标签多-类分类问题。由于您在最后一个 Dense 层中使用 Keras,因此您可以使用 sigmoid 激活,而对于损失,您可以使用 binary_crossentropy。
虽然,不确定您使用的是哪种架构,但是 RNN、LSTM 等序列模型可能是比简单 Dense 更好的选择在序列生成的情况下层。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 2017-09-19
    • 2017-09-22
    • 2020-10-10
    • 1970-01-01
    相关资源
    最近更新 更多