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

  • 本文关键字:合并 python keras
  • 更新时间 :
  • 英文 :


我有两个输入,x_a和x_b,其中x_a是分类变量(因此是嵌入),x_b是常用特征矩阵。基本上,我想用权重矩阵W_b乘以x_b,W_b是10x64矩阵,这样我就得到了64维的输出。

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'))

然后我想在做通常的神经网络的事情之前把这两个结合起来。除了我得到错误:

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

我有什么想法可以解决这个问题吗?

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

纠正这种情况的方法是,按照Stephan的建议,在encoder_cc模型中添加Flatten()层,或者在嵌入层之后添加Reshape((64,))。这将强制输出形状为(None, 64),并与其他模型的形状相匹配。

我希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新