解决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转码问题的解决方法
Oct 07 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
Mar 19 Python
Python实现正则表达式匹配任意的邮箱方法
Dec 20 Python
python实现简单flappy bird
Dec 24 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 Python
python+logging+yaml实现日志分割
Jul 22 Python
python中删除某个元素的方法解析
Nov 05 Python
Python二次规划和线性规划使用实例
Dec 09 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
Jun 11 Python
关于python爬虫应用urllib库作用分析
Sep 04 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中html word 互转的方法
2016/01/28 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
Python中用Spark模块的使用教程
2015/04/13 Python
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
Python与R语言的简要对比
2017/11/14 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
python取余运算符知识点详解
2019/06/27 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
python是否适合网页编程详解
2019/10/04 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
浅析Python requests 模块
2020/10/09 Python
大学生学习2014全国两会心得体会
2014/03/13 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
三八妇女节活动总结
2014/05/04 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
原告代理词范文
2015/05/25 职场文书
校运会广播稿
2015/08/19 职场文书
护士岗位竞聘书
2015/09/15 职场文书
《法国号》教学反思
2016/02/22 职场文书
Django实现翻页的示例代码
2021/05/24 Python
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android