ichou1のブログ

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

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

前回の足し算に引き続き、以下の書籍を参考にして、seq2seqを使った日付フォーマット変換を試してみる。

https://www.oreilly.co.jp/books/images/picture978-4-87311-836-9.gif
O'Reilly Japan - ゼロから作るDeep Learning ❷

データの長さは固定で「40」、値がない部分はブランクで埋める。

  • 変換前の長さ : 「29」固定
  • 変換後の長さ : 「11」固定(区切りにあたる"_"含む)
データ例(date.txt)
10/15/94                     _1994-10-15
thursday, november 13, 2008  _2008-11-13
july 18, 1970                _1970-07-18
...

サンプル数は全体で「50,000」、学習用に90%、残り10%を検証用に分割する。

出現する文字は59種類。
数字の「0から9」、英字、プラス記号、ブランク、アンダーバー、スラッシュ等。

Embeddingレイヤを通して16次元の特徴ベクトルに変換する。

書籍ではAttentionレイヤを使った例を扱っているが、ひとまず、使わないモデルを試してみる。
構成は前回の足し算の時と同じ。
LSTMレイヤのユニット数は「256」に増えている。

学習モデル

f:id:ichou1:20190222223006p:plain

推論モデル

f:id:ichou1:20190222224206p:plain

学習時のパラメータを以下のとおり設定。

batch_size = 128  # Batch size for training.
epochs = 15  # Number of epochs to train for.
train_model.compile(optimizer='adam', loss='categorical_crossentropy')

モデルの損失は以下のとおり推移。
f:id:ichou1:20190219080645p:plain
f:id:ichou1:20190219080818p:plain

学習後、検証データを推論モデルに渡した結果の一部。3番目は誤りパターン。

例1

input
Input sentence: ['1', '0', '/', '1', '5', '/', '9', '4', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
decode結果と正解
Decoded sentence: ['1', '9', '9', '4', '-', '1', '0', '-', '1', '5']
Label sentence:   ['1', '9', '9', '4', '-', '1', '0', '-', '1', '5']

例2

input
Input sentence: ['t', 'h', 'u', 'r', 's', 'd', 'a', 'y', ',', ' ', 'n', 'o', 'v', 'e', 'm', 'b', 'e', 'r', ' ', '1', '3', ',', ' ', '2', '0', '0', '8', ' ', ' ']
decode結果と正解
Decoded sentence: ['2', '0', '0', '8', '-', '1', '1', '-', '1', '3']
Label sentence:   ['2', '0', '0', '8', '-', '1', '1', '-', '1', '3']

例3

input
Input sentence: ['S', 'a', 't', 'u', 'r', 'd', 'a', 'y', ',', ' ', 'J', 'u', 'l', 'y', ' ', '1', '8', ',', ' ', '1', '9', '7', '0', ' ', ' ', ' ', ' ', ' ', ' ']
decode結果と正解
Decoded sentence: ['1', '9', '7', '0', '-', '0', '7', '-', '1', '4']
Label sentence:   ['1', '9', '7', '0', '-', '0', '7', '-', '1', '8']