TensorFlow Tutorial : Save and Restore

简介

TensorFlow中的数据保存与加载主要分为两种.

  1. 保存和恢复变量;
  2. 保存和恢复模型.

乍一看, 两者之间并不太好区分, 好像两者都可以进行模型的保存和加载.

其实主要的区分点在于加载模型时能不能够获取到Graph的信息.

  • 如果可以(大部分情况下你是该Graph的构建者或者参与者), 那么你可以使用tf.train.Saver来进行保存和加载;

  • 如果不可以(比如工程师需要维护算法工程师提供的模型文件), 那么就需要使用SavedModel来进行保存和加载.

tf.train.Saver可以加载部分图, 这使得它非常灵活. 而 tf.save_model.builder.SavedModelBuilder 可以让模型更加面向用户黑盒.

tf.train.Saver保存的模型对象为ckpt格式, 具体的不介绍了.

tf.save_model.builder.SavedModelBuilder保存的模型为SavedModel格式.

保存和恢复变量

保存和恢复模型

tf.saved_model

tf.saved_model一般面向底层接口使用.

在该模块中, 需要通过tf.saved_model.builder.SavedModelBuildertf.saved_model.loader来分别进行SavedModel的构建和加载.

SavedModelBuilder为例.

TODO : add_meta_graph_and_variables和add_meta_graph的区别是?

tf.estimator.Estimator

tf.estimator.Estimator是高阶API, 它用来保存为SavedModel的方式是通过export_savedmodel方法.

export_savedmodel需要两个主要的参数, 分别是export_dir_baseserving_input_receiver_fn.

export_dir_base是指导出模型的地址, serving_input_receiver_fn则比较重要, 是指模型被加载后, 如何接收并处理数据的重要参数.

主要有两个方法:

  1. build_parsing_serving_input_receiver_fn

  2. build_raw_serving_input_receiver_fn

两者的区分在于, build_parsing_serving_input_receiver_fn接收的是序列化的Example对象, build_raw_serving_input_receiver_fn接收的是Tensor对象. TODO : 补充一篇关于两者区别的源码分析文章

References

Guide – Low Level APIs – Save and Restore

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据