加载SavedModel比加载tf.train.Saver检查点要慢得多
python
tensorflow
38
0

我从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)
参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

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

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

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

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题