【发布时间】: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