谷歌TensorFlowLite正式发布,机器学习框架向移动端大步挺进!
上个月,谷歌正式宣布推出针对移动设备和嵌入式设备的轻量级解决方案 TensorFlow Lite。而在此之前,今年 5 月份的谷歌 I/O 大会上他们已经对此进行了预告。承袭 TensorFlow 在服务器、IoT 设备等平台的良好表现,TensorFlow Lite 的推出将使得移动端的机器学习模型部署得以大范围推广。
模型下载:download.tensorflow.org/models/tflite/smartreply_1.0_2017_11_01.zip
项目代码:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/models/smartreply
TensorFlow Lite 突出特征
轻量级:满足机器学习模型推断的小型二进制规模和快速初始化/启动的要求;
跨平台:可以满足在多个平台运行,首先是安卓和 iOS;
快速:专为移动设备进行优化,包括模型加载时间显著加快,支持硬件加速等等。
如今,越来越多移动设备内置了专门的自定义硬件以更加有效地处理机器学习工作负载。TensorFlow Lite 支持安卓神经网络 API(https://developer.android.com/ndk/guides/neuralnetworks/index.html),以充分利用新的可用加速器。
当加速器硬件不可用时,TensorFlow Lite 会退至优化的 CPU 执行状态,从而确保模型仍然可以在大量设备上快速运行。
图丨 TensorFlow Lite 的设计架构
组成部分
TensorFlow 模型(TensorFlow Model):保存在磁盘上、经过训练的 TensorFlow 模型;
TensorFlow Lite 转换器(TensorFlow Lite Converter):将模型转换为 TensorFlow Lite 文件格式的一个程序;
TensorFlow Lite 模型文件(TensorFlow Lite Model File):基于 FlatBuffers 的模型文件格式,经过适应最大速度和最小规模的优化。
TensorFlow Lite 模型文件被应用在移动应用程序中
Java API:安卓设备上适用于 C++ API 的便利封装;
C++ API:加载 TensorFlow Lite 模型文件并启动编译器(Interpreter)。安卓和 iOS 上都有相同的库;
编译器:使用一组运算符来执行模型。编译器支持选择性操作员加载。没有运算符的情况下,只有 70KB,加载了所有运算符,有 300KB。这比 TensorFlow Mobile 所要求的 1.5M 的明显低得多;
在选定的安卓设备上,编译器将使用安卓神经网络 API 实现硬件加速,或者在无可用 API 的情况下默认执行 CPU。
TensorFlow Lite 已支持多个面向移动端训练和优化的模型
MobileNet:一类能够识别 1000 个不同的对象的视觉模型,专门为移动和嵌入式设备而设计;
Inception v3:一种功能类似 MobileNet 的图像识别模型,虽然体积更大,但能提供更高的准确率;
Smart Reply:一种设备上的对话模型,能对接收到的会话聊天信息提供触发性应答。第一方和第三方通信应用可以在 Android Wear 上使用该功能。
Inception v3 和 MobileNets 已经在 ImageNet 数据集上训练。你可以通过迁移学习,在自己的图像数据集上重新训练。
- 这或许是对小白最友好的python入门了吧——12,列表深入体验
- 初识SqlLite ---.net连接数据库
- 【实践操作】:六步教你如何用开源框架Tensorflow对象检测API构建一个玩具检测器
- 这或许是对小白最友好的python入门了吧——11,if语句初体验
- 你的网站做好神马搜索优化了吗?神马搜索站长工具提交
- 应用程序的通信成本
- 这或许是对小白最友好的python入门了吧——18,定义函数
- 【深度学习】图片风格转换应用程序:使用CoreML创建Prisma
- 压力测试中存在的问题
- 这或许是对小白最友好的python入门了吧——18,用while循环处理列表
- 如何在js中将统计代码图标隐藏
- 警惕IT黑洞
- 这或许是对小白最友好的python入门了吧——17,while循环
- 泛型介绍(接上一篇,具体的事例随后呈上)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Mybatis在接口上使用注解配置SQL语句以及接口与xml一起使用
- 分布式计算框架MapReduce
- 安装webpack后,执行webpack -v命令时报错:SyntaxError: Block-sc
- SpringMVC数据类型转换器与国际化配置
- 分布式资源调度——YARN框架
- 在SpringMVC中使用数据验证组件——hibernate-validator
- 我的 2020 iOS BAT 面试心得
- Java操作HDFS开发环境搭建以及HDFS的读写流程
- HDFS伪分布式环境搭建
- 初识Hadoop
- SpringMVC返回JSON数据以及文件上传、过滤静态资源
- SpringMVC返回数据到视图
- 初识SpringBoot Web开发
- Nginx+Tomcat搭建集群环境
- Maven环境隔离