簡體   English   中英

Keras:MLP 的結果很好,但雙向 LSTM 的結果很差

[英]Keras: good result with MLP but bad with Bidirectional LSTM

我用Keras訓練了兩個神經網絡:一個MLP和一個Bidirectional LSTM

我的任務是預測一個句子中的單詞順序,所以對於每個單詞,神經網絡都需要 output 一個實數。 當處理一個有N個單詞的句子時,對output中的N個實數進行排序,得到integer個數代表單詞position。

我在數據集上使用相同的數據集和相同的預處理。 唯一不同的是,在LSTM數據集中,我添加了填充以獲得相同長度的序列。

在預測階段,使用LSTM ,我排除了從填充向量創建的預測,因為我在訓練階段屏蔽了它們。

MLP架構:

mlp = keras.models.Sequential()

# add input layer
mlp.add(
    keras.layers.Dense(
        units=training_dataset.shape[1],
        input_shape = (training_dataset.shape[1],),
        kernel_initializer=keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None),
        activation='relu')
    )

# add hidden layer
mlp.add(
    keras.layers.Dense(
        units=training_dataset.shape[1] + 10,
        input_shape = (training_dataset.shape[1] + 10,),
        kernel_initializer=keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None),
        bias_initializer='zeros',
        activation='relu')
    )

# add output layer
mlp.add(
    keras.layers.Dense(
        units=1,
        input_shape = (1, ),
        kernel_initializer=keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None),
        bias_initializer='zeros',
        activation='linear')
    )

雙向 LSTM 架構:

model = tf.keras.Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(Bidirectional(LSTM(units=20, return_sequences=True), input_shape=(timesteps, features)))
model.add(Dropout(0.2))
model.add(Dense(1, activation='linear'))

使用 LSTM 可以更好地解決該任務,它應該可以很好地捕獲單詞之間的依賴關系。

然而,使用MLP我取得了很好的結果,但使用LSTM的結果非常糟糕。

由於我是初學者,有人能理解我的LSTM架構有什么問題嗎? 我快瘋了。

提前致謝。

對於這個問題,我對 MLP 表現更好其實並不感到驚訝。

LSTM 的體系結構,無論是否是雙向的,都假設位置對結構非常重要。 彼此相鄰的詞比更遠的詞更有可能相關。

但是對於您的問題,您已經刪除了該位置並正在嘗試恢復它。 對於這個問題,具有全局信息的 MLP 可以在排序方面做得更好。

也就是說,我認為還有一些工作要做來改進 LSTM model。


您可以做的一件事是確保每個 model 的復雜性相似。 您可以使用count_params輕松完成此操作。

mlp.count_params()
model.count_params()

如果我不得不猜測,你的 LSTM 要小得多。 只有 20 個units ,對於 NLP 問題來說似乎很小。 我將512用於產品分類問題來處理字符級信息(大小為 128 的詞匯,大小為 50 的嵌入)。 在更大的數據集(如AWD-LSTM )上訓練的詞級模型可以進入數千個units

所以你可能想增加這個數字。 您可以通過增加 LSTM 中的units數直到參數計數相似,從而在兩個模型之間進行比較。 但是你不必止步於此,你可以繼續增加尺寸,直到你開始過度擬合或者你的訓練開始花費太長時間。

暫無
暫無

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

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