对于我的每个输入,我有一个49x2矩阵关联。这是1输入输出对的样子
0
Label1和Label2都是LabelEncode,它们分别有1200和1300个不同的类。
只是为了确保这就是我们所说的多输出多类问题?
我试图压缩输出,但我担心模型不会理解所有类似的Label共享相同的类。
是否有Keras图层处理输出这种特殊的阵列形状?
答案 0 :(得分:2)
通常,多类问题对应于在类集上输出概率分布的模型(通常通过交叉熵对实际类的单热编码进行评分)。现在,无论您是将其构造为单个输出,两个输出,49个输出还是49 x 2 = 98个输出,这意味着具有1,200 x 49 + 1,300 x 49 = 122,500输出单位 - 这不是计算机无法做到的处理,但也许不是最方便的事情。您可以尝试将每个类输出设置为单个(例如线性)单位并将其四舍五入以选择标签,但是,除非标签具有某些数字含义(例如,订单,尺寸等),即不太可能工作。
如果输入中元素的顺序具有某种意义(即,改组它会影响输出),我想我会通过RNN来解决问题,如LSTM或双向LSTM模型,有两个输出。对输出使用return_sequences=True
和TimeDistributed
Dense
softmax图层,对于每118个长输入,您有118对输出;那么你可以只使用时间样本加权来减少,例如,前69个(或者可能做一些事情,比如你先使用双向模型将第一个减少35个,最后减少34个)并用剩下的49个来计算损失。成对的labellings。或者,如果这对你的数据有意义(也许它没有),你可以使用更先进的东西,如CTC (尽管Keras没有它,我试图将TensorFlow implementation整合到其中并且没有多少成功,这是also implemented in Keras(感谢@indraforyou)!。
如果输入中的顺序没有意义但输出的顺序没有意义,那么你可以有一个RNN,你的输入是原始的118长矢量加一对标签(每个一个热编码),以及输出又是一对标签(同样是两个softmax层)。这个想法是你得到一个" row"每帧的49x2输出,然后将其与初始输入一起送回网络以获得下一个;在训练时间,您将输入重复49次以及之前的" label(第一个的空标签)。
如果没有顺序关系可以利用(即输入和输出的顺序没有特殊含义),那么问题只会由最初的122,500输出单位(加上所有隐藏单位)真实地表示可能需要那些正确的)。您还可以在常规网络和RNN之间尝试某种中间接地,其中您有两个softmax输出,并且与118长矢量一起,您包括" id"您想要的输出(例如,作为49长的单热编码矢量);如果"含义"每个标签在49个输出中的每一个都相似或相当,它可能有用。