将输入与嵌入和密集层合并

时间:2016-07-19 07:59:50

标签: python keras

我有两个输入,x_a和x_b,其中x_a是分类变量(因此是嵌入),x_b是通常的特征矩阵。基本上我想将x_b乘以权重矩阵W_b,这是一个from keras.models import Sequential from keras.layers import Dense, Activation, Embedding, Merge encoder_cc = Sequential() # Input layer for countries(x_a) encoder_cc.add(Embedding(cc_idx.max(),64)) # Input layer for triggers(x_b) encoder_trigger = Sequential() # This should effectively be <W_b> encoder_trigger.add(Dense(64, input_dim=10, init='uniform')) model = Sequential() model.add(Merge([encoder_cc, encoder_trigger], mode='concat')) 矩阵,这样我最终得到64维输出。

Exception: "concat" mode can only merge layers with matching output shapes except for the concat axis. Layer shapes: [(None, 1, 64), (None, 64)]

然后我想在我做通常的神经网络之前合并(合并)这两个。除了我收到错误:

{{1}}

有关如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:3)

嵌入层用于序列,然后输出具有形状3D(None,sequence_length,embedding_size)的张量,在您的情况下(None,1,64),因为您的输入长度为1。

纠正这种情况的方法是添加&#34; Flatten()&#34;像Stephan建议的那样将图层分层到您的encoder_cc模型,或添加一个&#34;重塑((64,))&#34;在嵌入层之后。 这将强制输出形状为(None,64)并与其他模型的形状相匹配。

我希望这会有所帮助。