2017-10-17 17 views
3

私は現在、私の会社のword2vecモデルを訓練してみます。 https://github.com/tensorflow/modelsのコードを使用しました。具体的にはhttps://github.com/tensorflow/models/blob/master/tutorials/embedding/word2vec.pyです。Tensorflowモデルが正しくロードされていません

私はドイツ語のwikipediaダンプをダウンロードし、そこからテキスト情報を抽出しました。タスクは、このデータを使用してモデルをトレーニングすることです。

私はUbuntu 16.04とTesla M60にアクセスできる仮想マシンで動作します。週末にはモデルを訓練し、チェックポイントを別のフォルダに保存しました。週末の終わりに、私は彼に与えた評価質問の36%(モデル "questions-word.txt"のようなドイツ語の質問)にモデルを回答することができました。トレーニングの後、私はモデルをロードして、評価タスクを再度実行したい。このため 私は(パスの変更点を除いて)行を次のコードを変更された:私は

with tf.Graph().as_default(), tf.Session() as session: 
     saver = tf.train.import_meta_graph(opts.save_path + "/model.ckpt-288720426.meta") 
     saver.restore(session, tf.train.latest_checkpoint('./results')) 
     print("Model restored.") 
     with tf.device("/cpu:0"): 
      model = Word2Vec(opts, session) 
      model.read_analogies() # Read analogy questions 
     for _ in xrange(opts.epochs_to_train): 
      #model.train() # Process one epoch 
      model.eval() # Eval analogies. 

を添加Iは、モデルをロードするための2つのライン(セーバー= ...)を添加し、訓練行をコメントアウト。メタと最新のチェックポイントファイルとテンソルボードを見れば、訓練されたモデルが表示されますが、コードを実行すると0.1%という正解が返ってきます。結果は再び36%になると思いました。

誰かが私がコードで作成したエラーを教えてもらえますか、それとも私の考えでさえも教えてください。

答えて

1

モデルを復元した後に tf.global_variables_initializer().run()build_graphに呼び出している可能性があります。基本的にウェイトをロードし、初期値で上書きして、ネットワークは最初から始まります。

私はラテン語で作業する小規模なプロジェクトのためのコマンドラインオプションでチェックポイントを復元実装し、あなたはここでのコードを見てすることができます https://github.com/CarstenIsert/LatinLearner/blob/master/word2vec.py

+0

ありがとうございました。提案された行をリンクに掲載された行に置き換えると、実際に問題が解決されました! –

0

あなたがトレーニング中に、あなたのデータに前処理ステップを使用していますか?または、ネットワークの入力として生データを使用しますか?モデルが正しくロードされているにもかかわらず、テストデータがトレーニングステップと同じ方法で前処理されていない可能性があります。

次に、restore opsを呼び出す前に空のモデルを作成することをお勧めします。復元前に空のモデルを作成すると、Tensorflowは自動的にモデルに荷重をロードします。

関連する問題