Tensorflow通过saver.save函数时,Tensorflow程序会自动生成4个文件,Tensorflow模型持久化就是通过这4个文件完成的。Tensorflow通过元图(MetaGraph)来记录计算图中节点的信息及运行计算图中红节点所需要的元数据。Tensorflow中元图是由MetaGraphDef Protocol Buffer定义的。其内容构成了Tensorflow持久时的第一个文件,下面是定义:
message MetaGraph{
MetaInfoDef meta_info_def=1;
GraphDef graph_def=2;
SaverDef saver_def=3;
map<string,CollectionDef> collection_def=4;
map<string,SignatureDef> signature_def=5;
repeated AssetFileDef asset_file_def=6;
}
同时Tensorflow提供了export_meta_graph函数,这个函数支持以json格式导出MetaGraphDef Protocol Buffer,代码如下:
import tensorflow as tf
# 定义变量相加的计算
v1=tf.Variable(tf.constant(1.0,shape=[1]),name="v1")
v2=tf.Variable(tf.constant(2.0,shape=[1]),name="v2")
result=v1+v2
saver=tf.train.Saver()
#通过export_meta_graph函数导出Tensorflow计算图的元图,并保存为json格式。
saver.export_meta_graph("/path/to/model.ckpt.meda.json",as_text=True)
上述代码将计算图元图以json的格式导出并存储到model.ckpt.meta.json文件中。
meta_info_def属性
meta_info_def属性通过MetaInfoDef定义的,它记录了Tensorflow计算图中的元数据以及Tensorflow程序中所有使用到的运算信息,下面是MetaInfoDef ProtocolBuffer的定义:
message MetaInfoDef {
string meta_graph_version=1; #计算图版本号
Oplist stripped_op_list=2; #记录了Tensorflow计算图上使用到的有所运算方法信息
google.protobuf.Any any_info=3;
repeated string tags=4;
string tensorflow_version=5
string tensorflow_git_version=6;
}