原标题:如何在浏览器中使用TensorFlow?

虽然您可以借助TensorFlow用数量较少的训练数据来训练简单的神经网络,但对于拥有庞大训练数据集的深度神经网络而言,确实需要使用具有CUDA功能的英伟达GPU、谷歌TPU或FPGA进行加速。就在不久前,替代方法一直是在CPU集群上训练数周。

TensorFlow 2.0引入的创新之一是JavaScript实现:TensorFlow.js。我没料到这会加快训练或推理速度,但确实如此,它通过WebGL API支持所有的GPU(不仅仅支持具有CUDA功能的GPU)。

TensorFlow.js简介

TensorFlow.js是一个库,用于使用JavaScript开发和训练机器学习模型,并将其部署在浏览器中或Node.js上。您可以使用现有模型、转换Python TensorFlow模型、使用迁移学习用您自己的数据重新训练现有模型以及从头开始开发模型。

TensorFlow.js后端

TensorFlow.js支持多个后端来执行,不过每次只有一个后端处于活跃状态。TensorFlow.js Node.js环境支持使用Python/C TensorFlow的安装版本作为后端,TensorFlow反过来可能使用机器可用的硬件加速技术,比如CUDA。还有面向Node.js的基于JavaScript的后端,但功能有限。

在浏览器中,TensorFlow.js有几个特点不一的后端。WebGL后端使用面向存储的WebGL纹理和面向执行的WebGL着色器提供GPU支持,速度比普通CPU后端最多快100倍。 WebGL不需要CUDA,因此它可以充分利用现有的任何GPU。

浏览器版的WebAssembly(WASM)TensorFlow.js后端使用XNNPACK库来优化神经网络operator的CPU实现。WASM后端通常比JavaScript CPU后端快得多(快10倍至30倍),但除了超小模型外,通常比WebGL后端要慢。您的实际情况可能有所不同,因此请在您自己的硬件上针对自己的模型测试WASM后端和WebGL后端。

TensorFlow.js模型和层

TensorFlow.js支持用于构建神经网络模型的两个API。一个是Layers API,与TensorFlow 2中的Keras API实际上一样。另一个是Core API,它实际上直接操纵张量(tensor)。

与Keras一样,TensorFlow.js Layers API有两种创建模型的方法:顺序型和功能型。顺序型API是层的线性堆栈,通过层列表(如下所示)或model.add()方法来实现:

const model = tf.sequential({

layers: [

tf.layers.dense({inputShape: [784], units: 32, activation: 'relu'}),

tf.layers.dense({units: 10, activation: 'softmax'}),

]

});

功能型API使用tf.model() API,可创建任意的有向无环图(DAG)网络:

// Create an arbitrary graph of layers, by connecting them

// via the apply() method.

const input = tf.input({shape: [784]});

const dense1 = tf.layers.dense({units: 32, activation: 'relu'}).apply(input);

const dense2 = tf.layers.dense({units: 10, activation: 'softmax'}).apply(dense1);

const model = tf.model({inputs: input, outputs: dense2});

Core API可使用不同的代码实现同样的目的,但与层之间没有简单直观的联系。以下的模型貌似基本的张量操作,但它创建与前两个公式一样的网络。注意下面model()函数中使用的relu()和softmax(),这两个都是神经网络操作。

// The weights and biases for the two dense layers.

const w1 = tf.variable(tf.randomNormal([784, 32]));

const b1 = tf.variable(tf.randomNormal([32]));

const w2 = tf.variable(tf.randomNormal([32, 10]));

const b2 = tf.variable(tf.randomNormal([10]));

function model(x) {

return x.matMul(w1).add(b1).relu().matMul(w2).add(b2).softmax();

}

预构建的TensorFlow.js模型

存储库中记载了十多个预构建的TensorFlow.js模型,它们托管在NPM(用于Node.js中)和unpkg(用于浏览器中)上。您可以使用所提供的这些模型或用于迁移学习。稍花点精力,您还可以将它们用作构建其他模型的模块。

其中一些模型实时使用设备的摄像头,比如手姿势:

图1. 手姿势可以检测手掌,并跟踪手骨骼手指。

以下列表介绍了大多数预包装的TensorFlow.js模型,便于索引。

图像分类

对象检测

身体分割

姿势估计

文本毒性检测

通用句子编码器

语音命令识别

KNN分类器

简单人脸检测

语义分割

人脸标志检测

手姿势检测

自然语言问答

ml5.js简介

ml5.js是主要在纽约大学开发的一种对用户友好的开源高级TensorFlow.js接口。ml5.js可在浏览器中立即访问预训练的模型,以检测人体姿势、生成文本、用另一种样式设置图像、创作音乐、音高检测和常用英语单词关系等。TensorFlow.js主要针对数据科学家和开发人员,ml5.js则旨在支持公众更广泛地了解机器学习。

ml5.js中的大多数示例依赖TensorFlow.js模型。它们已包装成网页,您可以按原样运行或编辑它们,比如使用不同的图像。

图2. PoseNet可以在浏览器中根据图像或视频源执行实时姿势估计。

将Python TensorFlow模型转换成JavaScript

