目录
简介
TensorFlow中的数据保存与加载主要分为两种.
乍一看, 两者之间并不太好区分, 好像两者都可以进行模型的保存和加载.
其实主要的区分点在于加载模型时能不能够获取到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.SavedModelBuilder
和tf.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_base
和serving_input_receiver_fn
.
export_dir_base
是指导出模型的地址, serving_input_receiver_fn
则比较重要, 是指模型被加载后, 如何接收并处理数据的重要参数.
主要有两个方法:
两者的区分在于, build_parsing_serving_input_receiver_fn
接收的是序列化的Example
对象, build_raw_serving_input_receiver_fn
接收的是Tensor
对象. TODO : 补充一篇关于两者区别的源码分析文章