【问题标题】:merging inputs with embeddings and dense layer将输入与嵌入和密集层合并
【发布时间】:2016-07-19 07:59:49
【问题描述】:

我有两个输入,x_a 和 x_b,其中 x_a 是分类变量(因此是嵌入),x_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)]

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

【问题讨论】:

  • 尝试在两个模型的末尾添加 Flatten() 层

标签: python keras


【解决方案1】:

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

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

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 2016-03-24
    • 2022-07-22
    • 2016-10-24
    • 2019-11-13
    • 2019-05-19
    • 2021-07-20
    • 2018-05-02
    • 2021-02-07
    相关资源
    最近更新 更多