加载 SavedModel 比加载 tf.train.Saver 检查点慢很多 [英] Loading SavedModel is a lot slower than loading a tf.train.Saver checkpoint

查看:36
本文介绍了加载 SavedModel 比加载 tf.train.Saver 检查点慢很多的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从 tf.train.Saver 更改为 SavedModel 格式,这出人意料地意味着从磁盘加载我的模型要慢得多(而不是几秒钟需要几分钟).为什么会这样?我该怎么做才能更快地加载模型?

I changed from tf.train.Saver to the SavedModel format which surprisingly means loading my model from disk is a lot slower (instead of a couple of seconds it takes minutes). Why is this and what can I do to load the model faster?

我曾经这样做过:

# 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)

推荐答案

我绝不是 Tensorflow 的专家,但如果我不得不猜测为什么会发生这种情况,我会说:

I am by no ways an expert in Tensorflow, but if I had to take a guess as to why this is happening, I would say that:

  • tf.train.Saver(),保存一个完整的元图.因此,执行图中包含的任何操作所需的所有信息都已经存在.tensorflow 加载模型所需要做的一切,就是将元图插入默认/当前图,您就可以开始了.
  • 另一方面,SavedModelBuilder() 在幕后为您的操作和变量创建了一种与语言无关的表示.这意味着加载方法必须提取所有信息,然后从之前的图表中重新创建所有操作和变量,并将它们插入到默认/当前图表中.

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

Depending on the size of your graph, recreating everything that it contained might take some time.

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

Concerning the second question, as @J H said, if there are no reasons for you to use one strategy over the other, and time is of the essence, then just go with the fastest one.

这篇关于加载 SavedModel 比加载 tf.train.Saver 检查点慢很多的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