在 keras 文档 中指出嵌入层“只能用作模型中的第一层”。这对我来说没有意义,我可能想在将输入传递到嵌入层之前对其进行重塑/展平,但这是不允许的。为什么嵌入层必须仅用作第一层?
“只能用作模型中的第一层。”这没有意义 对我来说
通常,嵌入层将离散值映射为连续值。在子序列层中,我们有连续的向量表示,这意味着不需要再次转换向量。
我可能想在将输入传递给之前对其进行重塑/展平 嵌入层
当然,您可以重塑或展平输入,但在大多数情况下毫无意义。例如,假设我们有长度为 30 的句子,并且希望在将它们传递到嵌入之前将它们展平:
input_layer = Input(shape=(30))
flatten = Flatten()(input_layer)
embedd = Embedding(1000, 100)(flatten)
在上面的例子中,展平层根本没有任何效果。展平之前和之后我们的向量大小是
[batch, 30]
。
让我们看另一个例子,假设我们的输入是形状为 [batch, 30, 2] 的二维向量。将输入展平后,向量的大小为
[batch, 60]
。我们可以将它们输入 Embedding 层,但在大多数情况下,它没有任何意义。事实上,我们破坏了特征之间的逻辑关系。
input_layer = Input(shape=(30, 2))
flatten = Flatten()(input_layer)
embedd = Embedding(1000, 100)(flatten)