问题: 我所定义的错误提示,我定义的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)
通过搜索堆栈溢出,人们已经得出结论,这是由于嵌入层的大小不正确,通常输入维需要为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()时仍然遇到上述问题。
在这一点上,我很困惑,对于这个问题的任何建议和/或见解都将受到赞赏。
答案 0 :(得分:0)
作为后续,我将这段代码引入了另一个环境(Google Colab)中,并且在那里工作。因此,原始运行时环境(Kaggle)必须存在一个错误,并且代码本身也没有错。