内容简介:在《理想的状态是模型发布者编写出完备的文档,给出示例代码。但在很多情况下,我们只是得到了训练好的模型,而没有齐全的文档,这个时候我们能否从模型本身上获得一些信息呢?比如模型的输入输出、模型的结构等等。答案是可以的。
在《 Tensorflow SavedModel模型的保存与加载 》一文中,我们谈到SavedModel格式的优点是与语言无关、容易部署和加载。那问题来了,如果别人发布了一个SavedModel模型,我们该如何去了解这个模型,如何去加载和使用这个模型呢?
理想的状态是模型发布者编写出完备的文档,给出示例代码。但在很多情况下,我们只是得到了训练好的模型,而没有齐全的文档,这个时候我们能否从模型本身上获得一些信息呢?比如模型的输入输出、模型的结构等等。
答案是可以的。
查看模型的Signature签名
这里的签名,并非是为了保证模型不被修改的那种电子签名。我的理解是类似于编程语言中模块的输入输出信息,比如函数名,输入参数类型,输出参数类型等等。我们以《 Tensorflow SavedModel模型的保存与加载 》里的模型代码为例,从语句:
signature = predict_signature_def(inputs={'myInput': x},
outputs={'myOutput': y})
我们可以看到模型的输入名为myInput,输出名为myOutput。如果我们没有源码呢?
Tensorflow提供了一个工具,如果你下载了Tensorflow的源码,可以找到这样一个文件,./tensorflow/python/tools/saved_model_cli.py,你可以加上-h参数查看该脚本的帮助信息:
usage: saved_model_cli.py [-h] [-v] {show,run,scan} ...
saved_model_cli: Command-line interface for SavedModel
optional arguments:
-h, --help show this help message and exit
-v, --version show program's version number and exit
commands:
valid commands
{show,run,scan} additional help
指定SavedModel模所在的位置,我们就可以显示SavedModel的模型信息:
python $TENSORFLOW_DIR/tensorflow/python/tools/saved_model_cli.py show --dir ./model/ --all
结果为:
MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs:
signature_def['predict']:
The given SavedModel SignatureDef contains the following input(s):
inputs['myInput'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 784)
name: myInput:0
The given SavedModel SignatureDef contains the following output(s):
outputs['myOutput'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 10)
name: Softmax:0
Method name is: tensorflow/serving/predict
从这里我们可以清楚的看到模型的输入/输出的名称、数据类型、shape以及方法名称。有了这些信息,我们就可以很容易写出推断方法。
查看模型的计算图
了解tensflow的人可能知道TensorBoard是一个非常强大的工具,能够显示很多模型信息,其中包括计算图。问题是,TensorBoard需要模型训练时的log,如果这个SavedModel模型是别人训练好的呢?办法也不是没有,我们可以写一段代码,加载这个模型,然后输出summary info,代码如下:
import tensorflow as tf
import sys
from tensorflow.python.platform import gfile
from tensorflow.core.protobuf import saved_model_pb2
from tensorflow.python.util import compat
with tf.Session() as sess:
model_filename ='./model/saved_model.pb'
with gfile.FastGFile(model_filename, 'rb') as f:
data = compat.as_bytes(f.read())
sm = saved_model_pb2.SavedModel()
sm.ParseFromString(data)
if 1 != len(sm.meta_graphs):
print('More than one graph found. Not sure which to write')
sys.exit(1)
g_in = tf.import_graph_def(sm.meta_graphs[0].graph_def)
LOGDIR='./logdir'
train_writer = tf.summary.FileWriter(LOGDIR)
train_writer.add_graph(sess.graph)
train_writer.flush()
train_writer.close()
代码中,将汇总信息输出到logdir,接着启动TensorBoard,加上上面的logdir:
tensorboard --logdir ./logdir
在浏览器中输入地址: http://127.0.0.1:6006/ ,就可以看到如下的计算图:
小结
按照前面两种方法,我们可以对Tensorflow SavedModel格式的模型有比较全面的了解,即使模型训练者并没有给出文档。有了这些模型信息,相信你写出使用模型进行推断更加容易。
本文的完整代码请参考:https://github.com/mogoweb/aiexamples/tree/master/tensorflow/saved_model
希望这篇文章对您有帮助,感谢阅读!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 开源一年多的模型交换格式ONNX,已经一统框架江湖了?
- TCP数据段格式+UDP数据段格式详解
- 解决从旧格式的 csproj 迁移到新格式的 csproj 格式 AssemblyInfo 文件值重复问题
- CSS——CSS 基本视觉格式化:① “块盒子”格式化
- CSS——CSS 基本视觉格式化:② “行内盒子”格式化
- Hadoop 文件格式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Practical Django Projects, Second Edition
James Bennett / Apress / 2009 / 44.99
Build a django content management system, blog, and social networking site with James Bennett as he introduces version 1.1 of the popular Django framework. You’ll work through the development of ea......一起来看看 《Practical Django Projects, Second Edition》 这本书的介绍吧!