余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

TensorFlow发布JavaScript开发者的机器学习框架TensorFlow.js

xiyangw 2022-11-26 17:01 16 浏览 0 评论

当时时间 3 月 30 日,谷歌 TenosrFlow 开发者峰会 2018 在美国加州石景山开幕,来自全球的机器学习用户围绕 TensorFlow 展开技术演讲与演示。去年的 TensorFlow 开发者大会上,该框架正式升级到了 1.0 版本,逐渐成为最流行的深度学习框架。今年,TensorFlow 发布了面向 JavaScript 开发者的全新机器学习框架 TensorFlow.js。

在大会上午的 Keynote 中,谷歌大脑负责人 Jeff Dean、TensorFlow 总监 Rajat Monga 等人围绕 TensorFlow 做了表现、流行度等方面的介绍。

据介绍,在过去的两年中,TensorFlow 不断更新,不断改善,逐渐成为社区内最为流行的深度学习框架。下图是从开源以来,TensorFlow 的重大更新,例如 TensorBoard、tfdata、tfkeras、Eager Execution 等。

而且据统计,两年内,TensorFlow 已经有一千一百万下载,超过三万的 commits,6900 以上的 pull requests,1400 多位 contributors。

今年,围绕 TensorFlow,谷歌同样做出了几项重大宣布:

1. 发布新的 TensorFlow 官方博客(http://blog.tensorflow.org/)与 TensorFlow YouTube 频道;

2. 面向 JavaScript 开发者的全新机器学习框架 TensorFlow.js;

3. 发布一系列新的库与工具:例如 TensorFlowHub、TensorFlow Probability API、Nucleus、DeepVariant 等。

在今天的几项重大宣布中,比较有趣的是面向 JavaScript 开发者的全新机器学习框架 TensorFlow.js。在下文中,机器之心对 TensorFlow.js 做了细致介绍:

在大会的 Keynote 中,TensorFlow 团队表示基于网页的 JavaScript 库 TensorFlow.js 现在已经能训练并部署机器学习模型。我们可以使用神经网络的层级 API 构建模型,并在浏览器中使用 WebGL 创建复杂的数据可视化应用。此外 Node.js 很快就会发布,它能为网站模型提供 GPU、TPU 等快速训练与推断的方法。

在 TensorFlow.js 中,我们可以使用最底层的 JavaScript 线性代数库或最高级的 API 在浏览器上开发模型,也能基于浏览器运行已训练的模型。因此,它可以充分利用浏览器和计算机的计算资源实现非常多机器学习应用。例如在网页端训练一个模型来识别图片或语音,训练一个模型以新颖的方式玩游戏或构建一个能创造钢琴音乐的神经网络等。这些新颖的模型作为案例在 TensorFlow.js 中都提供了实现代码,读者也可以跟随教程实现基于浏览器的模型。

TensorFlow.js 项目主页:https://js.tensorflow.org/

TensorFlow.js 的核心概念

TensorFlow.js 是一个开源的用于开发机器学习项目的 WebGL-accelerated JavaScript 库。TensorFlow.js 可以为你提供高性能的、易于使用的机器学习构建模块,允许你在浏览器上训练模型,或以推断模式运行预训练的模型。TensorFlow.js 不仅可以提供低级的机器学习构建模块,还可以提供高级的类似 Keras 的 API 来构建神经网络。

TensorFlow.js 的安装非常简单,我们可以直接使用 NMP 或脚本完成构建。它的使用也有非常多的文档与教程,我们只需要掌握一些基本的核心概念就能快速入手这一 JS 库。接下来,我们介绍这个库的一些核心概念。

Tensor

TensorFlow.js 中的中心数据单元是张量(tensor):一维或多维数组。一个 Tensor 实例的 shape 属性定义了其数组形状(即,数组的每个维度上有多少个值)。

Tensor 主要构造函数是 tf.tensor 函数:

// 2x3 Tensor
const shape = [2, 3]; // 2 rows, 3 columns
const a = tf.tensor([1.0, 2.0, 3.0, 10.0, 20.0, 30.0], shape);
a.print(); // print Tensor values
// Output: [[1 , 2 , 3 ],
// [10, 20, 30]]

// The shape can also be inferred:
const b = tf.tensor([[1.0, 2.0, 3.0], [10.0, 20.0, 30.0]]);
b.print();
// Output: [[1 , 2 , 3 ],
// [10, 20, 30]]

Variable

Variable 使用一个张量值来初始化。然而,和 Tensor 不一样,它们的值是可变的。你可以用 assign 方法分配一个新的张量到一个已有的变量(variable):

const initialValues = tf.zeros([5]);
const biases = tf.variable(initialValues); // initialize biases
biases.print(); // output: [0, 0, 0, 0, 0]

const updatedValues = tf.tensor1d([0, 1, 0, 1, 0]);
biases.assign(updatedValues); // update values of biases
biases.print(); // output: [0, 1, 0, 1, 0]

Variable 主要用于在模型训练过程中保存和更新值。

Operations (Ops)

Tensor 可以用于保存数据,而 Operation(Op)则可用于操作数据。TensorFlow.js 提供了多种适用于张量的线性代数和机器学习运算的 Op。由于 Tensor 是不可改变的,这些 Op 不会改变它们的值,而会返回新的 Tensor。这些运算不仅包含 add、sub 和 mul 等二元运算,同时还包括 square 等一元运算:

const e = tf.tensor2d([[1.0, 2.0], [3.0, 4.0]]);
const f = tf.tensor2d([[5.0, 6.0], [7.0, 8.0]]);

const e_plus_f = e.add(f);
e_plus_f.print();
// Output: [[6 , 8 ],
// [10, 12]]

const d = tf.tensor2d([[1.0, 2.0], [3.0, 4.0]]);
const d_squared = d.square();
d_squared.print();
// Output: [[1, 4 ],
// [9, 16]]

模型和层

从概念上说,一个模型就是一个函数,给定输入之后生成所需要的输出。

在 Tensorflow.js 有两种创建模型的方式:直接使用 Op 表示模型的运算。或者使用高级 API tf.model 来构建以层定义的模型,这在深度学习中是很常用的抽象形式。其实除了以上的特征,Tensorflow.js 还有一些很重要的核心概念,例如内存管理、神经网络基本运算和训练过程等。但我们了解以上概念就能轻松在浏览器中构建出简单的机器学习模型,如下展示了简单线性回归的定义方法:

import * as tf from '@tensorflow/tfjs';
 // Define a model for linear regression.
 const model = tf.sequential();
 model.add(tf.layers.dense({units: 1, inputShape: [1]}));
 // Prepare the model for training: Specify the loss and the optimizer.
 model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});
 // Generate some synthetic data for training.
 const xs = tf.tensor2d([1, 2, 3, 4], [4, 1]);
 const ys = tf.tensor2d([1, 3, 5, 7], [4, 1]);
 // Train the model using the data.
 model.fit(xs, ys).then(() => {
 // Use the model to do inference on a data point the model hasn't seen before:
 model.predict(tf.tensor2d([5], [1, 1])).print();
 });

目前该项目还是非常新颖的应用,我们非常容易将机器学习模型部署在网页端并在用户的浏览器与硬件实现简单的推断。虽然我们还不清楚实现的效果,但这个 JS 库真正能训练并部署机器学习模型,因此机器之心也将持续关注并尝试构建有意思的应用。

相关推荐

「好课堂在线」用python和pygame游戏编程入门-控制角色移动

在上一节中我们知道了事件,以及如何捕捉键盘事件进行响应,本届我们结合第一节和上一节的内容,做一个用键盘控制角色移动的功能,代码如下:#用python和pygame游戏编程入门-控制角色移动##...

自学编程怎么入门?很多新人的做法都错了(自学编程怎样入门)
自学编程怎么入门?很多新人的做法都错了(自学编程怎样入门)

自从在网上和大家常常聊聊关于自学编程的话题后遇到很多0基础或者初学编程的朋友,大家给我的感觉是摸不着头脑,很多很简单的问题会走弯路,弄不明白。总结一下,主要以下...

2023-03-21 18:11 xiyangw

单片机入门-Proteus绘制电路和Keil写代码视频教学

视频教程如下:视频加载中...1打开ISIS,点击P2输入AT89C51,选取放入电路图3再点击P,输入led-yellow,res,分别添加LED和电阻,电阻阻值设为100欧,放在电路图,并连线,...

