簡體   English   中英

遮罩層不適用於 MLP,如何添加帶有遮罩的自定義層?

[英]Mask layer is not working with MLPs, how to add a custom layer with masking?

我正在使用 MLP 來預測時間序列,我實現了一個包含掩碼層的代碼,以讓 model 跳過掩碼值。

例如,在我的數據中,時間序列有很多 NaN 值,我用“值 = -999”填充它。 我不想刪除它,但我希望 Keras 掩碼以溫和的方式跳過它。

我的代碼如下:

model = Sequential()
model.add(Masking(mask_value=-999, input_shape=(n_steps_in, )))
model.add(Dense(1024, activation='relu'))
model.add(Dense(n_steps_out))

我讀了一個答案,說不可能讓掩蔽與 MLP 一起工作。

如何為 MLP 添加遮罩層或自定義遮罩層來解決此問題?

你所做的有一個根本性的缺陷。

掩蔽最重要的規則是,

您應用掩碼的維度需要保持不變,直到 model 的最終預測

如果將掩碼應用於更改的該維度,則無法將其向前傳播。

一些場景掩蔽會起作用,

  • 如果要屏蔽 MLP 中的特定批次項目。 例如,在您的 MLP 中,您可以屏蔽整個特征向量,但不能屏蔽該向量中的單個特征。 在這里,您的掩碼將是[batch size]大小的張量,並且mask_value將與特征向量的大小相同。

  • 如果要屏蔽 LSTM model 的特定(批處理項、時間步)組合,可以將掩碼設置為[batch size, time step]大小的張量,其中mask_value的大小與時間的特征向量相同步。

所以總而言之,您不能只屏蔽項目,而不是特定功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM