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

当时时间 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。bash

今年,围绕 TensorFlow,谷歌一样作出了几项重大宣布:网络

1. 发布新的 TensorFlow 官方博客(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 项目主页: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 库真正能训练并部署机器学习模型,所以机器之心也将持续关注并尝试构建有意思的应用。

相关文章
相关标签/搜索