解决tensorflow模型压缩的问题_踩坑无数,总算搞定


Posted in Python onMarch 02, 2021

1.安装bazel,从github上下载linux版的.sh文件,然后安装

2.从GitHub上下载最新的TensorFlow源码

3.进入TensorFlow源码文件夹,输入命令

bazel build tensorflow/tools/graph_transforms:transform_graph

这里会遇到各种坑,比如

ERROR: /opt/tf/tensorflow-master/tensorflow/core/kernels/BUILD:3044:1: C++ compilation of rule ‘//tensorflow/core/kernels:matrix_square_root_op' failed (Exit 4)

gcc: internal compiler error: Killed (program cc1plus)

这个错误是cpu负荷太大,需要加行代码

# 生成swap镜像文件
sudo dd if=/dev/zero of=/mnt/512Mb.swap bs=1M count=512
# 对该镜像文件格式化
sudo mkswap /mnt/512Mb.swap
# 挂载该镜像文件 
sudo swapon /mnt/512Mb.swap

又或者这个@aws Error downloading

我看csdn有的博主解决方法是去临时文件夹删掉文件重新下载,但是我这边发现没用,我这边的解决方法是运行bazel前先输入一条命令:

sed -i '\@https://github.com/aws/aws-sdk-cpp/archive/1.5.8.tar.gz@aws' tensorflow/workspace.bzl

命令里的网址就是实际要下载的文件的地址,因为有的地址可能改了

到这里编译bazel就完成了

4.编译完了就可以模型压缩了,也是一行代码,in_graph为输入模型路径,outputs不动,out_graph为输出模型路径,transforms就填一个quantize_weights就可以了,这个就是把32bit转成8bit的,也是此方法最有效的一步;我看有的博主还先编译summary然后打印出输入输出结点,之后再输入一大堆参数,还删除一些结点啥的,我这边都试了,最终也并没有更缩减模型大小,所以就这样就可以了。

bazel-bin/tensorflow/tools/graph_transforms/transform_graph --in_graph=../model/ctpn.pb  --outputs='output_node_name'  --out_graph=../model/quantized_ctpn.pb  --transforms='quantize_weights'

最终从68m缩减到17m,75%的缩减比例,实测效果基本没啥差别,这方法还是很管用的。

补充:模型压缩一二三之tensorflow查看ckpt模型里的参数和数值

查看ckpt模型参数和数值

import os
from tensorflow.python import pywrap_tensorflow
checkpoint_path = os.path.join("<你的模型的目录>", "./model.ckpt-11000") 
# Read data from checkpoint file
reader = pywrap_tensorflow.NewCheckpointReader(checkpoint_path)
var_to_shape_map = reader.get_variable_to_shape_map()
# Print tensor name and values
for key in var_to_shape_map:
 print("tensor_name: ", key)
 print(reader.get_tensor(key))

注意:

1、"<你的模型目录>“是指你的meta、ckpt这些模型存储的路径。

比如路径”/models/model.ckpt-11000.meta"这种,那么"<你的模型目录>“就是”/models"

2、当目录下有多个ckpt时,取最新的model名字到ckpt-<最大数字>就可以了,后面不用了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
Python实现读取及写入csv文件的方法示例
Jan 12 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
Mar 14 Python
python实现画五角星和螺旋线的示例
Jan 20 Python
详解js文件通过python访问数据库方法
Mar 03 Python
python实现Dijkstra算法的最短路径问题
Jun 21 Python
python set集合使用方法解析
Nov 05 Python
PyTorch实现AlexNet示例
Jan 14 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
python实现最速下降法
Mar 24 Python
基于matplotlib xticks用法详解
Apr 16 Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 Python
Django实现内容缓存实例方法
Jun 30 Python
python Protobuf定义消息类型知识点讲解
Mar 02 #Python
Django项目在pycharm新建的步骤方法
Mar 02 #Python
基于注解实现 SpringBoot 接口防刷的方法
Mar 02 #Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 #Python
pycharm配置安装autopep8自动规范代码的实现
Mar 02 #Python
Python实现我的世界小游戏源代码
Mar 02 #Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
Mar 02 #Python
You might like
php curl基本操作详解
2013/07/23 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
FLASH 广告之外的链接
2008/12/16 Javascript
javascript 一个函数对同一元素的多个事件响应
2009/07/25 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
2014/05/20 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
微信小程序如何获取用户手机号
2018/01/26 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
JavaScript实现下拉列表
2021/01/20 Javascript
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
python 排序算法总结及实例详解
2016/09/28 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
python基于socket函数实现端口扫描
2020/05/28 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
管理学专业个人求职信范文
2013/12/13 职场文书
婚假请假条怎么写
2014/04/10 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
jquery插件实现图片悬浮
2021/04/16 jQuery
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers