前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何查看Tensorflow SavedModel格式模型的信息

如何查看Tensorflow SavedModel格式模型的信息

作者头像
云水木石
发布2019-07-02 14:56:31
2.5K0
发布2019-07-02 14:56:31
举报

在《Tensorflow SavedModel模型的保存与加载》一文中,我们谈到SavedModel格式的优点是与语言无关、容易部署和加载。那问题来了,如果别人发布了一个SavedModel模型,我们该如何去了解这个模型,如何去加载和使用这个模型呢?

理想的状态是模型发布者编写出完备的文档,给出示例代码。但在很多情况下,我们只是得到了训练好的模型,而没有齐全的文档,这个时候我们能否从模型本身上获得一些信息呢?比如模型的输入输出、模型的结构等等。

答案是可以的。

查看模型的Signature签名

这里的签名,并非是为了保证模型不被修改的那种电子签名。我的理解是类似于编程语言中模块的输入输出信息,比如函数名,输入参数类型,输出参数类型等等。我们以《Tensorflow SavedModel模型的保存与加载》里的模型代码为例,从语句:

代码语言:javascript
复制
signature = predict_signature_def(inputs={'myInput': x},
                                  outputs={'myOutput': y})

我们可以看到模型的输入名为myInput,输出名为myOutput。如果我们没有源码呢?

Tensorflow提供了一个工具,如果你下载了Tensorflow的源码,可以找到这样一个文件,./tensorflow/python/tools/saved_model_cli.py,你可以加上-h参数查看该脚本的帮助信息:

代码语言:javascript
复制
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的模型信息:

代码语言:javascript
复制
python $TENSORFLOW_DIR/tensorflow/python/tools/saved_model_cli.py show --dir ./model/ --all

结果为:

代码语言:javascript
复制
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,代码如下:

代码语言:javascript
复制
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:

代码语言:javascript
复制
tensorboard --logdir ./logdir

在浏览器中输入地址: http://127.0.0.1:6006/ ,就可以看到如下的计算图:

小结

按照前面两种方法,我们可以对Tensorflow SavedModel格式的模型有比较全面的了解,即使模型训练者并没有给出文档。有了这些模型信息,相信你写出使用模型进行推断更加容易。

本文的完整代码请参考:https://github.com/mogoweb/aiexamples/tree/master/tensorflow/saved_model

希望这篇文章对您有帮助,感谢阅读!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云水木石 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查看模型的Signature签名
  • 查看模型的计算图
  • 小结
相关产品与服务
腾讯电子签
弹指间,放心签。腾讯电子签(E-Sign Service)致力为企业及个人提供极简且高效的电子合同管理工具。您只需要一部手机即可完成合同签约及常见的合同管理操作;电子签将对签约全程进行区块链记录,为您的业务与生活保驾护航。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档