Keras:如何将向量附加到张量

Keras: how to append a vector to a tensor

我有一个带有 keras / tf 的网络,其中构建了两个分支: - 一个短的单词序列被转换成 300-dim 嵌入 - 另一个将相同的单词序列转换为 ngrams

然后我得到两个数据结构:

termwords.shape = (?, 42, 300)
termngrams.shape = (?, 42)

(我确保两个分支具有相同的 'length' 42,即最多 42 个单词和最多 42 个 ngram,需要时 padding/cutting)。然后我需要将它们合并到一个分支中以到达预测层。

但是

merged = merge([termwords, termngrams], mode='concat')

告诉我排名不匹配。我希望 concat 允许我将 'termngrams' 附加到 'termwords',这样我最终得到一个形状为 (?,42,301) 的数据结构。但我找不到合适的表达方式。

"rank" 错误告诉您张量的维数不同。一个是2D,一个是3D。

使用带有 expand_dimsLambda 图层为二维图层添加一个额外的维度。

import keras.backend as K
from keras.layers import Lambda

termngrams = Lambda(lambda x: K.expand_dims(x))(termngrams) #outputs (?,42,1)

然后使用 Contatenate() 层(默认情况下它使用最后一个轴,如您所愿)。

merged = Concatenate()([termwords,termngrams])

(假设您使用的是函数式 API Model 而不是顺序模型,顺序模型不适合分支)