解决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中asyncore的用法实例
Sep 29 Python
Python用GET方法上传文件
Mar 10 Python
Python进行数据科学工作的简单入门教程
Apr 01 Python
python实现数据写入excel表格
Mar 25 Python
python找出一个列表中相同元素的多个索引实例
Jun 11 Python
Python制作词云图代码实例
Sep 09 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
python多进程下的生产者和消费者模型
May 07 Python
Java多线程实现四种方式原理详解
Jun 02 Python
学习Python需要哪些工具
Sep 04 Python
用Python实现Newton插值法
Apr 17 Python
Python函数中apply、map、applymap的区别
Nov 27 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面向对象分析设计的61条军规小结
2010/07/17 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
php中引用符号(&amp;)的使用详细介绍
2016/12/06 PHP
Symfony查询方法实例小结
2017/06/28 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
2015/03/04 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
Bootstrap CSS布局之图像
2016/12/17 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
nodejs操作mongodb的增删改查功能实例
2017/11/09 NodeJs
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python类的继承实例详解
2017/03/30 Python
PHP实现发送和接收JSON请求
2018/06/07 Python
python tkinter canvas 显示图片的示例
2019/06/13 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
python  logging日志打印过程解析
2019/10/22 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
竞聘书格式及范文
2014/03/31 职场文书
军训通讯稿范文
2015/07/18 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS