内容简介:在《理想的状态是模型发布者编写出完备的文档,给出示例代码。但在很多情况下,我们只是得到了训练好的模型,而没有齐全的文档,这个时候我们能否从模型本身上获得一些信息呢?比如模型的输入输出、模型的结构等等。答案是可以的。
在《 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 文件格式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Android和PHP开发最佳实践
黄隽实 / 机械工业出版社华章公司 / 2013-3-20 / 79.00元
本书是国内第一本同时讲述Android客户端开发和PHP服务端开发的经典著作。 本书以一个完整的微博应用项目实例为主线,由浅入深地讲解了Android客户端开发和PHP服务端开发的思路和技巧。从前期的产品设计、架构设计,到客户端和服务端的编码实现,再到性能测试和系统优化,以及最后的打包发布,完整地介绍了移动互联网应用开发的过程。同时,本书也介绍了Android系统中比较有特色的功能,比如Go......一起来看看 《Android和PHP开发最佳实践》 这本书的介绍吧!