【问题标题】:Size issue with embedding layer in KerasKeras 中嵌入层的大小问题
【发布时间】:2020-06-20 23:12:52
【问题描述】:

问题: 正如我得到的错误所暗示的那样,我定义的 Keras 嵌入层的大小似乎不正确。

InvalidArgumentError: indices[19,0] = 99 is not in [0, 31)

代码: Kaggle 笔记本 - https://www.kaggle.com/benseto/tf-ffnnregressor 不确定您是否需要一个帐户才能访问代码。如果是这样,我会考虑将其导出到外部。

问题总结:

我正在使用旧的“推土机蓝皮书”Kaggle 竞赛进行学习。我正在尝试为这个回归练习(价格预测)训练一个前馈神经网络。因为分类特征有许多独特的特征,我采取的策略是为这些分类特征中的每一个训练一个 Keras 嵌入层,而不是一次性编码(这会使数据帧变得难以处理)。

我几乎已经成功地完成了这项工作,但我认为嵌入层的大小存在错误:

fit() 期间出错:

InvalidArgumentError: indices[19,0] = 99 is not in [0, 31)

通过stackoverflow搜索,人们得出这是由于Embedding层的大小不正确,通常输入维度需要为vocab_size + 1。

要为每个分类特征生成单独的 Keras 嵌入层,链接笔记本的单元格 #25 定义了每个嵌入层:

# Build layer to ingest each categorical features vector
def build_embedding_layer(num_categories, inputs, concats, name = 'categorical'):
    categories = num_categories + 1             # Per Keras docs, embedding input dim should be input_size + 1
    dimensions = min(50, categories // 2 + 1)

    input = keras.layers.Input(shape = (1,), name = name)
    embedding = keras.layers.Embedding(categories, dimensions, input_length = 1)(input)
    embedding = keras.layers.Reshape(target_shape = (dimensions,))(embedding)

    inputs.append(input)
    concats.append(embedding)

在上述函数中,num_categories 是每个特征向量的唯一记录数,而 input 和 concats 表示保存每个特征的最终输入张量的数组。

我尝试了什么: 我尝试手动将嵌入层的大小增加到一个很大的数字,但在调用 fit() 时仍然遇到了上述问题。

在这一点上,我被困住了,感谢您对此问题的任何建议和/或见解。

【问题讨论】:

    标签: python tensorflow machine-learning keras kaggle


    【解决方案1】:

    作为后续行动,我已将此代码提升到不同的环境 (Google Colab) 中,并且它在那里工作。所以,原来的运行环境(Kaggle)肯定有bug,代码本身也没有问题。

    【讨论】:

      猜你喜欢
      • 2020-06-03
      • 2021-09-02
      • 1970-01-01
      • 2019-04-23
      • 2019-05-17
      • 2022-12-31
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      相关资源
      最近更新 更多