在上一篇文章《浏览器中的手写数字识别》中,讲到在浏览器中训练出一个卷积神经网络模型,用来识别手写数字。值得注意的是,这个训练过程是在浏览器中完成的,使用的是客户端的资源。

虽然TensorFlow.js的愿景是机器学习无处不在,即使是在手机、嵌入式设备上,只要运行有浏览器,都可以训练人工智能模型,但是考虑到手机、嵌入式设备有限的计算能力(虽然手机性能不断飞跃),复杂的人工智能模型还是交给更为强大的服务器来训练比较合适。况且目前主流的机器学习采用的是python语言,要让广大机器学习工程师从python转向js,估计大家也不会答应。

如果是这样的话,那TensorFlow.js推出还有何意义呢?

这个问题其实和TensorFlow Lite类似,我们可以在服务器端训练,在手机上使用训练出的模型进行推导,通常推导并不需要那么强大的计算能力。

在本文,我们将探索如何在TensorFlow.js中加载预训练的机器学习模型,完成图片分类任务。

在TensorFlow官网,访问 www.tensorflow.org/js/models/ 这个网址,可以看到里面有实时姿态预测模型、目标检测模型、语音识别模型、分类模型等等:

这里我们选择MobileNets模型。MobileNets是一种小型、低延迟、低耗能模型,满足各种资源受限的使用场景,可用于分类、检测、嵌入和分割,功能上类似于其他流行的大型模型(如Inception)。 MobileNets在延迟、大小和准确性之间取得了平衡。

有两种使用MobileNets模型的方案:

  1. 直接调用MobileNets模型的JS封装库
  2. 自己编写代码加载json格式的MobileNets模型

直接调用MobileNets模型的JS封装库

JS封装库直接将MobileNets模型封装为JS对象,我们就像调用普通的JS对象那样,调用对象方法,完成模型加载、推断。

比如访问 github.com/tensorflow/… ,我们可以看到该mobilenet对象提供两个主要的API:

mobilenet.load(version?: 1,alpha?: 0.25 | .50 | .75 | 1.0
)
复制代码

参数:

  • 版本:MobileNet版本号。1表示MobileNet V1,2表示使用MobileNet V2。默认值为1。
  • alpha:较小的alpha会降低精度,但会提高性能。默认值为1.0。
model.classify(img: tf.Tensor3D | ImageData | HTMLImageElement |HTMLCanvasElement | HTMLVideoElement,topk?: number
)
复制代码

参数:

  • img:进行分类的Tensor或image元素。
  • topk:要返回多少个Top概率。默认值为3。

借助于封装的JS库,在浏览器中使用MobileNets就相当简单了:

<html><head><script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.1"> </script><script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet@1.0.0"> </script></head><body><img id="img" src="cat.jpg"></img><script>const img = document.getElementById('img');// Load the model.mobilenet.load().then(model => {// Classify the image.model.classify(img).then(predictions => {console.log('Predictions: ');console.log(predictions);});});</script></body>
</html>
复制代码

注意: 这里的js代码会去google storage 加载MobileNets的JSON格式模型,而由于一些不能说的原因,国内无法访问到,请自行翻墙。

这个示例写的比较简单,从浏览器控制台输出log,显示结果,在chrome浏览器中可以打开开发者工具查看:

加载json格式的MobileNets模型

使用封装好的JS对象确实方便,但使用自己训练的模型时,并没有人为我们提供封装对象。这个时候我们就要考虑自行加载模型,并进行推断。在JS世界,JSON是使用得非常普遍的数据交换格式。TensorFlow.js也采用JSON作为模型格式,也提供了工具进行转换。

本来这里想详细写一下如何加载json格式的MobileNets模型,但由于MobileNets的JS模型托管在Google服务器上,国内无法访问,所以这里先跳过这一步。在下一篇文章中我将说明如何从现有的TensorFlow模型转换为TensorFlow.js模型,并加载之,敬请关注!

以上示例有完整的代码,点击阅读原文,跳转到我在github上建的示例代码。 另外,你也可以在浏览器中直接访问:ilego.club/ai/index.ht… ,直接体验浏览器中的机器学习。

参考文献:

  1. tensorflow官网

你还可以读

  1. 一步步提高手写数字的识别率(1)(2)(3)
  2. TensorFlow.js简介
  3. 浏览器中的手写数字识别

转载于:https://juejin.im/post/5cc19cace51d456e8833398b

浏览器中的机器学习:使用预训练模型相关推荐

  1. 在你的网站、浏览器中集成3D模型预览功能,使用开源项目Online3DViewer

    开源项目Online3DViewer # 通过url参数形式预览模型 https://3dviewer.net/#[3D模型URL] Online3DViewer 是一个免费.开源的web解决方案,可 ...

  2. 【机器学习】Tensorflow.js:在浏览器中使用机器学习实现图像分类

    ⭐️ 本文首发自 前端修罗场(点击加入),是一个由资深开发者独立运行的专业技术社区,我专注 Web 技术.答疑解惑.面试辅导以及职业发展.现在加入,私聊我即可获取一次免费的模拟面试机会,帮你评估知识点 ...

  3. python 加载动图_在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)...

    大数据文摘授权转载自数据派THU 作者:MOHD SANAD ZAKI RIZVI 本文主要介绍了: TensorFlow.js (deeplearn.js)使我们能够在浏览器中构建机器学习和深度学习 ...

  4. 独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)

    作者:MOHD SANAD ZAKI RIZVI 翻译:吴金笛 校对:丁楠雅 本文约5500字,建议阅读15分钟. 本文首先介绍了TensorFlow.js的重要性及其组件,并介绍使用其在浏览器中构建 ...

  5. linux tensorflow demo_独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)...

    作者:MOHD SANAD ZAKI RIZVI 翻译:吴金笛 校对:丁楠雅 本文约5500字,建议阅读15分钟. 本文首先介绍了TensorFlow.js的重要性及其组件,并介绍使用其在浏览器中构建 ...

  6. EMNLP 2021中预训练模型最新研究进展

    © 作者|周昆 机构|中国人民大学信息学院 研究方向|序列表示学习与应用 导读 EMNLP 2021是人工智能领域自然语言处理( Natural Language Processing,NLP)三大顶 ...

  7. Pytorch:NLP 迁移学习、NLP中的标准数据集、NLP中的常用预训练模型、加载和使用预训练模型、huggingface的transfomers微调脚本文件

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) run_glue.py微调脚本代码 python命令执行run ...

  8. ICML 2019:序列到序列自然语言生成任务超越BERT、GPT!微软提出通用预训练模型MASS | 技术头条...

    来源 | 微软研究院AI头条(id:MSRAsia) 责编 | Jane 编者按:从2018年开始,预训练(pre-train) 毫无疑问成为NLP领域最热的研究方向.借助于BERT和GPT等预训练模 ...

  9. 华为云苏嘉:如何整合预训练模型和知识图谱做医疗推理?

    本文约4100字,建议阅读8分钟 本文将讨论如何为AI+医疗提供一种行之有效的解决方案. [ 导读 ] 随着人工智能技术特别是深度学习的普及,医疗行业也迎来一波革命的热潮,本文将讨论如何利用AI技术将 ...

最新文章

  1. 几何空间中坐标系转换
  2. pandas mysql主键_使用Autoincrement将Pandas Dataframe插入MySQL表自动生成主键
  3. 创建第二个 local network - 每天5分钟玩转 OpenStack(84)
  4. Keil左侧显示行数
  5. ubuntu 编译caffe makefile.config
  6. 现代密码学3.7--CCA安全
  7. 5道python基础中while循环练习题
  8. Method Tracking
  9. 下载Bootstrap3源码版本
  10. xml获取配置DataTable
  11. 华为系统p40pro计算机,华为P40 Pro:我来了!
  12. Andorid提高--数据持久化
  13. js layui跳转页面_js中实现页面跳转
  14. 小猪短租住房信息爬取
  15. BZOJ2109: [Noi2010]Plane 航空管制 解题报告
  16. numpy_10 思维导图
  17. 项目整合微信扫码登录功能
  18. 大话深度信念网络(DBN)
  19. ctf-攻防世界-crypto:幂数加密
  20. Word论文写作如何实现公式居中、自动编号右对齐

热门文章

  1. 3分钟练成SVN命令高手:SVN常用命令
  2. 初探ES6中的Map和WeakMap
  3. re库、正则表达式基本使用
  4. 免费当天澳洲运营商全天下载量达1841TB
  5. ViewPagerIndicator+viewpager的简单使用,不需要导入Library包
  6. 【python】openstack管理小工具(增删查改,批量ping)
  7. 13/100. Best Time to Buy and Sell Stock
  8. C#发现之旅第二讲 C#-XSLT开发
  9. 字符串转Unicode码
  10. Android Studio下jni应用