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_dims
的 Lambda
图层为二维图层添加一个额外的维度。
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
而不是顺序模型,顺序模型不适合分支)
我有一个带有 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_dims
的 Lambda
图层为二维图层添加一个额外的维度。
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
而不是顺序模型,顺序模型不适合分支)