我有一个带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)。但我找不到表达这种方式的正确方法。
答案 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
而不是顺序模型,顺序模型不适合分支)