【问题标题】:How to produce 1 output with multiple input variables LSTM如何使用多个输入变量 LSTM 产生 1 个输出
【发布时间】:2020-01-31 02:12:02
【问题描述】:

我试图预测第二天的开盘价。我能够获得正确的格式以输入输入,即('Open','High' columns per day for n time)。但是,当我格式化为 3D 数组时,我的形状如下:

(1200, 60, 2)

X_train 有 1200 个样本,有 60 个时间步长(前 60 天的历史数据)和 2 个特征(打开和高位)

但是,当它在实现层时到达 keras 编码部分时,就会出现我的问题。这是我正在使用的代码:

regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 2)))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))

regressor.add(Dense(units = 1))

问题出在最后一行。我希望输出只有 1。所以基本上我希望输入系列的开盘价和最高价用于计算开盘价的最终奇异输出。但是,通过设置Dense(units = 1),会产生这个错误:

ValueError: Error when checking target: expected dense_1 to have shape (1,) but got array with shape (2,)

为了解决这个问题,我尝试将其更改为 2 Dense(units=2),但最终输出在图表上产生 2 条线,一条用于开路,另一条用于高,这不是我想要的。这是我想要 1 个输出的 2 个输出。我不确定如何处理这种情况。

regressor.summary()

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (None, 60, 50)            10600     
_________________________________________________________________
dropout_1 (Dropout)          (None, 60, 50)            0         
_________________________________________________________________
lstm_2 (LSTM)                (None, 60, 50)            20200     
_________________________________________________________________
dropout_2 (Dropout)          (None, 60, 50)            0         
_________________________________________________________________
lstm_3 (LSTM)                (None, 60, 50)            20200     
_________________________________________________________________
dropout_3 (Dropout)          (None, 60, 50)            0         
_________________________________________________________________
lstm_4 (LSTM)                (None, 50)                20200     
_________________________________________________________________
dropout_4 (Dropout)          (None, 50)                0         
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 102       
=================================================================
Total params: 71,302
Trainable params: 71,302
Non-trainable params: 0

【问题讨论】:

  • 我不确定为什么 Dense(2) 有效而不是 Dense(1);但是,如果您获得 2 个输出,为什么不只选择您需要的那个,在这种情况下是 open。在应用密集之前检查形状
  • @Kenan 因为 Dense 1 期待一个输出(打开),但层保持 2(打开,关闭)。我遇到的问题是我想使用开盘高点来计算 t + 1 之后的开盘价。我不知道如何创建数据帧以通过神经网络。
  • 可以显示regressor.summary()
  • @Kenan 我已更新帖子以显示摘要
  • 你的Y_train.shape是什么?

标签: python machine-learning keras neural-network lstm


【解决方案1】:

当密集层出现形状错误时,可能是您的标签张量不匹配。检查y_train 的形状是否为 [1200, 1] 以便您可以使用 1 的密集度。

【讨论】:

    猜你喜欢
    • 2019-01-14
    • 2021-08-09
    • 2021-07-25
    • 2021-12-17
    • 2020-06-03
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多