Bidirectional(双方向RNN) | python3Xのブログ

python3Xのブログ

ここでは40代、50代の方が日々の生活で役に立つ情報や私の趣味であるプログラム、Excelや科学に関する内容で投稿する予定です。

Kerasを使ってカタカナでの会話のやりとりをおこないます。

まるまるここのサイトのコード利用させていただきました。

ただ、その言語は紹介できないかも知れません。

個人的には『チョット問題あり』と感じています。

(OSはMac OSXのようです)

EncoderとDecoderのところにLSTMを使っています。

只今、学習中なのですが50万会話のコーパスと貧弱な2 in Oneパソコンのため

直ぐに終わるとは思えません。

以前にもSeq2Seqを試したのですが、ここでの結果は・・・。

 

コードの一部のみ紹介します。

timesteps   = 50                                     # エンコーダー長
inputs      = Input(shape=(timesteps, 128))
encoded     = LSTM(512)(inputs)                # 512 次元
inputs_a    = inputs
inputs_a    = Dense(2048)(inputs_a)
inputs_a    = BN()(inputs_a)                      # BatchNormalization:各バッチごとに前の層の出力を正規化(平均0、標準偏差1)
a_vector    = Dense(512, activation='softmax')(Flatten()(inputs_a))
mul         = multiply([encoded, a_vector])
encoder     = Model(inputs, mul)
x           = RepeatVector(timesteps)(mul)   # inputとして入ってくるベクトルを指定の数だけ繰り返す
x           = Bi(LSTM(512, return_sequences=True))(x)   # 512ユニット、双方向RNN(逆順にも入れている)return_sequences:毎時刻の出力を得る
decoded     = TD(Dense(128, activation='softmax'))(x) # TimeDistibute:入力されたシーケンスの各時刻に同様のネットワークを付加する
autoencoder = Model(inputs, decoded)
autoencoder.compile(optimizer=Adam(), loss='categorical_crossentropy')