为一个输入和两个输出构建 LSTM 模型
Build LSTM model for one inupt and two outputs
我想构建一个具有一个输入和两个输出的 LSTM 模型。
我的数据和图一样。
我的模型如下。
但它只预测一个输出。
你能帮我设计两个输出的模型吗?谢谢
s1 = MinMaxScaler(feature_range=(-1,1))
Xs = s1.fit_transform(train[['y1','y2','x']])
s2 = MinMaxScaler(feature_range=(-1,1))
Ys = s2.fit_transform(train[['y1', 'y2']])
window = 70
X = []
Y = []
for i in range(window,len(Xs)):
X.append(Xs[i-window:i,:])
Y.append(Ys[i])
X, Y = np.array(X), np.array(Y)
model = Sequential()
model.add(LSTM(units=50, return_sequences=True,input_shape=(X.shape[1],X.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(units=1))
model.compile(optimizer = 'adam', loss = 'mean_squared_error',metrics = ['MAE'])
es = EarlyStopping(monitor='loss',mode='min',verbose=1,patience=10)
history = model.fit(X, Y, epochs = 10, batch_size = 250, callbacks=[es], verbose=1)
您模型最后一层的 output_shape
应与您的 Y-data 形状匹配。
因为你有 2 个 Y-data,你可以将最后一个 Dense 层更改为有 2 个单元:
model.add(Dense(units=1))
model.add(Dense(units=2))
你应该使用函数 API
例如:
input = Input(shape=(shape, ))
out1 = Dense(1, activation='linear')(input)
out2 = Dense(1, activation='linear')(input)
out3 = Dense(1, activation='linear')(input)
model = Model(inputs=input, outputs=[out1,out2,out3])
我想构建一个具有一个输入和两个输出的 LSTM 模型。
我的数据和图一样。
我的模型如下。
但它只预测一个输出。
你能帮我设计两个输出的模型吗?谢谢
s1 = MinMaxScaler(feature_range=(-1,1))
Xs = s1.fit_transform(train[['y1','y2','x']])
s2 = MinMaxScaler(feature_range=(-1,1))
Ys = s2.fit_transform(train[['y1', 'y2']])
window = 70
X = []
Y = []
for i in range(window,len(Xs)):
X.append(Xs[i-window:i,:])
Y.append(Ys[i])
X, Y = np.array(X), np.array(Y)
model = Sequential()
model.add(LSTM(units=50, return_sequences=True,input_shape=(X.shape[1],X.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(units=1))
model.compile(optimizer = 'adam', loss = 'mean_squared_error',metrics = ['MAE'])
es = EarlyStopping(monitor='loss',mode='min',verbose=1,patience=10)
history = model.fit(X, Y, epochs = 10, batch_size = 250, callbacks=[es], verbose=1)
您模型最后一层的 output_shape
应与您的 Y-data 形状匹配。
因为你有 2 个 Y-data,你可以将最后一个 Dense 层更改为有 2 个单元:
model.add(Dense(units=1))
model.add(Dense(units=2))
你应该使用函数 API
例如:
input = Input(shape=(shape, ))
out1 = Dense(1, activation='linear')(input)
out2 = Dense(1, activation='linear')(input)
out3 = Dense(1, activation='linear')(input)
model = Model(inputs=input, outputs=[out1,out2,out3])