2017-10-17 106 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会自动将权重加载到您的模型中。