解决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解析xml成对应的html示例分享
Apr 02 Python
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
Aug 22 Python
Python中装饰器的一个妙用
Feb 08 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
python批量实现Word文件转换为PDF文件
Mar 15 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
Apr 02 Python
Python日期时间Time模块实例详解
Apr 15 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
Python 中list ,set,dict的大规模查找效率对比详解
Oct 11 Python
python 多线程共享全局变量的优劣
Sep 24 Python
进行数据处理的6个 Python 代码块分享
Apr 06 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 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
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
详解Chai.js断言库API中文文档
2018/01/31 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python的IDEL增加清屏功能实例
2017/06/19 Python
django反向解析和正向解析的方式
2018/06/05 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
python读取与处理netcdf数据方式
2020/02/14 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
Python中实现输入一个整数的案例
2020/05/03 Python
公益广告标语
2014/06/19 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
个人总结与自我评价2015
2015/03/11 职场文书