目标是预测87601次步(10年)和9个目标的时间序列Y.输入特征X(外生输入)是11个87600次步长的时间序列。输出还有一个时间步长,因为这是初始值。 时间步t t的输出Yt取决于输入Xt和前一输出Yt-1。
因此,模型应如下所示:https://www.cpume.com/question/fgshnonz-intel-icc-compile-c-code-cause-error.html
我只能找到这个帖子:Model layout。 我尝试用Keras实现这个:
def build_model():
# Input layers
input_x = layers.Input(shape=(features,), name='input_x')
input_y = layers.Input(shape=(targets,), name='input_y-1')
# Merge two inputs
merge = layers.concatenate([input_x,input_y], name='merge')
# Normalise input
norm = layers.Lambda(normalise, name='scale')(merge)
# Hidden layers
x = layers.Dense(128, input_shape=(features,))(norm)
# Output layer
output = layers.Dense(targets, activation='relu', name='output')(x)
model = Model(inputs=[input_x,input_y], outputs=output)
model.compile(loss='mean_squared_error', optimizer=Adam())
return model
def make_prediction(model, X, y):
y_pred = [y[0,None,:]]
for i in range(len(X)):
y_pred.append(model.predict([X[i,None,:],y_pred[i]]))
y_pred = np.asarray(y_pred)
y_pred = y_pred.reshape(y_pred.shape[0],y_pred.shape[2])
return y_pred
# Fit
model = build_model()
model.fit([X_train, y_train[:-1]], [y_train[1:]]], epochs=200,
batch_size=24, shuffle=False)
# Predict
y_hat = make_prediction(model, X_train, y_train)
这是有效的,但这不是我想要实现的,因为有LSTM: How to feed the output back to the input? #4068。因此,该模型没有学习如何校正反馈输出中的误差,这导致在预测输出的误差在每个时间步累积时导致精度差。
Keras是否有办法在训练阶段实施输出输入反馈? 此外,由于Y的初始值始终是已知的,我也想将其提供给网络。