Keras中嵌入层的尺寸问题

问题描述 投票:1回答:1

问题:我定义的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()时仍然遇到上述问题。

在这一点上,我很困惑,并且对这个问题的任何建议和/或见解都受到赞赏。

python tensorflow machine-learning keras kaggle
1个回答
0
投票

[作为后续措施,我将这段代码引入了另一个环境(Google Colab)中,并且在那里工作。因此,原始运行时环境(Kaggle)必须存在一个错误,并且代码本身也没有错。

© www.soinside.com 2019 - 2024. All rights reserved.