解决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和C语言混合编程实例
Jun 04 Python
Python Nose框架编写测试用例方法
Oct 26 Python
Python3 伪装浏览器的方法示例
Nov 23 Python
django启动uwsgi报错的解决方法
Apr 08 Python
详解Django之auth模块(用户认证)
Apr 17 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
Oct 29 Python
在python中使用with打开多个文件的方法
Jan 07 Python
网易有道2017内推编程题 洗牌(python)
Jun 19 Python
python递归法解决棋盘分割问题
Jul 17 Python
Python轻量级web框架bottle使用方法解析
Jun 13 Python
详解pyinstaller生成exe的闪退问题解决方案
Jun 19 Python
Keras模型转成tensorflow的.pb操作
Jul 06 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缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
PHP超级全局变量数组小结
2012/10/04 PHP
PHP开发微信支付的代码分享
2014/05/25 PHP
PHP获取文件行数的方法
2015/06/10 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
javascript动画算法实例分析
2015/07/31 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
2017/04/13 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
Python 字符串操作方法大全
2014/03/11 Python
Python中的多重装饰器
2015/04/11 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
python实现批量图片格式转换
2020/06/16 Python
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
运行Python编写的程序方法实例
2020/10/21 Python
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
2014年审计工作总结
2014/11/17 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers