加载SavedModel比加载tf.train.Saver检查点要慢很多

时间:2017-05-29 08:54:35

标签: python tensorflow protocol-buffers

我从tf.train.Saver更改为SavedModel格式,这意味着从磁盘加载我的模型要慢得多(而不是几秒钟需要几分钟)。为什么这样做以及如何更快地加载模型?

我曾经这样做过:

# Save model
saver = tf.train.Saver()
save_path = saver.save(session, model_path)

# Load model
saver = tf.train.import_meta_graph(model_path + '.meta')
saver.restore(session, model_path)

但现在我这样做了:

# Save model
builder = tf.saved_model.builder.SavedModelBuilder(model_path)
builder.add_meta_graph_and_variables(session, [tf.saved_model.tag_constants.TRAINING])
builder.save()

# Load model
tf.saved_model.loader.load(session, [tf.saved_model.tag_constants.TRAINING], model_path)

2 个答案:

答案 0 :(得分:2)

我绝不是Tensorflow的专家,但如果我不得不猜测为什么会这样,我会说:

  • tf.train.Saver(),保存完整的元图。因此,执行图表中包含的任何操作所需的所有信息都已存在。所有张量流都需要加载模型,将元图插入默认/当前图表中,你就可以了。
  • 另一方面,SavedModelBuilder()在场景后面创建了一个与操作和变量无关的语言表示。这意味着加载方法必须提取所有信息,然后重新创建上一个图形中的所有操作和变量,并将它们插入默认/当前图形。

根据图表的大小,重新创建其中包含的所有内容可能需要一些时间。

关于第二个问题,正如@J H所说,如果没有理由让你使用一种策略而不是另一种策略,时间至关重要,那么就选择最快的。

答案 1 :(得分:1)

  

如何更快地加载模型?

切换回tf.train.Saver,因为您的问题没有显示使用SavedModelBuilder的动机,并明确表示已用时间对您很重要。或者,复制时间问题的MCVE将允许其他人与您合作进行剖析,诊断和修复任何感知到的性能问题。