前言
最近参加了天池上的Apache Flink极客挑战赛——垃圾图片分类比赛,里面涉及到了Java调用tensorflow的SavedModel格式的模型进行预测,于是专门对此内容进行了调研。这里记录了SavedModel模型的优势,结构以及保存和加载的方法。
SavedModel的优势
Tensorflow训练的模型可以保存为ckpt格式,但是这种格式的模型文件在跨语言方面不是很灵活。而SaveModel与语言无关,比如可以使用python语言训练模型,然后在Java中非常方便的加载模型。
SavedModel的结构
以SavedModel格式保存模型时,tensorflow将创建一个SavedModel目录,该目录由以下子目录和文件组成:
assets/
assets.extra/
variables/
variables.data-?????-of-?????
variables.index
saved_model.pb|saved_model.pbtxt
其中,各目录和文件的说明如下:
assets/是包含辅助(外部)文件(如词汇表)的子文件夹。资产被复制到SavedModel位置,并且可以在加载特定的MetaGraphDef时读取。
assets.extra是一个子文件夹,高级库和用户可以将自己的资源添加进去,这些资源将与模型共存但不由图形加载。此子文件夹不由SavedModel库管理。
variables/是包含tf.train.saver输出的子文件夹。
saved_model.pb或saved_model.pbtxt是SavedModel协议缓冲区。它将图形定义作为MetaGraphDef协议缓冲区。</