LSTM 输出意外的预测形状

原文标题LSTM output unexpected predict shape

我想建立一个 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)

原文链接:https://stackoverflow.com//questions/71446727/lstm-output-unexpected-predict-shape

回复

我来回复
  • yunfei的头像
    yunfei 评论

    经过一些调试,我怀疑根本原因是因为我的 x 形状错误。最初,我的 x 测试形状是 (60, 1),在我将其重新整形为 (1, 60) 后,我每次得到 1 个输出为 y , shape (1)。如果我将我的测试 x 整形为 (60, 1),我得到预测的 y 形状为 (60,1)

    但是我遇到了一个新问题…

    如果我将它与我的 y_test 一起绘制,y_predict 就在中间。

    enter image description here

    我的 y_predict 完全没有意义,它们的范围很窄,从0.450.447

    enter image description here

    如果我接受@Frightera 的建议,使用np.where(y_predicted_result>0.454, 1, 0)将它们转换为 0 或 1,它看起来不起作用,通过将其与基本事实进行比较,不知道为什么会这样enter image description here

    2年前 0条评论