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

时间:2018-04-12 13:56:34

标签: tensorflow keras dimensions

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

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

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

(我确保两个分支具有相同的'长度'为42,即最多42个字和最多42个ngrams,填充/切割需要的地方)。然后我需要将这些合并到一个分支中以到达预测层。

但是

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

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

1 个答案:

答案 0 :(得分:1)

“排名”错误告诉您张量的维度不同。一个是2D,另一个是3D。

使用Lambda图层与expand_dims一起为2D图层添加额外尺寸。

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而不是顺序模型,顺序模型不适合分支)