TensorFlow.js 入门
2018 年 6 月 7 日
作者:Laurence Moroney
TensorFlow.js banner
使用 TensorFlow.js,您不仅可以在浏览器中运行机器学习模型进行推理,还可以训练它们。在本超简单的教程中,我将向您展示一个基本的“Hello World”示例,它将教您入门所需的脚手架。

让我们从最简单的网页开始
<html>
<head></head>
<body></body>
</html>
有了这个,您需要做的第一件事是添加对 TensorFlow.js 的引用,以便您可以使用 TensorFlow API。为了方便起见,JS 文件可在 CDN 上获得
<html>
<head>
 <!-- Load TensorFlow.js -->
 <!-- Get latest version at https://github.com/tensorflow/tfjs -->
 <script src="https://cdn.jsdelivr.net.cn/npm/@tensorflow/[email protected]"> </script>
现在我使用的是 0.11.2 版本,但请务必查看 GitHub 以获取最新版本。

现在 TensorFlow.js 已加载,让我们用它做一些有趣的事情。

考虑一个具有公式 Y=2X-1 的直线。这将为您提供一组点,例如 (-1, -3)、(0, -1)、(1, 1)、(2, 3)、(3, 5) 和 (4, 7)。虽然我们知道该公式为给定的 X 提供了 Y 值,但对于没有用此公式显式编程的计算机,训练一个模型来查看它是否可以在用此数据训练时推断给定 X 值的 Y 值是一个很好的练习。

那么这将如何运作呢?

首先,我们可以创建一个超简单的神经网络来进行推理。由于只有一个输入值和一个输出值,它可以是一个单独的节点。在 JavaScript 中,我可以创建一个 tf.sequential,并将我的层定义添加到其中。它不可能比这更基本了
const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));
要完成模型的定义,我将其编译,指定我的损失类型和优化器。我将选择最基本的损失类型 - meanSquaredError,我的优化器将是标准随机梯度下降(又称“sgd”)
model.compile({
   loss: 'meanSquaredError',
   optimizer: 'sgd'
  });
训练模型,我需要一个包含我的输入(即“X”)值的张量,以及另一个包含我的输出(即“Y”)值的张量。使用 TensorFlow,我还需要定义给定张量的形状
const xs = tf.tensor2d([-1, 0, 1, 2, 3, 4], [6, 1]);
const ys = tf.tensor2d([-3, -1, 1, 3, 5, 7], [6, 1]);
因此,我的 Xs 是值 -1、0、1、2、3 和 4,定义为 6x1 张量。我的 Ys 是 -3、-1、1、3、5、7,形状相同。请注意,当我们说 Y=2X-1 时,第 n 个 Y 条目是第 n 个 X 条目的值。

要训练模型,我们使用fit方法。为此,我们传递 X 和 Y 值集,以及我们将训练它的时期(遍历数据的循环)数量。请注意,这是异步的,因此在继续之前我们应该await返回值,因此所有这些代码都需要在async函数中(稍后将详细介绍)
await model.fit(xs, ys, {epochs: 500});
完成后,模型将得到训练,因此我们可以预测新 X 的值。例如,如果我们要找出 X=10 的 Y 并将其写入页面中的<div>,则代码如下所示
document.getElementById('output_field').innerText =
   model.predict(tf.tensor2d([10], [1, 1]));
请注意,输入是一个张量,其中我们指定它是一个包含值 10 的 1x1 张量。

结果在页面上的 div 中写入,应该类似于以下内容
等等,你可能会问 - 为什么它不是 19?它很接近,但它不是 19!这是因为算法从未被给出公式 - 它只是根据给定的数据学习。对于更多相关的数据,任何机器学习模型都将提供更高的准确性,但考虑到它只有 6 个数据片段可供学习,这个模型还不错!

为了方便起见,这里提供了页面的完整代码,包括将所有这些代码声明为名为“learnLinear”的异步函数
<html>
 <head>
 <!-- Load TensorFlow.js -->
 <!-- Get latest version at https://github.com/tensorflow/tfjs -->
 <script src="https://cdn.jsdelivr.net.cn/npm/@tensorflow/[email protected]">   
 </script>
 </head>
 <body>
   <div id="output_field"></div>
 </body>
 <script>
 async function learnLinear(){
  const model = tf.sequential();
  model.add(tf.layers.dense({units: 1, inputShape: [1]}));
  model.compile({
   loss: 'meanSquaredError',
   optimizer: 'sgd'
  });
  
  const xs = tf.tensor2d([-1, 0, 1, 2, 3, 4], [6, 1]);
  const ys = tf.tensor2d([-3, -1, 1, 3, 5, 7], [6, 1]);
  
  await model.fit(xs, ys, {epochs: 500});
  
  document.getElementById('output_field').innerText =
   model.predict(tf.tensor2d([10], [1, 1]));
 }
 learnLinear();
 </script>
<html>
这就是在您的浏览器中创建非常简单的机器学习模型,并使用 TensorFlow.js 执行所需的所有操作。有了这个基础,您可以继续学习更高级的概念。

玩得开心!
下一篇文章
Getting Started with TensorFlow.js

- 作者:Laurence Moroney

使用 TensorFlow.js,您不仅可以在浏览器中运行机器学习模型进行推理,还可以训练它们。在本超简单的教程中,我将向您展示一个基本的“Hello World”示例,它将教您入门所需的脚手架。

让我们从最简单的网页开始:
<html> <head></head> <body></bo…