我想建立一個 LSTM 模型來預測類別標簽,基于 60 天的資料
基本上:
Input - 60 days timewindow, 1 feature
- train data x (2571, 60, 1) y (2571, 1)
- test data x (60, 1), y (1)
Output - 1 label either 0 or 1
我不確定的一件事是,我應該將訓練/測驗 x 塑造為 (60,1) 還是 (1, 60)
我制作了一個 LSTM 網路,例如:
Model: "sequential_5"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_15 (LSTM) (None, 60, 128) 66560
dropout_10 (Dropout) (None, 60, 128) 0
lstm_16 (LSTM) (None, 60, 64) 49408
dropout_11 (Dropout) (None, 60, 64) 0
lstm_17 (LSTM) (None, 16) 5184
dense_5 (Dense) (None, 1) 17
=================================================================
Total params: 121,169
Trainable params: 121,169
Non-trainable params: 0
_________________________________________________________________
這是我的代碼:
lookback_time_win = 60
num_features = 1
model = Sequential()
model.add(LSTM(128, input_shape=(time_window_size, num_features), return_sequences=True))
model.add(Dropout(0.1))
model.add(LSTM(units=64, return_sequences=True))
model.add(Dropout(0.1))
# no need return sequences from 'the last layer'
model.add(LSTM(units=16))
# adding the output layer
model.add(Dense(units=1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
但是在訓練之后,我將函式 model.predict 稱為:
y = model.predict(x_test)
而不是我預期的 0 或 1,我得到的 y 形狀像 (60, 1)
uj5u.com熱心網友回復:
經過一些除錯,我懷疑根本原因是因為我的 x 形狀錯誤。最初,我的 x 測驗形狀是 (60, 1),在我將其重塑為 (1, 60) 后,我每次都會得到 1 個輸出為 y,形狀 (1)。如果我將我的測驗 x 塑造為 (60, 1),我得到預測的 y 形狀為 (60,1)
但是我遇到了一個新問題...
如果我將它與我的 y_test 一起繪制,y_predict 就在中間。

我的 y_predict 完全沒有意義,它們的范圍非常0.45窄0.447

如果我接受@Frightera 的建議,使用 np.where(y_predicted_result>0.454, 1, 0)將它們轉換為 0 或 1,通過將其與基本事實進行比較,它看起來不起作用,不知道為什么會這樣

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/443316.html
