Kerasメモ(seq2seqで日付フォーマット変換) その2(Attention)
前回の続き。
Kerasで書いたモデルにAttentionレイヤを追加してみる。
カスタムレイヤを定義して、書籍のコードを移植。
Encoder側のLSTMレイヤについては、"return_sequences=True"とし、各timestepごとの出力を返すようにする。
encoder = LSTM(units=n_units, return_sequences=True, return_state=True)
学習モデル
推論モデル
うまく動いているか、確認。
まずは、損失の比較から。
左がAttentionレイヤ無しのモデル、右がAttentionレイヤ有りのモデルでの損失。
続いて、横軸にInput sequence、縦軸にOutput sequenceをとった"Attention Map"と呼ばれるもので比較。
左が書籍のコードで生成、右が今回作ったコードで生成した"Attention Map"
作りがよくないせいなのか、関連付けてほしくないところで反応が出てしまっている(赤枠)
また、書籍のコードのように、横に広がるように少しずつ反応が出るほうが好ましいと考える(青枠)
他のパターンでも同じような出力だった。
改善方法はこれから確認するとして、ひとまず記録として残しておく。