⭐️ 本文首发自 前端修罗场,是一个由资深开发者独立运行的专业技术社区,我专注 Web 技术、答疑解惑、面试辅导以及职业发展。帮你评估知识点的掌握程度,获得更全面的学习指导意见,交个朋友,不走弯路,少吃亏!
最近公司在研发分布式高性能的云计算平台,其中涉及到了 AI 方面的处理。所以我也在自学 Machine Learning。不过在 AI 方面的知识却是需要花功夫花时间学习的。在学习的过程中我发现了一个不错的学习教程(https://www.captainai.net/iislv/),推荐给大伙😋,我个人觉得这个教程讲解的通俗易懂,帮我省去了自己苦苦专研的时间,能够得到快速的进步。下一阶段,我也会在这里和大家分享我的学习笔记。
虽然有些人认为 Javascript 只是一种用于前端开发的语言,但如今 JavaScript 已成为一种通用的编程语言,它的可能性已经无穷无尽的。
本文想为大家推荐一些我在学习机器学习过程中接触到的一些面向 JS 的机器学习库。
Synaptic 是由 MIT 创建的著名 JavaScript 神经网络库,可与 Node.js 或浏览器一起使用。该库的一个显着特点是,由于其无架构算法和预制结构,它能够构建和训练任何一阶或二阶神经网络架构。
它还可以将网络作为独立功能导入或导出到 JSON,以便它们可以与其他网络甚至门连接连接。Synaptic 包括一些有趣的内置架构,如 Hopfield 网络、状态机、多层感知器、长短期记忆网络 (LSTM) 等。而且,由于 Synaptic 是一个开源库,任何人都可以为它做出贡献或免费使用它。
Synaptic 还包括一个训练器,该训练器能够通过嵌入式 Reber 语法测试、解决 XOR、完成分心序列回忆任务和内置训练任务等测试来训练任何特定的神经网络。它还有助于比较不同神经网络架构的性能。
以下示例展示了如何使用 Synaptic 库创建神经网络:
// creating a network
const { Layer, Network } = window.synaptic;
let innerLayer = new Layer();
let hiddenLayer = new Layer();
let outerLayer = new Layer();
innerLayer.project(hiddenLayer);
hiddenLayer.project(outerLayer);
const Network = new Network({
input: innerLayer,
hidden: [hiddenLayer],
output: outerLayer
});
现在,你可以处理上面创建的神经网络的测试过程。
Brain.js 是一个基于 JavaScript 的快速运行库,用于机器学习和神经网络。它可以在浏览器中使用,也可以与 Node.js 一起使用。使用 Brain.JS,不同类型的网络可用于不同的任务。它为各种神经网络提供支持,例如长短期记忆神经网络、循环神经网络和前馈神经网络。
Brain.js 是一个快速处理库,因为它使用 GPU 进行计算。即使 GPU 不可用,它也会恢复为纯 JS 并继续处理。Brain.js 提供多种神经网络实现,并鼓励在服务器端与 Node.js 一起构建训练和运行这些神经网络。
这个库的另一个好处是你不必严格熟悉神经网络就可以使用它。为了将您的网站与这些网络模型集成,您只需将它们实现为函数或使用 JSON 格式。
Brain.js 可用于使用高级语言快速创建简单的神经网络。它允许你用几行代码和一个好的数据集构建一些非常有趣的功能。此外,Brain.JS 提供了在客户端 javascript 上运行的能力。
以下示例介绍如何使用 MNIST 数据集创建 NN,该数据集包含大约 50,000 个手写数字样本。
// creating a network
const context = require('brain');
const getData = function(content) {
const rows = content.toString().split('\n');
const values = [];
for (covaluesnst i = ; i < rows.length; i++) {
const inputVal = rows[i].split(',').map(Number);
const outputVal = Array.apply(null, Array()).map(Number.prototype.valueOf, );
outputVal[inputVal.shift()] = ;
values.push({
input: inputVal,
output: outputVal
});
}
return values;
};
TensorFlow.js 是由 Google Brain 收集构建的开源 JavaScript 库。它通过其完整而灵活的各种工具来推动硬件加速。由于其深度学习层和全面的线性代数,该库已成为所有基于机器学习的 JavaScript 项目的基础。
TensorFlow.js 允许用户在浏览器的帮助下训练神经网络,或者在推理模式下执行预训练的模型,同时将机器学习构建块引入网络。您可以运行当前可用的默认 TensorFlow 模型,甚至可以将它们转换为一些 python 模型作为附加。
此外,TensorFlow.js 使得使用 Javascript 的低级线性代数从头开始构建模型变得非常容易。
TensorFlow.js 还包括一些预先存在的机器学习模型。它们可用于重新训练您自己的数据。它还提供了在任何地方(包括设备)部署机器学习模型的能力,无论您使用何种语言、本地、浏览器或云。
你可以考虑将 TensorFlow.js 用于你的下一个基于机器学习的 JavaScript 项目。它提供了更好的计算图可视化,同时还提供了一些好处,例如频繁的新版本、快速更新和无缝性能。
此外,TensorFlow.js 具有高度并行性,可与众多后端软件(如 ASIC、GPU 等)结合使用。
此外,TensorFlow.js 是 TensorFlow 的一个版本,包括许多其他子版本,例如用于完整体验的 TensorFlow Extended、用于移动设备的 TensorFlow Lite 和用于 Rust 绑定的 TensorFlow Rust 等。
以下代码描述了如何使用 TensorFlow.js 创建一个简单的神经网络来执行干扰。该模型需要一个输入值和一个输出值来处理 NN。
在这里,我们通过调用 tf.sequential
方法尝试了一个新的模型实例。由此,我们可以得到一个新的序列模型。顺序模型可以称为模型,其中一层的输出用作另一层的输入,即模型的拓扑结构是层的原始“堆栈”——没有任何分支或跳过。
然后,可以通过调用 model.add
方法添加第一层,这会创建一个密集层。在以下示例中,我们向神经网络添加了一个具有一个输入和一个输出的密集层:
// Defining a machine learning sequential model
const modelObj = tf.sequential();
// Add a single layer
modelObj.add(tf.layers.dense({units: , inputShape: []}));
之后,我们可以包含模型的损失函数和优化器函数:
// Specify loss and optimizer for model
modelObj.compile({loss: 'meanSquaredError', optimizer: 'sgd'});
这是通过将配置对象传递给模型实例的 compile 方法来完成的。配置对象包含以下两个属性:损失和优化器。
Mind 使用 JavaScript 编写脚本,是一个绝对灵活的神经网络库,可以处理浏览器和 Node.js 以做出更好的预测。Mind 的主要功能之一是它使用矩阵实现来处理训练数据,同时允许开发人员自定义网络拓扑。
开始使用这个库非常方便,因为它可以快速插入,并且比其他库更容易下载和上传插件。易于配置预训练网络也是 Mind 的另一个优点。
下面的示例,演示了如何在神经网络中使用 Mind:
let category = [
'Action',
'Adventure',
'Animation',
'Comedy',
];
let input = [ , , , , , , , , , , , , ];
movie.category.forEach(function(category) {
let index = category.indexOf(category);
if (index > -1) input[index] = ;
});
// 使用 Mind() 提供的评级来训练网络
let mind = Mind()
.learn([
{ input: input, output: [ ratings / ] }
]);
ConvNetJS 是一个 JavaScript 库,专为训练深度学习模型和使用神经网络而设计。该库最重要的特点是它完全依赖于浏览器,因此根本不需要任何其他特殊软件,如 GPU、编译器。ConvNetJS 也支持 Node.js。
ConvNetJS 由具有完全连接层和非线性的常见神经网络模块组成。该库具有使用简单 JavaScript 制定和解决神经网络的能力,同时提供对一些常见网络模块的支持。
它还提供了用于指定神经网络和分类问题、用于图像处理的卷积网络、基于 Deep Q 学习的实验性强化学习模块以及仍处于实验水平的补充学习模块的功能。
参考下面的简单代码示例,了解如何在神经网络中实现 ConvNet.js:
const layer_defs = [];
const network = new convnetjs.Net();
net.makeLayers(layer_defs);
ConvNetJS 是一个不断更新的库,在经验丰富的开发人员中很受欢迎。
ML5.js 是一个完全打包的综合开源库,用于使用 Node.js 和浏览器进行机器学习。。
它基于 TensorFlow 构建,没有任何外部依赖项。与 Tensorflow 类似,除了管理机器学习算法的内存外,该库还可以处理由 GPU 加速的数学运算。
ML5.js 使得在浏览器中访问许多预训练的机器学习算法变得很容易,因此它可以用于各种目的,例如检测人体语言和音调、自定义图像、生成文本、查找英语语言关系、作曲音乐曲目等
该库能够提供对机器学习的深入理解,以及各种复杂性,例如道德计算和数据收集,使其适合,即使是初学者。
ML5.js 为无监督和监督问题以及关键任务和简单模型提供实用程序。此外,它是一个多合一的通用 JavaScript 机器学习库,适用于 Typescript 和 JavaScript 开发人员,包括数学和统计支持库、回归算法、人工神经网络、无监督和监督学习、特征提取、线性模型、装袋、集成、分解、聚类等。
不仅如此,ML5.js 还允许随机数生成、排序、对数组和哈希表的位操作——它甚至为用户提供了优化、数组操作和线性代数的例程。这个库的另一个巨大优势是它支持交叉验证。
// 初始化图像分类器方法
let classifier;
// 保存图像的变量
let image;
function preload() {
classifier = ml5.imageClassifier('MobileNet');
image = loadImage('images/car.png');
}
Neuro.js 是一个 JavaScript 框架,用于开发和训练强化学习模型和深度学习模型,广泛用于使用 AI 技术和聊天机器人制作助手。
许多开发人员使用这个库来开发、实践和训练深度学习和机器学习模型,然后将它们部署在 Web 浏览器或带有 JS 脚本的 Node.js 上。
这个库的一些主要优点是它有助于进行实时分类,为学习提供在线支持,并在创建 ML 项目时支持多标签表单的分类。看看下面使用 Neuro.js 库构建的颜色分类代码示例。
Neuro.js 库的性能驱动和简单性质使任何使用它的人都可以访问和实用机器学习:
const neuroModel = require("neuro.js");
const colorsClassifier = new neuroModel.classifiers.NeuralNetwork();
colorsClassifier.trainBatch([
{ input: { red: 0.03, green: 0.7, black: 0.5 }, output: }, // = black
{ input: { red: 0.16, green: 0.09, black: 0.2 }, output: }, // = white
{ input: { redr: 0.5, green: 0.5, black: 1.0 }, output: } // = white
]);
console.log(colorsClassifier.classify({ red: , green: 0.4, b: }));
// 0.99 = nearly whit
Keras.js 可以被认为是继 TensorFlow.js 之后第二个使用最广泛的深度学习 JS 框架。它在使用神经网络库的开发人员中非常流行。由于 Keras 使用多个框架作为后端,你可以在 CNTK、TensorFlow 和其他框架中训练模型。
使用 Keras 构建的机器学习模型可以在浏览器中运行。尽管模型也可以在 Node.js 中运行,但只有 CPU 模式可用。不会有 GPU 加速。
Netflix 和 Uber 等许多领先公司正在使用 Keras 神经网络模型来增强用户体验。许多科学组织,如 NASA、CERN 等,都将这项技术用于他们与人工智能相关的项目。Keras 被认为是人工智能库的 JS 替代品,它允许您在项目中执行不同的模型并利用 WebGL 3D 设计的 API 提供的 GPU 支持。
在本文中,我们介绍了几个在机器学习或数据科学中可以使用的 JavaScript 库。
尽管 JavaScript 与深度学习和机器学习等学科的关系不是很密切,但它有望在未来几年成为 ML 开发人员中最突出的语言。
上述平台和库的发展将是其背后的主要原因。而且,由于 JS 是一种基础编程语言,因此使用算法并为许多问题提出解决方案将非常方便。
最终,使用 JavaScript 进入数据科学领域肯定会成为初学者的一大优势,也是程序员在机器学习方面取得进步的绝佳方法。