解决tensorflow模型压缩的问题_踩坑无数,总算搞定

作者:毕业恐慌症1 时间:2021-12-18 03:09:23 

1.安 * azel,从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-<最大数字>就可以了,后面不用了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

来源:https://blog.csdn.net/u013837919/article/details/86770669

标签:tensorflow,模型,压缩
0
投稿

猜你喜欢

  • asp如何写入超长的字符串?

    2010-06-09 18:53:00
  • selenium+python配置chrome浏览器的选项的实现

    2022-06-24 11:56:31
  • Ubuntu20下的Django安装的方法步骤

    2022-05-01 09:07:24
  • Python urllib 入门使用详细教程

    2023-03-02 10:48:35
  • 不同分辨率下的自适用宽度

    2008-11-24 12:58:00
  • numpy矩阵乘法中的multiply,matmul和dot的使用

    2023-10-22 23:58:56
  • Python 获取指定文件夹下的目录和文件的实现

    2023-12-23 22:44:29
  • OpenCV学习之图像形态学处理详解

    2022-02-19 15:45:39
  • flask循环导入的问题解决

    2023-10-01 10:28:52
  • pandas 实现分组后取第N行

    2023-02-09 11:11:40
  • opencv+python实现图像矫正

    2022-09-28 09:28:14
  • 基于pandas向csv添加新的行和列

    2021-11-29 02:28:56
  • HTML,CSS和JavaScript速查表

    2010-09-16 13:02:00
  • pycharm配置pyqt5-tools开发环境的方法步骤

    2022-01-05 08:31:00
  • bootstrap自定义样式之bootstrap实现侧边导航栏功能

    2023-09-06 20:41:36
  • python实现计算资源图标crc值的方法

    2022-07-02 17:57:56
  • Python中selenium库的用法详解

    2021-06-26 00:29:41
  • Python实现KNN(K-近邻)算法的示例代码

    2023-09-25 15:56:18
  • Python中BeautifulSoup模块详解

    2023-07-21 21:53:15
  • 详解Python中的变量及其命名和打印

    2023-07-23 11:31:45
  • asp之家 网络编程 m.aspxhome.com