文 / Zaid Alyafeai
这创造了一个标量张量。我们还可以将数组转换为张量。
Tensorflow.js 是一个基于 deeplearn.js 构建的库,可直接在浏览器环境中创建深度学习模型。使用它可以在浏览器上创建 CNNs,RNNs 等,并使用客户端的 GPU 处理能力训练这些模型。因此,训练 NN 并不一定需要服务器级别的 GPU。本教程首先解释 TensorFlow.js 的基本构建块及其操作。然后,我们描述了如何创建一些复杂的模型。
我在 Observable 上创建了一个交互式编码会话,可用于代码演示。此外,我创建了许多迷你项目,包括简单分类,样式转换,姿势评估和 pix2pix 翻译。
入门
由于 TensorFlow.js 在浏览器上运行,您只需将以下脚本包含在 html 文件的 header 中即可:
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest"> </script>
以上会自动加载最新版本的 TensorFlow.js。
张量(Tensor)
如果您熟悉 TensorFlow 等深度学习平台,您应该能够认识到张量是 Operators 使用的 n 维数组。因此,它们代表了任何深度学习应用程序的构建块。让我们创建一个张量:
1 const tensor = tf.scalar(2);
以上创建了一个张量。我们还可以将数组转换为张量:
1 const input = tf.tensor([2,2]);
这会创建一个恒定的数组张量 [2,2]。换句话说,我们通过应用张量函数将一维数组转换为张量。我们可以使用 input.shape 获取张量大小。
1 const tensor_s = tf.tensor([2,2]).shape;
我们还可以创建具有特定大小的张量:
1 const input = tf.zeros([2,2]);
操作(Operators)
为了使用张量,我们需要创建操作。如下所示,可以获取到张量的平方:
1 const a = tf.tensor([1,2,3]);
2 a.square().print();
TensorFlow.js 还允许链接操作。例如,要评估我们使用的张量的二次幂:
1 const x = tf.tensor([1,2,3]);
2 const x2 = x.square().square();
Tensor Disposal
通常我们会生成大量的中间张量。例如,在前面的例子中,我们不需要生成 const x。为了做到这一点,我们可以调用 dispose():
1 const x = tf.tensor([1,2,3]);
2 x.dispose();
请注意,我们在以后的操作中不再使用张量 x。现在,对于每个张量来说,这可能有点不方便。
TensorFlow.js 提供了一个特殊的操作 tidy() 来自动处理中间张量:
1 function f(x)
2 {
3 return tf.tidy(()=>{
4 const y = x.square();
5 const z = x.mul(y);
6 return z
7 });
8 }
请注意,张量 y 的值将被处理,因为我们在评估 z 的值之后不再需要它。
优化问题
在这里,我们将学习如何解决优化问题。给定函数 f(x),基于 x = a 评估最小化 f(x)。为此,我们需要一个优化器。优化器是一种通过渐变来最小化函数的算法。文献中有许多优化器,如 SGD,Adam 等……这些优化器的速度和准确性各不相同。Tensorflowjs 支持最重要的优化器。
我们将举一个简单的例子:f(x)=x⁶+2x⁴+3x²+ x + 1。函数图如下所示。我们看到函数的最小值在区间内 [-0.5,0] 。我们将使用优化器来查找确切的值。
首先,我们定义需要最小化的函数
1 function f(x)
2 {
3 const f1 = x.pow(tf.scalar(6, 'int32')) //x^6
4 const f2 = x.pow(tf.scalar(<