TensorFlow.js存储库的一部分含有用于所保存的TensorFlow和Keras模型的转换器。它支持三种格式:SavedModel(TensorFlow的默认格式)、HDF5(Keras的默认格式)和TensorFlow Hub。您可以将该转换器用于标准存储库中的保存模型、自己训练的模型以及在别处找到的模型。

转换实际上有两个步骤。第一步是将现有模型转换成model.json和二进制权重文件。第二步是使用API将模型加载到TensorFlow.js中:使用面向转换后的TensorFlow和TensorFlow Hub模型的tf.loadGraphModel,或者使用面向转换后的Keras模型的tf.loadLayersModel。

使用迁移学习

TensorFlow.js支持迁移学习,支持方式实际上与TensorFlow一样。说明文档给出了几个示例,用于为您自己的图像定制MobileNet,以及为您自己的声音类定制语音命令识别模型。实际上,您在这每一个代码实验室中所做的就是在训练后的模型上添加一个小小的自定义分类器,并对其进行训练。

总体而言,TensorFlow能做的,TensorFlow.js基本上都能做。然而,鉴于TensorFlow.js的目标环境(面向游戏的普通GPU)通常比常常用于TensorFlow深度学习训练的庞大英伟达服务器GPU拥有较少的GPU内存,您可能不得不缩减模型的大小,以便在浏览器中运行。转换实用程序可以为您完成这部分工作,但是您要手动取出层,并缩减训练的批处理大小。

python tensorflow web_如何在浏览器中使用TensorFlow?相关推荐

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

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

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

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

  3. 在浏览器中使用tensorflow.js进行人脸识别的JavaScript API

    作者 | Vincent Mühle 编译 | 姗姗 出品 | 人工智能头条(公众号ID:AI_Thinker) [导读]随着深度学习方法的应用,浏览器调用人脸识别技术已经得到了更广泛的应用与提升.在 ...

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

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

  5. 使用Python+OpenCV+Flask来处理浏览器中的视频

    现在我们常常在家里.办公室或其它地方安装网络摄像头或监控摄像头来进行视频监控. 大多数人使用IP摄像机(互联网协议摄像机)而不是闭路电视(闭路电视),这是因为它们具有更高的分辨率和更低的布线成本.你可 ...

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

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

  7. 用 TensorFlow.js 在浏览器中训练一个计算机视觉模型(手写数字分类器)

    文章目录 Building a CNN in JavaScript Using Callbacks for Visualization Training with the MNIST Dataset ...

  8. 浏览器中实现深度学习?有人分析了7个基于JS语言的DL框架

    作者:仵冀颖 编辑:H4O 本文中,作者基于WWW'19 论文提供的线索,详细解读了在浏览器中实现深度学习的可能性.可行性和性能现状.具体而言,作者重点分析了 7 个最近出现的基于JavaScript ...

  9. 学习笔记(二):使用 TensorFlow 的起始步骤(First Steps with TensorFlow)

    目录 1.工具包 TensorFlow 张量 (Tensor) 图 (graph) TensorBoard 2.tf.estimator API Estimator 预创建的 Estimator (p ...

最新文章

  1. android loadlibrary 更改libPath 路径,指定路径加载.so
  2. lib(静态库)和dll(动态库)的生成和使用详细说明以及注意事项
  3. Bitlocker企业安全加密管理系列-2
  4. 查看ubuntu磁盘空间占用及占用空间大的文件
  5. 基于requests模块的cookie,session和线程池爬取
  6. angular7.2构建包如何兼容ie_Python 小技巧:如何实现操作系统兼容性打包?
  7. xml字符串转xml对象,xml对象转json对象
  8. YOS里面推入AD的命令行生成代码
  9. java的四种取整方法
  10. Linux编译工具:gcc入门
  11. 安卓APK反编译详解(多图)
  12. 【计算机组成原理】1.计算机系统概述
  13. 区块链+游戏:未来真的有未来吗?
  14. Edge AI边缘智能:Communication-Efficient Edge AI: Algorithms and Systems(未完待续)
  15. Redis-NoSql结构化数据库
  16. 机器学习进阶-阈值与平滑-图像阈值 1. cv2.threshold(进行阈值计算) 2. 参数type cv2.THRESH_BINARY(表示进行二值化阈值计算)...
  17. 如何判断一个文件的编码格式是gb2312还是gbk等
  18. Docker查看正在运行的容器创建时的命令
  19. HTML基础选择器之属性选择器的基本介绍
  20. htmla标签下划线去除_html超链接去掉下划线 html去除取消超链接下划线

热门文章

  1. 理论:第七章:用生活的案例解释23种设计模式
  2. python请求飞书API操作
  3. Go语言格式化金额为3个一组隔开
  4. word中mathtype公式上浮
  5. 重载输入输出小于号大于号加号运算符
  6. vc6.0 点击鼠标获取mysql数据库所在行_VC6.0中对MySQL数据库的操作
  7. 我用Python爬取了《安家》所有数据,分析后发现它背后的一些秘密
  8. KON BOOT跳过密码直接进入系统
  9. three.js镜头追踪的移动效果
  10. 手机5g什么时候普及_要到2021年5G手机才会普及?你认可这个说法么? - 区块网...