【tensorflowflutterweb】机器学习模型怎样用到前端上(未写完)

书接上回

        在上一章 我们谈了怎么根据项目需求构建一个简单的机器学习模型。

     ​​​​​​ ​​​​​​【tensorflow&flutter】自己写个机器学习模型用在项目上?-CSDN博客文章浏览阅读852次,点赞22次,收藏15次。【tensorflow&flutter】自己写个机器学习模型用在项目上? 拍摄APP项目上线有一阵了,每天的拍摄数据呈现波动上升状态、业务方需要对数据进行加工,如果能有对未来的数据量的预测就好了 。https://blog.csdn.net/qq_36544007/article/details/135404222?spm=1001.2014.3001.5502        其实上期的项目完全可以用tensorflow serving去获取数据,或者是一个web 页面去加载tensorflow js去计算更加方便部署。

        哦,至于你说什么是tensorflow serving、什么是tensorflow js,本期咱们说一下机器学习模型用在前端的几种方式。

部署机器学习模型的方式

        咱们还是继续以tensorflow为例子(大家也可以了解一下PyTorch)

先说总结

         TensorFlow 可提供强大的功能,以便您在任何环境(包括服务器、边缘设备、浏览器、移动设备、微控制器、CPU、GPU、FPGA)中部署模型。TensorFlow Serving 可以在先进的处理器(包括 Google 的自定义张量处理单元 [TPU])上以生产规模运行机器学习模型。
        如果您需要在靠近数据源的位置分析数据,以缩短延迟时间并更好地保护数据隐私,可以借助 TensorFlow Lite 框架在移动设备、边缘计算设备甚至微控制器上运行模型,还可以借助 TensorFlow.js 框架仅使用网络浏览器就能运行机器学习模型

  就是如上所说的一样 可以在设备上、浏览器中、本地云端都可以部署模型。

1.Tensorflow Serving

        先说一下tensorflow serving这种常规后端,直接返回推断好的数据。 比如千人千面的淘宝推荐,头条不同的广告,又或者是这种与前端相对交互更多的:交互式推荐在外卖场景的探索与应用。

简易使用

          很简单 大家可以试一试。先下载Docker,然后按照以下步骤尝试:

# Download the TensorFlow Serving Docker image and repo 下载TensorFlow Serving Docker镜像
docker pull tensorflow/serving
# 获取模型
git clone https://github.com/tensorflow/serving
# 定义模型
TESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"

# Start TensorFlow Serving container and open the REST API port 启动TensorFlow Serving容器并打开REST API端口
docker run -t --rm -p 8501:8501 \
    -v "$TESTDATA/saved_model_half_plus_two_cpu:/models/half_plus_two" \
    -e MODEL_NAME=half_plus_two \
    tensorflow/serving &

# Query the model using the predict API  本地就可以请求了
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
    -X POST http://localhost:8501/v1/models/half_plus_two:predict

# Returns => { "predictions": [2.5, 3.0, 4.5] }

介绍 

         使用docker 实现了:只需要传递参数请求就可以输出推断结果的最简单节点。遇到问题可以参考官方链接或者网上查询。 

        比如大家制作好的模型/网上更有实力的模型/针对项目强化学习的模型 都可以通过这样的情况进行部署,然后通过后端包装一下、或者直接调用。

        适用的场景就如上面所说,还包括我上篇文章的数据推断、票房预测、一次推断多处使用,或者计算量数据大、资源来自服务器的情况。

模型保存格式及使用

         TensorFlow保存模型有2种方式,checkpoint和saved_model格式,其中checkpoint格式用户模型训练过程中的保存,saved_model用户模型线上部署,方便grpc的远程调用。 

        咱们使用saved_model格式,形式如下,serving自动取版本号最高的模型,以下是以saved_model格式00001版本的代码。

 model.save('saved_model/my_model/00001')

2.TensorflowJS

    介绍

     在web上 要用这个 TensorFlow.js 是 TensorFlow 的 JavaScript 版本,支持 GPU 硬件加速,可以运行在 Node.js 或浏览器环境中。

      它不但支持完全基于 JavaScript 从头开发、训练和部署模型,也可以用来运行已有的 Python 版 TensorFlow 模型,或者基于现有的模型进行继续训练。(flutter web 和flutter端侧用的依赖库不一样)。

官方示例    https://www.tensorflow.org/js/demos?hl=zh-cn

模型转换

        可以通过tfjs-converter进行模型转换模型转换  |  TensorFlow.js.

3.Tensorflow Lite

TensorFlow Lite 是一组工具,可帮助开发者在移动设备、嵌入式设备和 loT 设备上运行模型,以便实现设备端机器学习。

主要特性

  • 通过解决以下 5 项约束条件,针对设备端机器学习进行了优化:延时(数据无需往返服务器)、隐私(没有任何个人数据离开设备)、连接性(无需连接互联网)、大小(缩减了模型和二进制文件的大小)和功耗(高效推断,且无需网络连接)。
  • 支持多种平台,涵盖 Android 和 iOS 设备、嵌入式 Linux 和微控制器。
  • 支持多种语言,包括 Java、Swift、Objective-C、C++ 和 Python。
  • 高性能,支持硬件加速和模型优化。
  • 提供多种平台上的常见机器学习任务的端到端示例,例如图像分类、对象检测、姿势估计、问题回答、文本分类等。

能够在端侧做很多功能

姿态识别
更多demo

  模型转换

import tensorflow as tf

# Convert the model
converter = tf.lite.TFLiteConverter.from_saved_model('saved_model/my_model') # path to the SavedModel directory
tflite_model = converter.convert()

# Save the model.
with open('newAnalyzeDailyOrder.tflite', 'wb') as f:
  f.write(tflite_model)

对比

方式

应用场景

成本

隐私性

注意项

tensorflow lite

tensorflow js

识别车辆、人物美颜等图像处理等

用设备性能相对较低

较高

设备性能

tensorflow serving

个性化推荐、批量数据处理

计算成本、流量成本

较低

网络延迟、大流量等

        在具体的项目中、不一定是单独使用的。比如在58二手车估车价项目中,先进行汽车的识别、再去上传服务器。组合使用效果可能会更好。

结语

      我一开始学习机器学习 大家都是介绍其中的部分 比如就介绍了怎么建模,具体技术细节,没有说从前端、或是其他角度说介绍这件事。在我学习的前期有一种盲人摸象的感觉,只知道局部不知整体,希望我写的文章对你有帮助。 

参考文档

docker安装&tensorflow serving使用

tensorflow 官网 部署模型

平台和环境  |  TensorFlow.js

tensorflow.js有哪些局限?-CDA数据分析师官网

在浏览器中使用TensorFlow.js-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/310484.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s的存储卷之静态

存储卷----数据卷 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的,delete,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态 一旦回到初始状态,所有的后天编辑的文件都会消…

C++力扣题目110--平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:t…

大数据系列之:腾讯云服务器性能和价格比较

大数据系列之:腾讯云服务器性能和价格比较 一、磁盘性能和价格比较二、高性能云硬盘三、ssd云硬盘四、极速型ssd云硬盘五、增强型ssd云硬盘六、查看腾讯云服务器价格 一、磁盘性能和价格比较 磁盘名称高性能ssd云硬盘极速型ssd云硬盘增强型ssd云硬盘规格500g 5800 …

UM2003A 一款200 ~ 960MHz ASK/OOK +18dBm 发射功率的单发射芯片

UM2003A 是一款工作于 200 ~ 960MHz 频段的单片集成、高性能、可独立运行的 OOK 发射器。内部集成的 OTP 方便用户对各种射频参数以及特色功能进行编程。该芯片以其高集成度和低功耗的设计,特别适用于低成本,低功耗,电池驱动的无线发射应用。…

Unity URP下阴影锯齿

1.概述 在Unity开发的URP项目中出现阴影有明显锯齿。如下图所示: 并且在主光源的Shadow Type已经是Soft Shadows模式了。 2.URP Asset 阴影出现锯齿说明阴影质量不高,所以要先找到URP Asset文件进行阴影质量参数的设置。 1.打开PlayerSetting找到Graph…

切分大文件sql为小份

数据库太大了,整个备份导入出问题或者慢,需要将整个库按照表分割(一个表一个sql文件) 环境 win10 工具:python3.7pycharm 要分割的文件大小:6G,sql文件import redbname with open(best**.sql,…

C++标准学习--多线程

在以往多线程的实现的时候,都是自己去亲自创建线程,采用特殊flag 及锁控制线程的运转状态。这无可厚非,但又似乎有重复造轮子的嫌疑。最近发现了一个线程池的轮子,很不错,ZZ一下。 C多线程线程池(全详解&a…

理解Herbrand Equivalence

笔者最近在看GVN的一系列论文,总会看到一个概念叫Herbran Equivalence,依靠这种定义,能够判断一个GVN算法是否是complete的,也即检测一个算法是否是precise的,只有找到所有Herbrand Equivalence关系的算法才能称得上是…

Python基础知识:整理9 文件的相关操作

1 文件的打开 # open() 函数打开文件 # open(name, mode, encoding) """name: 文件名(可以包含文件所在的具体路径)mode: 文件打开模式encoding: 可选参数,表示读取文件的编码格式 """ 2 文件的读取 文…

18-链表-移除链表元素

这是链表的第18题,力扣链接。 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,…

杨中科 .NET项目结构及程序发布

一样的csproj,不一样的接口 1.文件包含于排除: 2. *.config 文件包含于排除 新建 .netcore 与 .netframework 项目 打开framework 项目文件位置 打开 frameworkConsoleApp1.csproj文件 查看 .netcore的CoreconsoleApp2.csproj文件 该文件十分简洁 改变版本…

springCould中的Bus-从小白开始【11】

目录 🧂1.Bus是什么❤️❤️❤️ 🌭2.什么是总线❤️❤️❤️ 🥓3.rabbitmq❤️❤️❤️ 🥞4.新建模块3366❤️❤️❤️ 🍳5.设计思想 ❤️❤️❤️ 🍿6.添加消息总线的支持❤️❤️❤️ &#x1f9…

java将word转换成pdf,并去除水印

注意我这里只是将word字节替换成pdf字节&#xff0c;如果是文件根据自己实际情况来做 1、所需jar包 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>15.8.0</version></dependency&g…

模拟超市商品结算系统

要求:全程一个角色(管理员即用户) (1)需要管理员注册与登录 (2)管理员登录之后&#xff0c;可以进行上架新的商品(商品名称和单价) (3)管理员登录之后&#xff0c;也可以下架商品 (4)在节假日有优惠活动,可以对其中的一些商品修改相应的单价(价格提高和价格降低都可以) (5)用户…

JavaScript中alter、confrim、prompt的区别及使用

文章目录 一、alter1.什么是alert&#xff1f;2.alter的使用 二、confrim1.什么是confrim&#xff1f;2.confrim的使用 三、prompt1.什么是prompt&#xff1f;2.prompt的使用 四、总结alter、confrim、prompt的区别 一、alter 1.什么是alert&#xff1f; 在JavaScript中&…

在线问卷调查的优势:提升数据收集与分析效率的关键要素

无论是在工作中还是学习中&#xff0c;我们经常会使用问卷调查法来解决一些问题。不过&#xff0c;问卷调查有两种形式——线上和线下&#xff0c;这两者之间有什么优势和不足呢&#xff1f; 纸质问卷&#xff1a; 1、优势&#xff1a; 我们在使用纸质问卷的时候&#xff0c;通…

如何在Win10电脑接收苹果手机日程提醒呢?

有很多小伙伴手机使用的是iPhone苹果手机&#xff0c;但办公电脑使用的win10系统的电脑&#xff0c;这时候如果想要在win10电脑上同步接收苹果手机上设置的日程提醒&#xff0c;该怎么操作呢&#xff1f;如何在win10电脑接收苹果手机日程提醒呢&#xff1f; 如果你设置的日程提…

大数据-hive函数与mysql函数的辨析及练习-将多行聚合成一行

目录 1. &#x1f959;collect_list: 聚合-不去重 2. &#x1f959;collect_set(col): 聚合-去重 3. &#x1f959;mysql的聚合函数-group_concat 4. leetcode练习题 1. &#x1f959;collect_list: 聚合-不去重 将组内的元素收集成数组 不会去重 2. &#x1f959;collec…

C++指针小练习

双色球统计1-33个数字出现的次数(很详细) 做这个题一定要注意审题:题目要求是统计1-33个数字出现的次数,而不是前六个数字出现的次数 算法设计: ①:用一个数组p1来保存每一行的数据,再用一个数组p2来遍历1-33个数字,因为是要统计这33个数字出现的次数所以将数组初始化为0, ②…

二、Java中SpringBoot组件集成接入【MySQL和MybatisPlus】

二、Java中SpringBoot组件集成接入【MySQL和MybatisPlus】 1.MySQL和MybatisPlus简介2.maven依赖3.配置1.在application.yaml配置中加入mysql配置2.新增Mybatis-Plus配置类 4.参考文章 1.MySQL和MybatisPlus简介 MySQL是一种开源的关系型数据库管理系统&#xff0c;被广泛应用…