TensorFlowによるseq2seqモデルについて、学習済みモデルの評価をしたい
現在TensorFlowを使ったSequence-to-Sequenceモデルを作成し、学習を行いました。
dynamic_decodingの公式レファレンスに従ってコードを書いてみました。
発生している問題
GreedyEmbeddingHelperを使った評価結果が訓練時よりも異常に悪い精度になります。
実装はレファレンスに倣い、以下のように定義しました。
Python
1 helper = tf.contrib.seq2seq.GreedyEmbeddingHelper( 2 embedding=embedding, 3 start_tokens=tf.tile([GO_SYMBOL], [batch_size]), 4 end_token=END_SYMBOL)
引数
- embedding: tf.Variable型の埋め込み層。訓練時に最適化される
- GO_SYMBOL: int型の文頭を示す特殊文字
- batch_size: int型のミニバッチサイズ
- END_SYMBOL: int型の文末を示す特殊文字
試したこと
同様の事例がQuestion: Using TrainingHelper vs GreedyEmbeddingHelper during training.で報告されていたので、確認してみました。
すると、以下のように入力データを定義すべきとの書き込みがありました。
- エンコーダ入力: A B C EOS
- デコーダ入力: GO 4 5 EOS
- デコーダラベル: 4 5 EOS EOS
データがこの通りの並びになっていることを確認しましたが、
結局のところ、評価時に性能が悪くなっている理由や、GreedyEmbeddingHelperの使い方については、わかりませんでした。
補足情報(FW/ツールのバージョンなど)
TensorFlow1.4を使用
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。