可変長シーケンスをモデルにフィードする必要があります。
私のモデルはEmbedding + LSTM + Conv1d + Maxpooling + softmax
です。
Embedding
にmask_zero = True
を設定すると、Conv1d
でのコンパイルに失敗します。
Conv1d
にマスク値を入力するにはどうすればよいですか、または別の解決策はありますか?
現時点では、Conv1Dレイヤーはマスキングをサポートしていません。これが 未解決の問題 ケラスレポです。
タスクによっては、シーケンス内の他の値と同じようにmask_value
を埋め込んで、グローバルプーリングを適用できる場合があります(現在行っているように)。
Masking
レイヤーは、すべてのダウンストリームレイヤーがマスキングをサポートすることを期待しますが、これはConv1D
レイヤー。幸い、Functional APIを使用して、マスキングを適用する別の方法があります。
inputs = Input(...)
mask = Masking().compute_mask(inputs) # <= Compute the mask
embed = Embedding(...)(inputs)
lstm = LSTM(...)(embed, mask=mask) # <= Apply the mask
conv = Conv1D(...)(lstm)
...
model = Model(inputs=[inputs], outputs=[...])