Tensorflow 模型未正确加载
Tensorflow Model is not loading correctly
我目前正在尝试为我的公司训练一个 word2vec 模型。
为此,我使用了 https://github.com/tensorflow/models, specifically 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 = ...) 并注释掉了训练行。查看元数据和最新的检查点文件以及张量板显示了一个经过训练的模型,但是当我 运行 代码时,评估结果为 0.1% 正确答案,在我看来这该模型以未经训练的模型重新启动。我预计结果又是 36%.
谁能告诉我我在代码中或什至在我的想法中犯的错误?
你可能在打电话
tf.global_variables_initializer().run()
在 build_graph
恢复模型后。所以你基本上加载了权重,然后用初始化值覆盖它们,你的网络从头开始。
我为一个使用 Latin 的小项目实现了使用命令行选项恢复检查点,您可以在此处查看代码:
https://github.com/CarstenIsert/LatinLearner/blob/master/word2vec.py
您在训练期间是否对数据使用预处理步骤?还是您使用原始数据作为网络的输入?您的模型可能已正确加载,但您的测试数据未按照与训练步骤相同的方式进行预处理。
那么最好在调用恢复操作之前创建一个空模型。如果您在恢复之前创建了一个空模型,Tensorflow 会自动将权重加载到您的模型中。
我目前正在尝试为我的公司训练一个 word2vec 模型。 为此,我使用了 https://github.com/tensorflow/models, specifically 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 = ...) 并注释掉了训练行。查看元数据和最新的检查点文件以及张量板显示了一个经过训练的模型,但是当我 运行 代码时,评估结果为 0.1% 正确答案,在我看来这该模型以未经训练的模型重新启动。我预计结果又是 36%.
谁能告诉我我在代码中或什至在我的想法中犯的错误?
你可能在打电话
tf.global_variables_initializer().run()
在 build_graph
恢复模型后。所以你基本上加载了权重,然后用初始化值覆盖它们,你的网络从头开始。
我为一个使用 Latin 的小项目实现了使用命令行选项恢复检查点,您可以在此处查看代码: https://github.com/CarstenIsert/LatinLearner/blob/master/word2vec.py
您在训练期间是否对数据使用预处理步骤?还是您使用原始数据作为网络的输入?您的模型可能已正确加载,但您的测试数据未按照与训练步骤相同的方式进行预处理。
那么最好在调用恢复操作之前创建一个空模型。如果您在恢复之前创建了一个空模型,Tensorflow 会自动将权重加载到您的模型中。