簡體   English   中英

Keras 中嵌入層的大小問題

[英]Size issue with embedding layer in Keras

問題:我定義的 Keras 嵌入層的大小似乎不正確,正如我得到的錯誤所暗示的那樣。

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

代碼: Kaggle notebook - 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 是每個特征向量的唯一記錄數,而輸入和連接表示保存每個特征的最終輸入張量的數組。

我嘗試了什么:我嘗試手動將嵌入層的大小增加到一個很大的數字,但在調用 fit() 時仍然遇到上述問題。

在這一點上,我被卡住了,對此問題的任何建議和/或見解表示贊賞。

作為后續工作,我已將此代碼提升到不同的環境 (Google Colab) 中,並且在那里運行。 所以,原先的運行環境(Kaggle)肯定有bug,代碼本身沒有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM