2

我正在試圖訓練Keras LSTM模型來預測序列中的下一個數字。Keras模型預測序列號

  1. 有什麼不對低於我的模型,我怎麼調試,當一種模式是無法學習
  2. 我如何決定使用
  3. ,我應該選擇而損失和優化PARAMS憑什麼這層類型編譯

我的輸入訓練數據是形狀(16000,10)等的下面

[ 
    [14955 14956 14957 14958 14959 14960 14961 14962 14963 14964] 
    [14731 14732 14733 14734 14735 14736 14737 14738 14739 14740] 
    [35821 35822 35823 35824 35825 35826 35827 35828 35829 35830] 
    [12379 12380 12381 12382 12383 12384 12385 12386 12387 12388] 
    ... 
] 

Correspon定輸出的訓練數據是形狀的(16000,1)如下面

[[14965] [14741] [35831] [12389] ...] 

作爲LSTM抱怨,我再成形訓練/測試數據

X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1) 
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1) 

這裏是最後的訓練/測試數據形狀

Total Samples: 20000 
X_train: (16000, 10, 1) 
y_train: (16000, 1) 
X_test: (4000, 10, 1) 
y_test: (4000, 1) 

這裏是我的模型

# Model configuration 
epochs = 2 
batch_size = 32 
hidden_neurons = 100 
output_size = 1 

# Create the model 
model = Sequential() 
model.add(LSTM(hidden_neurons, input_shape=(X_train.shape[1], X_train.shape[2]))) 
model.add(Dense(output_size)) 
model.compile(loss='mean_squared_error', optimizer='rmsprop', metrics=['accuracy']) 
print(model.summary()) 
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size) 

scores = model.evaluate(X_test, y_test, batch_size=batch_size, verbose=0) 
print("Model Accuracy: %.2f%%" % (scores[1]*100)) 

這裏是我的輸出

_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
lstm_3 (LSTM)    (None, 100)    40800  
_________________________________________________________________ 
dense_3 (Dense)    (None, 1)     101  
================================================================= 
Total params: 40,901 
Trainable params: 40,901 
Non-trainable params: 0 
_________________________________________________________________ 
None 
Epoch 1/2 
16000/16000 [==============================] - 11s - loss: 533418575.3600 - acc: 0.0000e+00  
Epoch 2/2 
16000/16000 [==============================] - 10s - loss: 532474289.7280 - acc: 6.2500e-05  
Model Accuracy: 0.00% 
+0

你有超過2個時代試試嗎? –

+0

是的,我想甚至10個時代,但損失並不太大下降,精度保持0 – Mosu

+0

這看起來像一個迴歸問題,在這種情況下,準確性是沒有意義的。 –

回答

1

試試這個代碼:

epochs = 30 
batch_size = 64 
hidden_neurons = 32 
output_size = 1 

# Create the model 
model = Sequential() 
model.add(LSTM(hidden_neurons, input_shape=(X_train.shape[1], X_train.shape[2]))) 
model.add(Dense(output_size, activation = 'elu')) 

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy']) 
print(model.summary()) 
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size) 

scores = model.evaluate(X_test, y_test, batch_size=batch_size, verbose=0) 
print("Model Accuracy: %.2f%%" % (scores[1]*100)) 
一般

,真的很難幫你,因爲我們需要一種可重複的例子,我們可以測試。但是,這裏有我的建議:

玩你的神經網絡的超參數,如:激活函數,選擇函數,層數,學習率等。

更新:

首先規範化數據是非常明智的建議。

+0

你好@Paddy,謝謝大家的響應,我跑在你的代碼甚至50個時代,並且只拿到了0.1%的精度。你能否詳細說明數據的規範化並舉例說明我的數據集。 – Mosu

+0

您好@ Paddy感謝您指出正常化。通過將輸入/輸出數據除以input_data的最大值,我將所有數據歸一化到0-1之間。最終的預測似乎很接近,但並不完美。讓我知道是否有其他想法可以幫助改善預測。 – Mosu

+0

有很多東西,你可以嘗試,strart與批規範化和輟學。我也會嘗試GRU而不是LSTM(只需簡單地用GRU替換LSTM)。此外,如果有一個學習率回調,請點擊此鏈接:https://machinelearningmastery.com/using-learning-rate-schedules-deep-learning-models-python-keras/ – Paddy

0

準確度不適合您模型的性能。你正在嘗試做的,是更多的是迴歸任務比分類任務。從你的損失函數可以看出,你正在使用'mean_squared_error'而不是像'categorical_crossentropy'。

此外,50個時期的訓練時間太少。如果你看看日誌(在你的原始問題中),你會發現每個時代的損失都在減少。你需要繼續訓練更多的時代,直到你看到損失已經穩定下來並且不會進一步減少。

第三,在將數據傳遞給擬合函數之前,您一定要規範化數據。這些值非常大,如果沒有標準化,算法可能不會收斂。

如果您仍然需要這個問題解決了,需要更多的幫助,讓我知道在評論,這樣我就可以使用代碼幫助。