web-dev-qa-db-ja.com

Convolution1Dレイヤーにマスク値を入力する方法

可変長シーケンスをモデルにフィードする必要があります。

私のモデルはEmbedding + LSTM + Conv1d + Maxpooling + softmaxです。

Embeddingmask_zero = Trueを設定すると、Conv1dでのコンパイルに失敗します。

Conv1dにマスク値を入力するにはどうすればよいですか、または別の解決策はありますか?

10
Jaspn Wjbian

現時点では、Conv1Dレイヤーはマスキングをサポートしていません。これが 未解決の問題 ケラスレポです。

タスクによっては、シーケンス内の他の値と同じようにmask_valueを埋め込んで、グローバルプーリングを適用できる場合があります(現在行っているように)。

4
orsonady

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=[...])
2
MiniQuark