LSTM Keras API 预测多个输出
LSTM Keras API predicting multiple outputs
我正在训练一个 LSTM 模型,使用 3 个不同特征的 50 个步骤序列作为输入,如下所示:
#x_train
[[[a0,b0,c0],.....[a49,b49,c49]],
[a1,b1,c1]......[a50,b50,c50]],
...
[a49,b49,c49]...[a99,b99,c99]]]
使用以下因变量
#y_train
[a50, a51, a52, ... a99]
下面的代码仅用于预测 a,如何让它在给定的时间步预测 return [a,b,c] 的向量?
def build_model():
model = Sequential()
model.add(LSTM(
input_shape=(50,3),
return_sequences=True, units=50))
model.add(Dropout(0.2))
model.add(LSTM(
250,
return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(1))
model.add(Activation("linear"))
model.compile(loss="mse", optimizer="rmsprop")
return model
每一层的输出取决于它有多少cells/units/filters。
您的输出有 1 个特征,因为 Dense(1...)
只有一个单元格。
只需将其设为 Dense(3...)
即可解决您的问题。
现在,如果您希望输出具有与输入相同的时间步数,则需要在所有 LSTM 层中打开 return_sequences = True
。
LSTM 的输出是:
- (批量大小,单位)-
return_sequences=False
- (批量大小、时间步长、单位)-
return_sequences=True
然后您在后续层中使用 TimeDistributed
层包装器来工作,就好像它们也有时间步长一样(它基本上会保留中间的维度)。
def build_model():
model = Sequential()
model.add(LSTM(
input_shape=(50,3),
return_sequences=True, units=50))
model.add(Dropout(0.2))
model.add(LSTM(
250,
return_sequences=True))
model.add(Dropout(0.2))
model.add(TimeDistributed(Dense(3)))
model.add(Activation("linear"))
model.compile(loss="mse", optimizer="rmsprop")
return model
我正在训练一个 LSTM 模型,使用 3 个不同特征的 50 个步骤序列作为输入,如下所示:
#x_train
[[[a0,b0,c0],.....[a49,b49,c49]],
[a1,b1,c1]......[a50,b50,c50]],
...
[a49,b49,c49]...[a99,b99,c99]]]
使用以下因变量
#y_train
[a50, a51, a52, ... a99]
下面的代码仅用于预测 a,如何让它在给定的时间步预测 return [a,b,c] 的向量?
def build_model():
model = Sequential()
model.add(LSTM(
input_shape=(50,3),
return_sequences=True, units=50))
model.add(Dropout(0.2))
model.add(LSTM(
250,
return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(1))
model.add(Activation("linear"))
model.compile(loss="mse", optimizer="rmsprop")
return model
每一层的输出取决于它有多少cells/units/filters。
您的输出有 1 个特征,因为 Dense(1...)
只有一个单元格。
只需将其设为 Dense(3...)
即可解决您的问题。
现在,如果您希望输出具有与输入相同的时间步数,则需要在所有 LSTM 层中打开 return_sequences = True
。
LSTM 的输出是:
- (批量大小,单位)-
return_sequences=False
- (批量大小、时间步长、单位)-
return_sequences=True
然后您在后续层中使用 TimeDistributed
层包装器来工作,就好像它们也有时间步长一样(它基本上会保留中间的维度)。
def build_model():
model = Sequential()
model.add(LSTM(
input_shape=(50,3),
return_sequences=True, units=50))
model.add(Dropout(0.2))
model.add(LSTM(
250,
return_sequences=True))
model.add(Dropout(0.2))
model.add(TimeDistributed(Dense(3)))
model.add(Activation("linear"))
model.compile(loss="mse", optimizer="rmsprop")
return model