解决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 相关文章推荐
Windows8下安装Python的BeautifulSoup
Jan 22 Python
Python类的继承和多态代码详解
Dec 27 Python
numpy使用技巧之数组过滤实例代码
Feb 03 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 Python
Python subprocess模块常见用法分析
Jun 12 Python
python 对给定可迭代集合统计出现频率,并排序的方法
Oct 18 Python
Python判断对象是否相等及eq函数的讲解
Feb 25 Python
Python实现使用request模块下载图片demo示例
May 24 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
python中的逆序遍历实例
Dec 25 Python
Keras实现将两个模型连接到一起
May 23 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标签)
2014/02/03 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
PHP常用的三种设计模式
2017/02/17 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
SWFObject 2.1以上版本语法介绍
2010/07/10 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
对pandas的算术运算和数据对齐实例详解
2018/12/22 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
高三体育教学反思
2014/01/29 职场文书
网上快餐厅创业计划书
2014/02/01 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书
微信小程序实现拍照和相册选取图片
2021/05/09 Javascript
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
Python合并pdf文件的工具
2021/07/01 Python