多输出多 Class Keras 模型

Multi-Output Multi-Class Keras Model

对于我的每个输入,我都有一个关联的 49x2 矩阵。这是一对输入输出对的样子

input :
[Car1, Car2, Car3 ..., Car118]

output :
[[Label1 Label2]
 [Label1 Label2]
      ...
 [Label1 Label2]]

其中 Label1 和 Label2 都是 LabelEncode,它们分别有 1200 和 1300 个不同的 classes.

只是为了确定这就是我们所说的多输出多 class 问题?

我试图使输出变平,但我担心模型无法理解所有相似的标签共享相同的 classes。

是否有 Keras 层处理输出这种特殊的数组形状?

一般来说,multi-class 问题对应于输出一组 classes 的概率分布的模型(通常根据实际 [=31= 的 one-hot 编码进行评分] 到 cross-entropy)。现在,无论您是将其构建为一个输出、两个输出、49 个输出还是 49 x 2 = 98 个输出,这都意味着有 1,200 x 49 + 1,300 x 49 = 122,500 个输出单元——这不是计算机无法做到的手柄,但也许不是最方便的东西。您可以尝试将每个 class 输出作为单个(例如线性)单位并四舍五入选择标签的值,但是,除非标签具有某些数字含义(例如顺序,大小等),否则不太可能工作。

如果输入中元素的顺序有某种意义(也就是说,打乱它会影响输出),我想我会通过 RNN 来解决这个问题,比如 LSTM 或双向 LSTM 模型,有两个输出。对输出使用 return_sequences=TrueTimeDistributed Dense softmax 层,对于每个 118 长的输入,您将有 118 对输出;然后你可以只使用时间样本加权来下降,例如,前 69 个(或者如果你使用的是双向模型,可以先下降 35 个,最后下降 34 个)并计算剩余 49 对的损失标签。或者,如果这对您的数据有意义(也许没有意义),您可以使用更高级的东西,例如 CTC (although Keras does not have it, I'm trying to integrate TensorFlow implementation into it without much sucess), which is also implemented in Keras (thanks @indraforyou)!.

如果输入的顺序没有意义但输出的顺序有意义,那么你可以有一个 RNN,其中你的输入是原始的 118 长向量加上一对标签(每个 one-hot编码),输出又是一对标签(又是两个 softmax 层)。这个想法是你在每一帧上获得 49x2 输出中的一个 "row",然后你将它与初始输入一起反馈给网络以获得下一帧;在训练时,您会将输入与 "previous" 标签(第一个标签为空标签)一起重复 49 次。

如果没有可利用的顺序关系(即输入和输出的顺序没有特殊含义),那么问题只能由最初的 122,500 个输出单元(加上所有隐藏的你可能需要正确的单位)。您还可以尝试在常规网络和 RNN 之间尝试某种中间地带,其中您有两个 softmax 输出,并且连同 118 长的向量,您包括所需输出的 ​​"id"(例如一个 49 长的 one-hot 编码向量);如果 49 个输出中每个标签的 "meaning" 相似或具有可比性,它可能会起作用。