我正在尝试使用TensorFlow和Keras设计基于深度学习的分类模型。在我的模型中,标签是长度可变的序列,例如:ABC,CADB或ABCDB。
为简单起见,在输出层中,我使用固定长度(等于最长序列的长度)来存储所有序列。因此,如果序列的长度短于固定长度,则该序列由一个热向量(对应于序列的实际长度)和零个向量(对应于剩余长度)表示。
例如,如果固定长度为5,则序列CADB用4 * 5矩阵表示,如下所示:
请注意:此矩阵的前4列是单热向量,每个向量只有一个且只有一个1项,所有其他项均为0。但是最后一列的条目全为0,由于序列不够长,因此可以将其视为零填充。
如果所有向量都是单热向量,则分类交叉熵是损失函数的不错选择。但是在我的情况下,某些矢量(例如,上图中的第5列)只有0个条目,分类交叉熵在这里不起作用。
所以我的问题是:在这种情况下要使用什么损失函数?
答案 0 :(得分:1)
这是我的理解:您具有固定的序列长度作为输出。例如,假设序列的最大长度为10,那么最后一层的输出长度为10。在某些情况下,生成的长度序列仅为4,在这种情况下,最后6个输出将为0。
这是一个多标签多类分类问题。由于您在最后一个密集层中使用Keras,因此可以使用Sigmoid激活,而对于丢失,则可以使用binary_crossentropy。
尽管不确定所使用的体系结构,但是像RNN,LSTM这样的序列模型可能是更好的选择,而不是简单产生序列时的致密层。