时间:2020-09-04 08:06:58 来源:系统堂 游览量: 次
如何在浏览器中使用TensorFlow
利用TensorFlow.js在JavaScript中开发和训练机器学习模型并将其部署在浏览器或Node.js中
虽然你可以用相对较少的培训与训练数据简单的神经网络TensorFlow,对深层神经网络的大型训练数据,你真的需要使用支持CUDA的 NVIDIA 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支持,并且使用WebGL着色器执行,并且速度比普通CPU后端快100倍。WebGL不需要CUDA,因此可以利用现有的任何GPU。
浏览器的WebAssembly(WASM)TensorFlow.js后端使用 XNNPACK库 来优化神经网络操作员的CPU实现。WASM后端通常比JavaScript CPU后端快得多(10倍至30倍),但除非常小的模型外,通常比WebGL后端要慢。您的里程可能会有所不同,因此请在自己的硬件上针对自己的型号测试WASM和WebGL后端。
TensorFlow.js模型和层
TensorFlow.js支持两个用于构建神经网络模型的API。一个是层API,它在本质上是一样的Keras API在TensorFlow 2。另一个是Core API,它实质上是张量的直接操纵。
与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});
核心API可以使用不同的代码完成相同的目标,并且减少了与层之间的直观联系。下面的模型可能看起来像基本的张量操作,但是它创建了与前两个公式相同的网络。请注意,在下面的函数中,使用relu()和softmax()都是神经网络操作model()。
// 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(供浏览器使用)中。您可以使用提供的这些模型或进行转移学习。只需做一些工作,您就可以将它们用作其他模型的构建块。
其中一些模型实时使用设备的摄像头,例如,摆姿势:
什么是ml5.js?
ml5.js是主要在NYU开发的TensorFlow.js的开源,友好,高级界面。ml5.js可在浏览器中立即访问经过预先训练的模型,以检测人体姿势,生成文本,用另一种样式设置图像,编写音乐,音高检测,通用英语单词关系等等。TensorFlow.js主要针对数据科学家和开发人员,而ml5.js旨在支持更广泛的公众对机器学习的理解,并促进与道德计算,负责任的数据收集以及人们对技术和艺术的观点的可访问性和多样性的更深入互动。 。