
444
|
第
15
章
Dense 层实际上支持序列作为输入(甚至是更高维的输入):它像 TimeDistributed
(Dense(…)) 一样处理它们,这意味着它仅仅应用于最后一个输入维度(独立于所有
的时间步长)。因此,我们可以用 Dense(10) 代替最后这一层。但是为了清楚起见,
我们将继续使用 TimeDistributed(Dense(10)),因为它清楚地表明在每个时间步
长都独立应用了 Dense 层,并且模型将输出一个序列,而不仅仅是一个向量。
训练期间需要所有的输出,但是只有最后一个时间步长的输出才对预测和评估有用。因
此,尽管我们要依赖所有输出的 MSE 进行训练,但是我们使用自定义指标进行评估,
以便在最后一个时间步长来计算输出的 MSE:
def
last_time_step_mse(Y_true, Y_pred):
return
keras.metrics.mean_squared_error(Y_true[:, -1], Y_pred[:, -1])
optimizer = keras.optimizers.Adam(lr=0.01)
model.compile(loss="mse", optimizer=optimizer, metrics=[last_time_step_mse])
我们得到的验证 MSE 约为 0.006,比以前的模型好 25%。你可以将此方法与第一个方法
结合使用:使用这个 RNN 来预测接下来的 10 个值,然后将这些值合并到输入时间序列, ...