2017-10-17 60 views
3

我目前正在嘗試爲我的公司培訓word2vec模型。 爲此,我使用了https://github.com/tensorflow/models上的代碼,特別是https://github.com/tensorflow/models/blob/master/tutorials/embedding/word2vec.pyTensorflow模型加載不正確

我下載了德文維基百科轉儲並從中提取了文本信息。任務是用這些數據訓練一個模型。

我使用的是具有Ubuntu 16.04和訪問特斯拉M60的虛擬機。在週末,我訓練了模型並將檢查點保存在一個單獨的文件夾中。在週末結束時,模型能夠回答我給他的評估問題(類似於「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. 

我增加了兩行加載模型(保護程序= ...)和註釋訓練線。查看元和最新的檢查點文件和tensorboard顯示一個訓練有素的模型,但是當我運行代碼時,評估結果在0.1%正確的答案,這在我看來像模型重新啓動未經訓練的模型。我預計結果再次是36%

有人可以告訴我我在代碼中犯的錯誤,或者甚至在我的想法?

回答

1

在恢復模型之後,您可能會打電話給 tf.global_variables_initializer().run() in build_graph。所以你基本上加載權重,然後用初始化值覆蓋它們,你的網絡從頭開始。

我實現恢復通過命令行選項檢查站的一個小項目與拉美工作,你可以看看這裏的代碼: https://github.com/CarstenIsert/LatinLearner/blob/master/word2vec.py

+0

謝謝你的幫助。使用鏈接中發佈的行替換建議的行實際上解決了問題! –

0

你在訓練中使用預處理步驟,你的數據嗎?或者你使用原始數據作爲網絡的輸入?很可能您的模型已正確加載,但您的測試數據未按照培訓步驟的相同方式進行預處理。

然後最好在調用恢復操作前創建一個空模型。如果您在恢復之前創建了一個空模型,Tensorflow會自動將權重加載到您的模型中。