TensorFlow官方发布剪枝优化工具:参数减少80%,精度几乎不变
去年TensorFlow官方推出了模型优化工具,最多能将模型尺寸减小4倍,运行速度提高3倍。
最近现又有一款新工具加入模型优化“豪华套餐”,这就是基于Keras的剪枝优化工具。
训练AI模型有时需要大量硬件资源,但不是每个人都有4个GPU的豪华配置,剪枝优化可以帮你缩小模型尺寸,以较小的代价进行推理。
什么是权重剪枝?
权重剪枝(Weight Pruning)优化,就是消除权重张量中不必要的值,减少神经网络层之间的连接数量,减少计算中涉及的参数,从而降低操作次数。
这样做的好处是压缩了网络的存储空间,尤其是稀疏张量特别适合压缩。例如,经过处理可以将MNIST的90%稀疏度模型从12MB压缩到2MB。
此外,权重剪枝与量化(quantization)兼容,从而产生复合效益。通过训练后量化(post-training quantization),还能将剪枝后的模型从2MB进一步压缩到仅0.5MB 。
TensorFlow官方承诺,将来TensorFlow Lite会增加对稀疏表示和计算的支持,从而扩展运行内存的压缩优势,并释放性能提升。
优化效果
权重剪枝优化可以用于不同任务、不同类型的模型,从图像处理的CNN用于语音处理的RNN。下表显示了其中一些实验结果。
以GNMT从德语翻译到英语的模型为例,原模型的BLEU为29.47。指定80%的稀疏度,经优化后,张量中的非零参数可以从211M压缩到44M,准确度基本没有损失。
使用方法
现在的权重剪枝API建立在Keras之上,因此开发者可以非常方便地将此技术应用于任何现有的Keras训练模型中。
开发者可以指定最终目标稀疏度(比如50%),以及执行剪枝的计划(比如2000步开始剪枝,在4000步时停止,并且每100步进行一次),以及剪枝结构的可选配置。
import tensorflow_model_optimization as tfmotmodel = build_your_model()pruning_schedule = tfmot.sparsity.keras.PolynomialDecay(initial_sparsity=0.0, final_sparsity=0.5,begin_step=2000, end_step=4000)model_for_pruning = tfmot.sparsity.keras.prune_low_magnitude(model, pruning_schedule=pruning_schedule)…model_for_pruning.fit(…) tensorflow_model_optimization as tfmot
model = build_your_model()
pruning_schedule = tfmot.sparsity.keras.PolynomialDecay(
initial_sparsity=0.0, final_sparsity=0.5,
begin_step=2000, end_step=4000)
model_for_pruning = tfmot.sparsity.keras.prune_low_magnitude(model, pruning_schedule=pruning_schedule)
…
model_for_pruning.fit(…)
△ 三个不同张量,左边的没有稀疏度,中心的有多个单独0值,右边的有1x2的稀疏块。
随着训练的进行,剪枝过程开始被执行。在这个过程中,它会消除消除张量中最接近零的权重,直到达到当前稀疏度目标。
每次计划执行剪枝程序时,都会重新计算当前稀疏度目标,根据平滑上升函数逐渐增加稀疏度来达到最终目标稀疏度,从0%开始直到结束。
用户也可以根据需要调整这个上升函数。在某些情况下,可以安排训练过程在某个步骤达到一定收敛级别之后才开始优化,或者在训练总步数之前结束剪枝,以便在达到最终目标稀疏度时进一步微调系统。
△权重张量剪枝动画,黑色的点表示非零权重,随着训练的进行,稀疏度逐渐增加
GitHub地址:
https://github.com/tensorflow/model-optimization
官方教程:
https://www.tensorflow.org/model_optimization/guide/pruning/pruning_with_keras
— 完 —
欢迎关注磐创博客资源汇总站:http://docs.panchuang.net/
欢迎关注PyTorch官方中文教程站:http://pytorch.panchuang.net/
TensorFlow官方发布剪枝优化工具:参数减少80%,精度几乎不变的更多相关文章
- Qt程序打包发布方法(使用官方提供的windeployqt工具)
Qt程序打包发布方法(使用官方提供的windeployqt工具) 转自:http://tieba.baidu.com/p/3730103947?qq-pf-to=pcqq.group Qt 官方开发环 ...
- PyTorch官方中文文档:torch.optim 优化器参数
内容预览: step(closure) 进行单次优化 (参数更新). 参数: closure (callable) –...~ 参数: params (iterable) – 待优化参数的iterab ...
- 进程优化工具Process Lasso Pro 8.4官方版+激活破解方法
Process Lasso是一款来自美国的系统进程优化工具,基于特殊算法动态调整进程的优先级别,通过合理的设置进程优先级来实现降低系统负担的功能.可有效避免蓝 屏.假死.进程停止响应.进程占用 CPU ...
- 发布《Linux工具快速教程》
发布<Linux工具快速教程> 阶段性的完成了这本书开源书籍,发布出来给有需要的朋友,同时也欢迎更多的朋友加入进来,完善这本书: 本书Github地址:https://github.com ...
- SQLSERVER复制优化之一《减少包大小》
原文:SQLSERVER复制优化之一<减少包大小> SQLSERVER复制优化之一<减少包大小> 自从搭了复制之后以为可以安枕无忧了,谁不知问题接踵而来 这次遇到的问题是丢包, ...
- 教你使用Android SDK布局优化工具layoutopt
创建好看的Android布局是个不小的挑战,当你花了数小时调整好它们适应多种设备后,你通常不想再重新调整,但笨重的嵌套布局效率往往非常低下,幸运的是,在Android SDK中有一个工具可以帮助你优化 ...
- 解析Tensorflow官方English-Franch翻译器demo
今天我们来解析下Tensorflow的Seq2Seq的demo.继上篇博客的PTM模型之后,Tensorflow官方也开放了名为translate的demo,这个demo对比之前的PTM要大了很多(首 ...
- 解析Tensorflow官方PTB模型的demo
RNN 模型作为一个可以学习时间序列的模型被认为是深度学习中比较重要的一类模型.在Tensorflow的官方教程中,有两个与之相关的模型被实现出来.第一个模型是围绕着Zaremba的论文Recurre ...
- mysql优化———第二篇:数据库优化调整参数
摘要 参数调优内容: 1. 内存利用方面 2. 日志控制方面 3.文件IO分配,空间占用方面 4. 其它相关参数 一 摘要 通过参数提高MYSQL的性能.核心思想如下: 1 提高my ...
随机推荐
- numpy.random模块用法总结
from numpy import random numpy.random.uniform(low=0.0, high=1.0, size=None) 生出size个符合均分布的浮点数,取值范围为[l ...
- golang 统计系统测试覆盖率
golang 统计系统测试覆盖率 参考资料 https://www.elastic.co/blog/code-coverage-for-your-golang-system-tests https:/ ...
- TypeScript声明文件
为什么需要声明? 声明的本质是告知编译器一个标识符的类型信息.同时,在使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全.接口提示等功能. 声明在TypeScript中至关重要,只有通过 ...
- JDBC阶段总结
一.JDBC的概念:Java DataBase Connectivity用Java语言操作数据库(通过SQL)二.数据库的驱动和JDBC的关系三.编写JDBC的步骤: a.注册驱动 b.建立与数据库的 ...
- MVC06
1.校验机制 我们可以在Model中使用属性进行校验 using System; using System.ComponentModel.DataAnnotations; using System.D ...
- BEM命名及其在sass中的实践
Why use it 近几年web应用的发展可以用疯狂来形容,依靠浏览器的支持以及前端技术和框架的发展,很多应用已经把大量的逻辑从服务器端迁移到了浏览器端,使用前后端分离技术,浏览器端与用户进行交互来 ...
- 关于在layui中的table checkbox 默认选中设置
一.layui版本 layui-v2.4.5 二.设置table的checkbox默认选中 总共有两种方法: 方法1:在返回的json中设置LAY_CHECKED为true,页面上的checkbox就 ...
- ASP.net MVC 构建layui管理后台(构造基础仓储)<1>
本文章为ASP.net MVC 构建layui管理后台,第一篇. 使用EF+ado.net 实体数据模型模式进行底层的数据库连接. 在项目添加一个类库Model 在类库Model上添加一个ado.ne ...
- 附013.Kubernetes永久存储Rook部署
一 Rook概述 1.1 Ceph简介 Ceph是一种高度可扩展的分布式存储解决方案,提供对象.文件和块存储.在每个存储节点上,将找到Ceph存储对象的文件系统和Ceph OSD(对象存储守护程序)进 ...
- 如何使用Logstash
目录 一.什么是Logstash 二.如何安装 三.快速使用 四.Input输入插件 五.codec编码插件 六.filter过滤器插件 七.output输出插件 八.总结 一.什么是Logstash ...