【问题标题】:Why Keras Embedding layer's input_dim = vocab_size + 1为什么 Keras Embedding 层的 input_dim = vocab_size + 1
【发布时间】:2021-06-17 12:04:16
【问题描述】:

在TensorFlow教程Basic text classification的这段代码sn-p中,

model = tf.keras.Sequential([
  layers.Embedding(max_features + 1, embedding_dim),
  layers.Dropout(0.2),
  layers.GlobalAveragePooling1D(),
  layers.Dropout(0.2),
  layers.Dense(1)])

据我了解,max_features 是词汇的大小(索引 0 用于填充,索引 1 用于 OOV)。

另外,我做了个实验,设置layers.Embedding(max_features, embedding_dim),教程还是能顺利跑通的(截图如下)。

那么为什么我们需要 input_dim=max_features + 1 呢?

【问题讨论】:

  • 感谢您的建议。我读过那个问题。首先,这个问题有点过时了,因为 Keras 更新了他们的文档。我的理解是我们设置 input_dim=|vocabulary| + 1 如果 mask_zero=True。但在我的问题中并非如此,因为教程示例没有启用遮罩,因为它只是将嵌入层与密集层连接起来。

标签: tensorflow keras embedding


【解决方案1】:

我在这里也有同样的问题。我在想他们在这里犯了一些错误。他们最初可能希望为带有填充的 RNN 执行此操作,这样 0 就不是词汇表的一部分。所以,max_features + 1 就是 input_dimension

【讨论】:

    【解决方案2】:

    该示例非常具有误导性 - 可以说是错误的,尽管示例代码在该执行上下文中实际上并没有失败。

    根据Embedding layer documentation,嵌入层输入维度是最大整数索引+1,而不是词汇量+1,这就是作者的意思您引用的代码中有示例。

    在下面我的玩具示例中,您可以看到从 0 开始的整数索引是如何工作的:

    坦率地说,作者似乎很幸运,因为他使用的是 Sequential 模型类型并且不需要序列化模型。在这种特殊情况下,示例代码有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 2021-09-02
      • 2020-06-04
      • 2020-01-04
      • 2020-07-02
      • 2018-05-09
      • 2018-09-11
      相关资源
      最近更新 更多