Tensorflow模型未正确加载

时间:2017-10-17 08:24:44

标签: python tensorflow word2vec

我目前正在尝试为我的公司培训word2vec模型。 为此,我使用了https://github.com/tensorflow/models上的代码,特别是https://github.com/tensorflow/models/blob/master/tutorials/embedding/word2vec.py

我下载了德语维基百科转储并从中提取了文本信息。任务是使用这些数据训练模型。

我在拥有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.

我添加了两行来加载模型(saver = ...)并注释掉训练线。查看meta和最新检查点文件以及tensorboard显示训练有素的模型,但是当我运行代码时,评估结果为 0.1%正确答案,在我看来,模型重新启动时未经训练的模型。我预计结果会再次 36%

有人可以告诉我我在代码中犯的错误,或者甚至是我的想法吗?

2 个答案:

答案 0 :(得分:1)

你可能在打电话 恢复模型后tf.global_variables_initializer().run()中的build_graph。所以你基本上加载了权重,然后用初始化值覆盖它们,你的网络从头开始。

我使用命令行选项为使用Latin的小项目实现了恢复检查点,您可以在这里查看代码: https://github.com/CarstenIsert/LatinLearner/blob/master/word2vec.py

答案 1 :(得分:1)

您是否在培训期间对数据使用预处理步骤?或者您使用原始数据作为网络的输入?很可能您的模型已正确加载,但您的测试数据未按照与培训步骤相同的方式进行预处理。

然后最好在调用restore ops之前创建一个空模型。如果在还原之前创建空模型,Tensorflow将自动将权重加载到模型中。