Keras:为什么必须只将嵌入层用作第一层?

时间:2019-01-05 02:12:43

标签: tensorflow keras

keras documentation中,声明嵌入层“只能用作模型的第一层”。这对我来说没有任何意义,我可能想在将输入传递给嵌入层之前对其进行重塑/展平,但这是不允许的。为什么必须仅将嵌入层用作第一层?

1 个答案:

答案 0 :(得分:1)

  

“只能用作模型的第一层。”这没有道理   给我

通常,嵌入层将离散值映射为连续值。在子序列层中,我们继续进行矢量表示,这意味着无需再次转换矢量。

  

我可能想对输入进行整形/展平,然后再将其传递给   嵌入层

当然,您可以重塑或展平输入,但是在大多数情况下是没有意义的。例如,假设我们的句子长度为30,并希望在将其传递给嵌入之前将其展平:

input_layer = Input(shape=(30))
flatten = Flatten()(input_layer)
embedd = Embedding(1000, 100)(flatten)

在上面的示例中,平坦层完全没有作用。展平前后,向量大小为[batch, 30]

让我们看另一个示例,假设我们的输入矢量为[batch,30,2]形状的2D。平整输入后,向量的大小为[batch, 60]。我们可以将它们输入到“嵌入”层中,但是在大多数情况下,它没有任何意义。实际上,我们破坏了要素之间的逻辑关系。

input_layer = Input(shape=(30, 2))
flatten = Flatten()(input_layer)
embedd = Embedding(1000, 100)(flatten)