一张图学会编写我的第一行Java代码(如何编写第一个java程序)
一张图学会编写我的第一行Java代码(如何编写第一个java程序)

我的第一行Java代码Eclipse下编写编写我的第一行Java代码你也可以[笑]...

2023-03-21 18:09 xiyangw

入门写程序代码,达到月薪过万,那也是需要时间来开悟

高考结束,每个人都会纠结志愿的填报。本来想填报医学院的志愿,可一考虑到当医生经常会遇到一些血腥的场面,索性还是放弃了。同时也放弃了与那些白衣天使美女们相遇的机会,内心虽有一万个不舍,但也是迫不得已。最...

JAVA小白必学的代码编程技巧(java代码编写教程)

什么是SpringBootJava(面向对象编程语言)经过30多年的发展,产生了非常多的优秀框架。Spring(为解决企业应用程序开发的复杂性而创建的框架)曾是最受欢迎的Java框架之一,但...

没有一行代码的编程入门(一行代码5个bug)
没有一行代码的编程入门(一行代码5个bug)

来看一句话:‘’美丽的穿红衣服的姑娘笑着,和英俊的帅哥一起跳舞‘’美丽,穿红衣服的,英俊的—形容词姑娘帅哥—名词跳舞,笑着—动词写作的时候是一起描述的但是编程...

2023-03-21 18:08 xiyangw

尚学堂分享:编程初学者如何学写代码(编程代码 初学者)
尚学堂分享:编程初学者如何学写代码(编程代码 初学者)

作为编程初学者如何学写代码?这是一个不可回避的话题。相信很多人都一样,那就是先阅读别人写的代码,然后就是读那些你常用的库、编程框架的源代码,读大牛级别的源代码,...

2023-03-21 18:08 xiyangw

STM32编程怎么入门,聊聊我的入门经历(stm32 编程)
STM32编程怎么入门,聊聊我的入门经历(stm32 编程)

我第一次接触STM32大概是在8,9年前。当时刚出来工作不久,在此之前主要用stc和nxp的单片机比较多。那个时候还没有固件库开发的概念,基本都是配置寄存器去使...

2023-03-21 18:08 xiyangw

新手入门小程序尝试写代码?这里有(编程小程序代码)

新手学编程学的没有信心?来这里调节一下重获自信!以下例子都很简单实用,非常适合初学者用来练习。大家也可尝试根据项目的目的及提示,自己构建解决方法,提高编程水平。除此之外,小编还整理了更多适合小白的...

初学者怎样看懂代码?零基础学编程教你快速理解代码
初学者怎样看懂代码?零基础学编程教你快速理解代码

在学习编程的初期,看不懂代码是非常正常的现象,因为程序代码的背后涉及到编程语法、资源整合、算法设计、数据结构等一系列内容,要想搞清楚这些代码的含义,必须为自己制...

2023-03-21 18:07 xiyangw

安卓APP开发 | 简单学Java从编程入门开始-代码中的关键字
安卓APP开发 | 简单学Java从编程入门开始-代码中的关键字

安卓开发需要有语言编程基础,新手开始学习编程的时候一般是从程序语言的最基础内容开始。我现在就以自己熟悉的Java编程语言来讲,一般新手刚入门要首先认识代码中的关...

2023-03-21 18:07 xiyangw

程序员入门篇(程序员入门应该从哪里开始)

入门推荐语言:Python、JavaScript。推荐理由:语法简单,有大量已经成熟的库。运行既有结果,特别是JavaScript,作为前端语言,还有页面效果。这种即时反馈更有动力让新人坚持学习。入门...

「入门编程小实例」Edge浏览器网页小程序代码:电子音乐画布

可以直接复制到txt文件中,然后将后缀名改成html,拖到Edge浏览器或别的标准浏览器中运行。<!DOCTYPEhtml><html><head><m...

怎样更快速地学会编程(如何快速掌握编程)
怎样更快速地学会编程(如何快速掌握编程)

首先,很多同学都问过我如何快速学会编程,编程有没有捷径,以及初学者学习哪门编程语言更容易等问题,这些问题对于不同人的答案是不一样的,所以要结合不同人的知识基础、...

2023-03-21 18:05 xiyangw

取消回复欢迎 发表评论: