tensorboard ckpt pb 模型的输出节点_算法工程化系列——模型固化

8e036b602d7d8a7d1424690054afb5e4.png

摘要

基于tensorflow训练的模型一般被保存为ckpt形式的文件,随着当前深度学习模型网络越来越大,对应模型也会非常大。当对外提供服务的时候,如果采用ckpt的形式,服务进程被调起来非常困难,且推理服务一般速度也较慢(会达到100ms以上一次推理)。所以,使用固化后的模型进行推理服务非常必要,模型大小得到压缩,服务时耗也得到大幅度降低。本文介绍几种常见的模型固化方法。

1 session模式的模型

先行训练好check point形式的模型文件,之所以这里区分session模式,因为这种模式使用者比较容易设置name_scope以及Tensor的命名,特别是输入、输出节点的名称,这样对于后面的固化非常重要。代码如下:

#!/usr/bin/env python

# coding=utf-8

from __future__ import print_function

import os,sys,time

import numpy as np

import tensorflow as tf

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"

os.environ["CUDA_VISIBLE_DEVICES"] = "7"

import tensorflow.contrib.slim as slim

from tensorflow.python.framework import graph_util

#此文件可以把ckpt模型转为pb模型

def freeze_graph(input_checkpoint,output_graph):

# checkpoint = tf.train.get_checkpoint_state(model_folder) #

# input_checkpoint = checkpoint.model_checkpoint_path #

output_node_names = "score_student/output_student"

saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=True)

graph = tf.get_default_graph()#

input_graph_def = graph.as_graph_def()#

with tf.Session() as sess:

saver.restore(sess, input_checkpoint)

output_graph_def = graph_util.convert_variables_to_constants(

sess=sess,

input_graph_def=input_graph_def,# :sess.graph_def

output_node_names=output_node_names.split(","),

variable_names_whitelist=None,variable_names_blacklist=None)#

with tf.gfile.GFile(output_graph, "wb") as f: #

f.write(output_graph_def.SerializeToString()) #

print("%d ops in the final graph." % len(output_graph_def.node))

#

input_checkpoint='/data/.../best_validation'

out_pb_path='/data/.../pbmodel/frozen_model_for_best_validation20190821.pb'

freeze_graph(input_checkpoint, out_pb_path)

2 estimator形式的模型

包括TPUEstimator形式,最常见的就是BERT模型[1]了,你很难去找里面的各种tensor的变量(本人亲自尝试使用tensorboard进行查找)。【当然使用一次迁移学习转换一下形式也是可以解决这个问题的】,这里提供另外一种简单的解决方法,代码如下:【相关表达方式还有好几种】

首先使用正常模型训练一个ckpt形式的模型,然后进行转化pb格式固化。

在bert代码中注释掉原来的train步骤

#estimator.train(input_fn=train_input_fn, max_steps=num_train_steps)

#定义里面的输入数据名称及shape:

feature_spec = {

"input_ids": tf.FixedLenFeature([FLAGS.max_seq_length], tf.int64),

"input_mask": tf.FixedLenFeature([FLAGS.max_seq_length], tf.int64),

"segment_ids": tf.FixedLenFeature([FLAGS.max_seq_length], tf.int64),

"start_ps": tf.FixedLenFeature([], tf.int64),#@debuluoyi

"end_ps": tf.FixedLenFeature([], tf.int64),#@debuluoyi

"label_ids": tf.FixedLenFeature([], tf.int64), }

#固化转换

receiver_fn=tf.estimator.export.build_parsing_serving_input_receiver_fn(feature_spec)

estimator._export_to_tpu = False

print("begin to export_savedmodel el model.pb") estimator.export_savedmodel('/data/.../pbmodel/bert_el_model20191023_2_pbmodel',serving_input_receiver_fn =receiver_fn)

3 小结

模型固化对于对外提供服务很重要,另外还有一个很重要的点就是接下来进行压缩,压缩很多基于pb固化模型进行也有多种方便,由此体现模型固化在实际算法工程中是非常重要且常见的技术点,一般能够将模型大小压缩数倍,服务调起更加轻便,基于GPU的推理时间也能节约数倍。

参考文献

[1] https://github.com/google-research/bert;

google-research/bert​github.com
1887410f9021448f2fd0353ab9187d06.png

[2] 本人GitHub:

debuluoyi - Overview​github.com
af35f491d30cb2bda266e7be14a909c3.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度linux内核升级,深度操作系统 2020.11.11 更新发布:内核升级

原标题:深度操作系统 2020.11.11 更新发布:内核升级IT之家11月11日消息 今日,深度操作系统宣布2020.11.11 更新现已发布。本次更新包括升级内核、Debian 10.6 仓库以及系统安全性更新。系统安全方面,本次更新修复了 Firefox-ESR 安…

unity 使用mysql实现登录注册_用mysql实现登录注册功能

1、创建用户表表结构如下idunameupwdisdelete注意:需要对密码进行加密。如果使用md5加密,则密码包含32个字符。如果使用sha1加密,则密码包含40个字符,这里使用这种方式。md5加密方式:import hashlibpwd 123456my_md5 …

python爬电影_使用Python多线程爬虫爬取电影天堂资源

最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载。刚开始学习python希望可以获得宝贵的意见。 先来简单介绍一下,网络爬虫的基本实…

打不开磁盘配额linux,九度OJ 1455 珍惜现在,感恩生活 -- 动态规划(背包问题)...

题目描述:为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。请问&#xf…

erp 维护费 要交吗_ERP系统维护费

今年8月,SAP中国公司宣布2009年1月1日前将由传统支持服务转向企业级支持服务(SAP Enterprise Support)。同时将开始实施渐进式定价方案,并预计在2012年之前,逐渐将所有客户从现行的SAP Standard/Premium Support的定价协议过渡为SAP Enterpri…

sentinel 端口_Sentinel原理:控制台是如何获取到实时数据的

Sentinel 系列教程,现已上传到 github 和 gitee 中:GitHub:https://github.com/all4you/sentinel-tutorialGitee:https://gitee.com/all_4_you/sentinel-tutorialSentinel 能够被大家所认可,除了他自身的轻量级&#x…

linux桌面时区设置,如何在Ubuntu 20.04上设置或更改时区

对于许多与系统相关的任务和进程,使用正确的时区至关重要。 例如,cron守护程序使用系统的时区执行cron作业,而日志文件中的时间戳基于系统的同一时区。在Ubuntu上,系统的时区是在安装过程中设置的,但以后可以轻松更改。…

ironpython2.7.9_IronPython下载

IronPython是一种在 .NET 及 Mono上的 Python 实现,由微软的 Jim Hugunin所发起,是一个开源的项目,基于微软的DLR引擎;托管于微软的开源网站 CodePlex。IronPython 的官方并未实现 Python通用类库,仅实现了部分核心类。…

python 最小二乘回归 高斯核_「机器学习」一文读懂线性回归、岭回归和Lasso回归...

点击上方蓝色字体,关注AI小白入门哟作者 | 文杰编辑 | yuquanle本文介绍线性回归模型,从梯度下降和最小二乘的角度来求解线性回归问题,以概率的方式解释了线性回归为什么采用平方损失,然后介绍了线性回归中常用的两种范数来解决过…

天宫初级认证答案_跨境电商人才初级认证试题以及答案

跨境电商人才初级认证试题以及答案跨境电商人才初级认证试题一,单选题(共40题,每题1分,共40分)1.在拍摄反光性产品时,就是从哪个角度进行拍摄的A、正面B、侧面参考答案:B2.信用证就是一种( )信用A、商业B、银行C、民间D、企业参考答案:B3、阿里巴巴专业术语中,MA的全…

Linux打包软件版本带时间,带你写一个 linux 下的打包软件 tar

相信你对 linux 的 .tar.gz 有点熟悉,这就是先 tar 打包(.tar 后缀),再对此 tar 文件用 gzip 压缩(.tar.gz)的后缀名。值得注意的是, tar 不是压缩软件,它只做把一堆文件/文件夹打包到一个文件(tar 文件)里的事情,而文…

优先队列默认是小顶堆吗_一分钟带你读懂什么是堆?

堆其实就是一种特殊的队列——优先队列。 普通的队列游戏规则很简单:就是先进先出;但这种优先队列搞特殊,不是按照进队列的时间顺序,而是按照每个元素的优先级来比拼,优先级高的在堆顶。 这也很容易理解吧,…

螺旋测微器b类不确定度_物理实验直测量不确定度评估.ppt

物理实验直测量不确定度评估直接测量不确定度评估 Gauss分布 测量列的平均值、标准差 A类不确定度 t分布 B类不确定度 直接测量的合成不确定度 Gauss分布 也称正态分布。 δ的平均值等于0、方差为σ。 特征: 对称性——大于平均值与小于平均值的概率相等&#xff1b…

python 执行shell_python执行shell命令的方法

python执行shell命令的方法 os模块 os.system方式: import os os.system(top) os.system(cat /proc/cpuinfo) 说明 这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回。 返回值是依赖于系统的,直接返回系统的调用返回值&am…

linux下c语言读取roed文件,如何在Linux系统上安装Android4.4.docx

Android (x86)项目致力于移植 Android系统到X86处理器上,使用户可以更容易的在任何电脑上安装Android。他们通过使用android源码,增加补丁来使 Android能够在X86处理器,笔记本电脑和平板 电脑下工作。前一段时间,项目组发布了最新…

微信小程序setinterval_简单谈谈setTimeout与setInterval

感谢踩过的坑sf社区的第一篇文章。最近在做一个拍卖的微信小程序,用到了定时器setTimout和setInterval,简单谈谈这两个api。setTimeout最常见的用法就是第二种(第三种mdn文档不推荐),如:var timeoutId setTimeout(function() {console.log(hello world!…

python 注释一段话_Python快速入门(一)

引言Python作为一个,目前最火的编程语言之一,已经渗透到了各行各业。它易学好懂,拥有着丰富的库,功能齐全。人生苦短,就用Python。这个快速入门系列分为六篇,包含了Python大部分基础知识,每篇阅…

linux ibus获取窗体位置,Ubuntu 12.04 显示ibus 的输入框

在虚拟机中安装了Ubuntu 12.04,系统是英文版本的,我能接受,但是苦于没有中文输入法。起先,我是安装SCIM,结果我折腾了半天,发现其只能在lib-office下使用。firefox,文字编辑器中都不能调出SCIM。无奈将其卸…

transporter上传卡正在交付_【iOS】Xcode11使用Transporter将APP上传到App Store,卡在正在验证APP...

问题:在使用Transporter时,会卡主,一直显示正在验证APP在这里插入图片描述解决方案一:利用V-P-N在这里插入图片描述使用安全上网(V-P-N),双击打开iTMSTransporter,等待几分钟lichuangMacBook-Pro-3 ~ % /Ap…

python练手经典100例微盘_20个Python练手经典案例,能全做对的人确实很少!

100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python。 如果你感觉学不会?莫慌,小编推荐大家加入群, 前面548中间377后面875&#xff0…