ichou1のブログ

主に音声認識、時々、データ分析のことを書く

Kerasメモ(seq2seqで日付フォーマット変換) その2(Attention)

前回の続き。

Kerasで書いたモデルにAttentionレイヤを追加してみる。
カスタムレイヤを定義して、書籍のコードを移植。

Encoder側のLSTMレイヤについては、"return_sequences=True"とし、各timestepごとの出力を返すようにする。

encoder = LSTM(units=n_units,
               return_sequences=True,
               return_state=True) 
学習モデル

f:id:ichou1:20190226211645p:plain

推論モデル

f:id:ichou1:20190226211207p:plain

うまく動いているか、確認。
まずは、損失の比較から。
左がAttentionレイヤ無しのモデル、右がAttentionレイヤ有りのモデルでの損失。
f:id:ichou1:20190223111242p:plain


続いて、横軸にInput sequence、縦軸にOutput sequenceをとった"Attention Map"と呼ばれるもので比較。
左が書籍のコードで生成、右が今回作ったコードで生成した"Attention Map"
f:id:ichou1:20190225213820p:plain

作りがよくないせいなのか、関連付けてほしくないところで反応が出てしまっている(赤枠)
また、書籍のコードのように、横に広がるように少しずつ反応が出るほうが好ましいと考える(青枠)

他のパターンでも同じような出力だった。
f:id:ichou1:20190225215652p:plain
f:id:ichou1:20190225215914p:plain

改善方法はこれから確認するとして、ひとまず記録として残しておく。