我在正确保存然后恢复张量流模型时遇到困难。具体来说,我有一个脚本(脚本#1),该脚本使用一些数据训练模型,然后在相同的数据上对其进行测试。 (我知道您在现实生活中永远不会那样做,但是就我的问题而言,这无关紧要)。脚本2应该加载已保存的模型,然后根据训练模型的相同数据进行预测。问题是,在脚本1和脚本2中执行推理时,我得到了不同的预测。

在脚本1中:

sess, softmax_probabilities = train_model(data, labels, full_model_filename) # train model
p = [x[1] for x in softmax_probabilities.eval({data_placeholder: data, label_placeholder: labels, dropout_keep_proportion_placeholder: 1.0}, session=sess)] # test model on same data


在这里,变量“ p”中的值是有意义的,并且一切都很好。

在train_model内部是用于保存模型的以下代码:

saver = tf.train.Saver()
saver.save(sess, model_filename)


在脚本2中,我具有以下内容:

loaded_graph = tf.Graph()
with tf.Session(graph=loaded_graph) as sess:
    sess.run(tf.global_variables_initializer())
    new_saver = tf.train.import_meta_graph(args.model_meta_filename)
    new_saver.restore(sess, tf.train.latest_checkpoint('./'))

    softmax_probabilities = loaded_graph.get_tensor_by_name('softmax_probabilities:0')
    data_placeholder = loaded_graph.get_tensor_by_name('data_placeholder:0')
    dropout_keep_proportion_placeholder = loaded_graph.get_tensor_by_name('dropout_keep_proportion_placeholder:0')

    p = [x[1] for x in softmax_probabilities.eval({data_placeholder: data, dropout_keep_proportion_placeholder: 1.0})]

    print(p)


这次,变量“ p”中的值几乎都非常接近0.5。因此,好像加载的模型具有随机权重。在加载模型方面一定存在我做错了什么,但我无法弄清楚它是什么。任何帮助将不胜感激。 (我在堆栈溢出中读取了其他几个线程,其中在加载模型后意外运行了sess.run(tf.global_variables_initializer()),从而覆盖了权重,但是我在这里没有做到这一点。)

再次感谢您的帮助,如果您需要更多信息,请告诉我!

最佳答案

我可以通过更改代码行来解决此问题:

new_saver.restore(sess, tf.train.latest_checkpoint('./'))


带有:

new_saver.restore(sess, args.model_meta_filename.replace(".meta", ""))


为了明确起见,args.model_meta_filename是以.meta结尾的已保存文件的名称。

10-08 05:02