float32精度_模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo...

2023-11-05

鱼羊 发自 凹非寺
量子位 报道 | 公众号 QbitAI

TensorFlow模型优化工具包又添一员大将,训练后的半精度浮点量化(float16 quantization)工具。

有了它,就能在几乎不损失模型精度的情况下,将模型压缩至一半大小,还能改善CPU和硬件加速器延迟。

这一套工具囊括混合量化,全整数量化和修剪。

如何量化模型,尽可任君挑选。

压缩大小,不减精度

双精度是64位,单精度是32位,所谓的半精度浮点数就是使用2个字节(16位)来存储。

比起8位或16位整数,半精度浮点数具有动态范围高的优点;而与单精度浮点数相比,它能节省一半的储存空间和带宽。

比起双精度和单精度浮点数,半精度浮点显然没有那么适合计算。那么问题来了,为什么要主动降低精度呢?

因为实际上,很多应用场景对于精度的要求并没有那么高。在分布式深度学习中,模型可能会有成千上万个参数,体积一个赛一个的大,如果能把所有常量值都用16位浮点数而不是32位浮点数来存储,那么模型大小就能压缩至一半,还是相当可观的。

体积压缩了,精确度难道不会损失吗?

降低浮点数精度,当然会带来精确度的损失,但是不必担心,这样的损失小到可以忽略不计。

在ILSVRC 2012图像分类任务上分别测试标准的MobileNet float32模型和float16模型变体,可以看到,无论是MobileNet v1还是MobileNet v2,无论是top1还是top5,fp16模型的精度损失都小于0.03%

再试试对象检测任务,fp16变体比之标准模型,几乎没有精度损失。

而无论是MobileNet v1还是MobileNet SSD,fp16变体的体积都比标准模型的大小降低了约一半。

小体积,高精度,有什么理由不试试半精度浮点量化工具呢?

便捷使用

想要把你训练过的32位模型转成16位,操作并不复杂。只需设置两行关键代码。

在TensorFlow Lite converter上把32位模型的优化设置设为DEFAULT,然后把目标规范支持类型设置为FLOAT16:

import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_types = [tf.lite.constants.FLOAT16]
Tflite_quanit_model = converter.convert()

模型转换成功之后就可以直接运行了。

默认情况下,模型是这样在CPU上运行的:把16位参数“上采样”为32位,并在标准32位浮点运算中执行操作。

这样做的原因是目前很多硬件还不支持加速fp16计算。在未来,有更多硬件支持的情况下,这些半精度值就不再需要“上采样”,而是可以直接进行计算。

在GPU上运行fp16模型更简单。

TensorFlow Lite的GPU代理已经得到加强,能够直接获取并运行16位精度参数:

//Prepare GPU delegate.
const TfLiteGpuDelegateOptions options = {
 .metadata = NULL,
 .compile_options = {
 .precision_loss_allowed = 1, // FP16
 .preferred_gl_object_type = TFLITE_GL_OBJECT_TYPE_FASTEST,
 .dynamic_batch_enabled = 0, // Not fully functional yet
 },
};

如果你感兴趣,TensorFlow官方还给出了教程demo,打开文末Colab链接,你就可以在线训练一个16位的MNIST模型啦。

传送门

官方指南:

https://www.tensorflow.org/lite/performance/post_training_quantization

Colab链接:

https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/performance/post_training_float16_quant.ipynb

— 完 —

量子位 · QbitAI

վ'ᴗ' ի 追踪AI技术和产品新动态

戳右上角「+关注」获取最新资讯↗↗

如果喜欢,请分享or点赞吧~比心❤

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

