【问题标题】:How to predict more than one value for each sequence in Keras? LSTM Layers如何预测 Keras 中每个序列的多个值? LSTM 层
【发布时间】:2020-05-23 07:03:26
【问题描述】:

首先,如果问题没有意义对不起,请纠正我

所以...我有这个顺序模型。

    model = Sequential()

    model.add(LSTM( 524 , input_shape = (sequeces, size) , return_sequences = True ))
    model.add(Dropout(0.2))
    model.add(BatchNormalization())

    model.add(LSTM( 256, return_sequences = True ))
    model.add(Dropout(0.1))
    model.add(BatchNormalization())

    model.add(LSTM( 128 ))
    model.add(Dropout(0.2))
    model.add(BatchNormalization())

    model.add( Dense( 32, activation='relu') )
    model.add( Dropout(0.2))

    model.add( Dense( num_y_signals , activation='softmax') )

    model.compile(
        loss      = 'categorical_crossentropy',
        optimizer = tf.keras.optimizers.Adam( lr = 0.001 , decay=1e-6 ),
        metrics   = ['accuracy']
    )

这是 1 个序列的形状

x_shape = (1, 24, 252)

y_shape = (1, 24, 2)

但是当我拟合模型时出现此错误

ValueError: 形状为 (1, 24, 2) 的目标数组被传递给形状为 (None, 2) 的输出,同时用作损失 categorical_crossentropy。这种损失期望目标具有与输出相同的形状。

我认为最后一层输出形状必须以某种方式修改......但我不知道如何

额外信息:

我如何拟合模型

history = model.fit(X, y, epochs = 200, verbose = 1 )

X 和 Y 数据示例

[[[4.73778108e-01 7.81242029e-04 4.30468356e-01 ... 4.00000000e+00
   6.00000000e+00 7.00000000e+00]
  [4.81112145e-01 5.23199660e-05 4.17750945e-01 ... 4.00000000e+00
   6.00000000e+00 6.00000000e+00]
  [4.86817225e-01 2.95250670e-05 4.19276930e-01 ... 4.00000000e+00
   6.00000000e+00 5.00000000e+00]
  ...
  [4.81959516e-01 1.60327432e-04 4.32056797e-01 ... 4.00000000e+00
   5.00000000e+00 9.00000000e+00]
  [4.83579230e-01 6.00398605e-04 4.29610771e-01 ... 4.00000000e+00
   5.00000000e+00 8.00000000e+00]
  [4.81143261e-01 5.71228103e-04 4.39182101e-01 ... 4.00000000e+00
   5.00000000e+00 7.00000000e+00]]]

[[[1 0]
  [0 1]
  [0 1]
  [0 0]
  [0 0]
  [1 0]
  [1 0]
  [1 0]
  [1 0]
  [0 1]
  [0 0]
  [0 0]
  [0 1]
  [0 1]
  [0 1]
  [0 0]
  [1 0]
  [0 1]
  [0 1]
  [1 0]
  [1 0]
  [1 0]
  [1 0]
  [1 0]]]

【问题讨论】:

  • 我想我可以做到,但我为什么要这样做?

标签: python tensorflow keras


【解决方案1】:

在最后一个 LSTM 单元中设置 return_sequence = True

model = Sequential()

model.add(LSTM( 524 , input_shape = (24, 252) , return_sequences = True ))
model.add(Dropout(0.2))
model.add(BatchNormalization())

model.add(LSTM( 256, return_sequences = True ))
model.add(Dropout(0.1))
model.add(BatchNormalization())

model.add(LSTM( 128, return_sequences = True  )) # <================
model.add(Dropout(0.2))
model.add(BatchNormalization())

model.add( Dense( 32, activation='relu') )
model.add( Dropout(0.2))

model.add( Dense( 2 , activation='softmax') )

model.compile(
    loss      = 'categorical_crossentropy',
    optimizer = tf.keras.optimizers.Adam( lr = 0.001 , decay=1e-6 ),
    metrics   = ['accuracy']
)

其他的都还可以

通过这种方式,您的最后一层可以预测形状的目标 (None, 24, 2)

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 2021-04-21
    • 2018-02-16
    • 2019-01-08
    • 2018-07-08
    • 2018-04-04
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多