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

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

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

machine-learning - 如果输出层(标签)由一热向量和零向量组成,应该使用什么损失函数?-LMLPHP

请注意:此矩阵的前4列是单热向量,每个向量只有一个1条目,而其他所有条目均为0。但是最后一列的条目全为0,由于序列不够长,因此可以将其视为零填充。

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

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

最佳答案

这就是我的理解:您具有固定的序列长度作为输出。例如,假设序列的最大长度为10,那么最后一层的输出长度为10。在某些情况下,生成的长度序列仅为4,在这种情况下,最后6个输出将为0。这是多标签多类分类问题。由于在最后一个密集层中使用Keras,因此可以使用S型激活,而对于丢失,可以使用binary_crossentropy。尽管(不确定使用的是哪种体系结构),但是在生成序列的情况下,与简单的密集层相比,像RNN,LSTM这样的序列模型会更好。

关于machine-learning - 如果输出层(标签)由一热向量和零向量组成,应该使用什么损失函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58888308/

10-13 03:07