float32精度_模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo... 的相关文章

  • Rust 删除排序数组中的重复项

    力扣https leetcode cn com problems remove duplicates from sorted array 参考代码和注释 fn main let mut v Vec
  • Linux下Elasticsearch离线安装

    先去下载离线安装包 我这里是7 10 0 Past Releases of Elastic Stack Software Elastic 上传到 usr local下 解压 tar zxvf elasticsearch 7 10 0 lin
  • 【MATLAB】MATLAB打开后,提示内部崩溃,直接闪退关闭——解决方法

    问题描述 在第一次安装MATLAB软件时 正常使用 过了一段时间后 突然发现在命令行可以正常使用 但运行编译文件里的程序便会报 MathWorks 崩溃的错误 提示MATLAB遇到了内部问题 需要关闭 结果MATLAB自己闪退结束 解决方法
  • MATLAB(6)GUI应用介绍

    目录 GUI编辑器 控件 属性 回调函数 MATLAB常见的控件 普通按钮 切换按钮 可编辑文本 字符获取 字符显示 复选框 单选按钮 弹出式菜单 滑动条 列表框 表 坐标区 附录 各文件共享数据 保存 获取 GUI编辑器 MATLAB的G
  • 【问题记录】05 Host key for [ip] has changed and you have requested strict checking.Host key verification

    1 报错信息如下 为主机ip WARNING REMOTE HOST IDENTIFICATION HAS CHANGED IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY Someo
  • 操作系统实验——互斥与同步

    目录 1 SYSTEM V信号量 1 创建或打开 semget 2 申请或释放 semop 3 设置信号量 semctl 2 POSIX信号量 1 初始化 sem init 2 申请和释放 sem wait 3 销毁 sem destroy
  • 详细记录YOLACT实例分割ncnn实现

    点击上方 AI算法修炼营 选择加星标或 置顶 标题以下 全是干货 整理 公众号 深度学习与计算机视觉 作者 nihui 链接 https zhuanlan zhihu com p 128974102 本文转载自知乎 作者已授权 未经许可请勿
  • 《写给大家看的设计书(第4版)》读书笔记

    文章目录 前言 设计原则 亲密性 对齐 重复 对比 结语 前言 设计类的书籍看过一些 大多分为两类 一类是讲基础的 构图 明暗 色彩等基础理论 还有一类是分享介绍具体案里的 这两类书籍对于大多数并不想真正成为设计师的人来说很多时候并没有什么
  • 位置无关码介绍

    1 基本概念 应用程序必须经过编译 汇编和链接后才变成可执行文件 在链接时 要对所有目标文件进行地址重定位 建立符号引用规则 同时为变量 函数等分配运行地址 当程序执行时 系统必须把代码加载到链接时所指定的地址空间即链接地址 链接地址介绍在
  • 使用C写Python的模块

    使用C写Python的模块 2012 12 21 23 49 更新 邹业盛 概述 引入 Python h 头文件 编写包装函数 处理从 Python 传入的参数 实现逻辑功能 处理 C 中的返回值 注册函数 注册模块 编译 原文发于2010
  • 【开发工具】【make】make 3.82源码编译安装

    摘要 通过下载make 3 82源码 再编译机上安装make 3 82版本 解决make版本过高的问题 1 下载make 3 82 下载地址为 wget ftp ftp gnu org gnu make make 3 82 tar gz 我
  • 全局监控 click事件的四种方式

    本文主要给大家分享如何在全局上去监听 click 点击事件 并做些通用处理或是拦截 使用场景可能就是具体的全局防快速重复点击 或是通用打点分析上报 用户行为监控等 以下将以四种不同的思路和实现方式去监控全局的点击操作 由简单到复杂逐一讲解
  • Linux学习笔记-----网络编程套接字

    目录 一 概念 一 端口号概念 二 套接字概念 三 套接字 socket 编程接口 四 sockaddr结构 五 网络字节序 二 基于UDP的相关理解 一 UDP协议 二 编写简单的UDP服务端和客户端 三 小结 三 基于TCP的相关理解
  • iOS 自动构建命令——xcodebuild

    想想当初天天来到公司 每天需要做一件事就是打开Xcode打包ipa 上传到fir 日复一日月复一月年复一年的做着同样的事情 作为有志成为优秀工程师的我来说 这是必须要解决的问题 所以决定自动化解决问题 简介 xcodebuild 是苹果发布
  • Qt环境变量配置

    在桌面找到 此电脑 右击 找到属性 点击属性 找到高级系统设置 点击 选中环境变量 选中path 点击编辑 进入环境变量是这个样子的 下一步找到Qt安装的位置复制路径 这个是2015 64的 2015 32和2017 64的路径都要 然后
  • 如何选择期权品种,是做期货期货还是做期权

    有朋友问 国内的疫情目前得到较好的控制 经济也在逐渐恢复运行 国外的疫情在加重 也许会有部分国家经济做阶段停摆 假如上面的成立 我们是不是可以选择一种套利 买入国内经济需求会带动上涨的商品 卖出国外经济下滑会带动下跌的商品 如果这个方案可行
  • 分布式系统下的纠删码技术(一) -- Erasure Code (EC)

    近几个月主要参与一个分布式存储系统的纠删码部分 用于数据容错 纠删码在学术界出现比较早 现在ceph 微软的存储系统 Hadoop 3 0等都用了EC 文章会分为多篇 主要将Erasure Code LRC 以及相关的数学基础 作为学习总结
  • 前端技术搭建贪吃蛇小游戏(内含源码)

    功能介绍 以下是贪吃蛇小游戏的玩法和规则 游戏开始时 玩家控制一条小蛇在游戏区域内移动 通过吃食物来增加分数 小蛇的移动方向由玩家控制 可以使用键盘上的方向键来控制小蛇的移动方向 当小蛇吃到食物时 它会变长 并且玩家的分数会增加 如果小蛇撞

