【问题标题】:Masking padded values impacts LSTM prediction屏蔽填充值会影响 LSTM 预测
【发布时间】:2021-01-09 09:15:07
【问题描述】:

我需要使用 LSTM 进行 seq2seq 预测。由于在时间步长方面我有不同长度的序列,我用 9999.0 填充值,然后我使用遮罩层来忽略 9999 值。但是,我的模型也不会忽略它们并预测填充值。 我使用了下面的代码。

verbose, epochs, batch_size = 0, 70, 16
n_timesteps, n_features, n_outputs = x_train.shape[1], x_train.shape[2], y_train.shape[2]
print(n_timesteps, n_features, n_outputs )
# define model
model_lstm = Sequential()
model.add(tf.keras.layers.Masking(mask_value=9999.,input_shape=(n_timesteps, n_features)))
model_lstm.add(LSTM(200, activation='relu', input_shape=(n_timesteps, n_features)))
model_lstm.add(Dense(100, activation='relu'))
model_lstm.add(Dense(n_outputs))
model_lstm.compile(loss='mse', optimizer='adam')
    # fit network
model_lstm.fit(x_train,y_train, epochs=epochs, batch_size=batch_size, verbose=verbose)
y_predict = model.predict(x_test) 

输入示例

输出示例

估计输出示例 - y_test -

如您所见,我的模型预测的值与预期相差甚远。你建议我怎么做?是遮罩层偏向模型吗?

【问题讨论】:

    标签: python lstm mask seq2seq


    【解决方案1】:

    只要知道如何处理掩码,掩码就会通过网络传播到下一层。在 LSTM 层之后,掩码停止传播,因为 LSTM 层有一个默认参数 return_sequences=False(时间维度崩溃)。您可以通过运行来验证:

    for i, l in enumerate(model.layers):
        print(f'layer {i}: {l}')
        print(f'\thas input mask: {l.input_mask}')
        print(f'\thas output mask: {l.output_mask}')
    

    【讨论】:

      猜你喜欢
      • 2013-04-01
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2013-06-23
      • 2021-01-27
      • 1970-01-01
      相关资源
      最近更新 更多