Kerasメモ(seq2seqで日付フォーマット変換)
前回の足し算に引き続き、以下の書籍を参考にして、seq2seqを使った日付フォーマット変換を試してみる。
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」に増えている。
学習モデル
推論モデル
学習時のパラメータを以下のとおり設定。
batch_size = 128 # Batch size for training. epochs = 15 # Number of epochs to train for. train_model.compile(optimizer='adam', loss='categorical_crossentropy')
モデルの損失は以下のとおり推移。
学習後、検証データを推論モデルに渡した結果の一部。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']