随机推荐

  • 拷贝构造函数(默认的,自定义的,什么时候一定要自定义,什么时候系统会自动调用)

    为什么有指针成员的类 要自定义拷贝构造函数 参考了 https blog csdn net caoshangpa article details 79226270 没有拷贝构造函数的类 系统会创建默认的拷贝构造函数 默认拷贝构造函数是浅拷贝
  • 【JSON 初级】

    概述 前后台数据交换的格式标准 一种优秀的 数据格式 采用键值对的方式 取数据 用键 优势 比XML更小 更快 更容易解析 JSON是存储和交换文本信息的语法 类似XML 工具 网上有校验json数据 并提示错误 将数据转化为json数据
  • 深入理解java虚拟机【并发编程缓存】

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 随着多核CPU的高速发展 为了充分利用硬件的计算资源 操作系统的并发多任务功能正变得越来越重要 但是CPU在进行计算时 还需要从内存读取输出 并 将计算结果存放到内存中 然
  • 【华为OD机试】分苹果(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • 闲聊:自动化到底是干什么的?

    很多人会问 自动化到底是干什么的 也许是因为这个专业所要学习和掌握的知识太庞杂了 以至于自动化被称之为万能胶 干什么都行 却又都不专业 很大一部分同学上到大二大三还不知道自己具体能做什么 迷茫中便选择了转行 希望还在迷茫中的低年级的同学看了
  • C++11变长模板解析(深入理解C++11)

    参考自 深入理解C 11 变长模版 变长函数和变长的模版参数 变长函数 double sum int n 求n个double数据之和 double sum 0 va list args 接受输入数据的数据结构 需声明stdarg h va
  • 3D游戏设计作业9:游戏智能

    坦克对战游戏 AI 设计 游戏截图 1 作业要求 从商店下载游戏 Kawaii Tank 或 其他坦克模型 构建 AI 对战坦克 具体要求 使用 感知 思考 行为 模型 建模 AI 坦克 场景中要放置一些障碍阻挡对手视线 坦克需要放置一个矩
  • python 点名程序(随机点名不重复 可定义名字列表 语音播报 免费下载 多线程打包)

    python点名小程序 含有 调用windows本地语音播报 python多线程打包 等小技巧 软件获取 点击下方地址直接下载压缩包 免费为大家提供 软件获取地址 大家拿了软件别忘了给博主一个免费的赞 谢谢 解压压缩包 里面的MyAPP e
  • 配置和美化Arch Linux

    前面说了如何安装一个最小化的Arch Linux 现在来说说如何配置 配置网络 如果使用有线网络的话 将dhcp服务开机启动 systemctl enable dhcpcd 如果使用无线网络的话 使用wifi menu命令连接网络 如果在使
  • Base64图片上传

    文章目录 1 图片上传样式写法 2 Js写法 1 图片上传样式写法 div class form group div
  • python+OpenCV图像处理(五)图像的阈值分割

    图像的阈值处理 一幅图像包括目标物体 背景还有噪声 要想从多值的数字图像中直接提取出目标物体 常用的方法就是设定一个阈值T 用T将图像的数据分成两部分 大于T的像素群和小于T的像素群 这是研究灰度变换的最特殊的方法 称为图像的二值化 Bin
  • 分号与逗号的区别及举例_顿号与逗号与分号间的区别是什么?

    逗号把句子切分为意群 表示小于分号大于顿号的停顿 而逗号有哪些用法呢 以下是由小编整理关于逗号如何使用的内容 希望大家喜欢 逗号汉语用法句子内部主语与谓语之间如需停顿 用逗号 例如 我们看得见的星星 绝大多数是恒星 句子内部动词与宾语之间如
  • STM32设置为I2C从机模式

    STM32设置为I2C从机模式 目录 STM32设置为I2C从机模式 前言 1 硬件连接 2 软件编程 3 运行测试 3 1 I2C连续写入 3 2 I2C连续读取 3 3 I2C单次读写测试 4 总结 前言 STM32的I2C作为主机的情
  • pentaho安装

    注意 以下图片文字中的org mysql一律改为com mysql 1 pentaho社区版下载地址 https sourceforge net projects pentaho 2 下载以下两个文件 3 biserver ce 6 1 0
  • JMeter 设置请求头信息的详细步骤

    在使用 JMeter 的过程中 我们会遇到需要设置请求头信息的场景 比如 POST 传过去的 Body 数据是 json 格式的 需要填添加头信息 Content Type application json 在 header 中用 toke
  • python中错误Reshape your data either using array.reshape(-1, 1)

    1 错误 Traceback most recent call last File Users yuanbao PycharmProjects EnsembleLearning KNeighbors py line 16 in
  • 数据控制类别(CC1和CC2)——DO-178B/ED-12B学习笔记之七

    数据控制类别 CC1和CC2 DO 178B ED 12B学习笔记之七 为了理解数据控制类别 CC1和CC2 的定义 先看DO 178B的7 3条 原文 Software life cycle data can be assigned to
  • NUC980开源项目27-you should not run configure as root

    上面是我的微信和QQ群 欢迎新朋友的加入 项目码云地址 国内下载速度快 https gitee com jun626 nuc980 open source project 项目github地址 https github com Jun117
  • Shiro实战学习笔记(2)-自定义Realm

    1 自定义realm package org tzb realm import org apache shiro authc AuthenticationException import org apache shiro authc Aut
  • float32精度_模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo...

    鱼羊 发自 凹非寺 量子位 报道 公众号 QbitAI TensorFlow模型优化工具包又添一员大将 训练后的半精度浮点量化 float16 quantization 工具 有了它 就能在几乎不损失模型精度的情况下 将模型压缩至一半大小