天天看點

推薦幾款很流行的面向 Javascript 的機器學習庫SynapticBrain.jsTensorFlow.jsMindConvNetJSML5.jsNeuro.jsKeras.Js結尾

⭐️ 本文首發自 前端修羅場,是一個由資深開發者獨立運作的專業技術社群,我專注 Web 技術、答疑解惑、面試輔導以及職業發展。幫你評估知識點的掌握程度,獲得更全面的學習指導意見,交個朋友,不走彎路,少吃虧!

最近公司在研發分布式高性能的雲計算平台,其中涉及到了 AI 方面的處理。是以我也在自學 Machine Learning。不過在 AI 方面的知識卻是需要花功夫花時間學習的。在學習的過程中我發現了一個不錯的學習教程(https://www.captainai.net/iislv/),推薦給大夥😋,我個人覺得這個教程講解的通俗易懂,幫我省去了自己苦苦專研的時間,能夠得到快速的進步。下一階段,我也會在這裡和大家分享我的學習筆記。

雖然有些人認為 Javascript 隻是一種用于前端開發的語言,但如今 JavaScript 已成為一種通用的程式設計語言,它的可能性已經無窮無盡的。

本文想為大家推薦一些我在學習機器學習過程中接觸到的一些面向 JS 的機器學習庫。

Synaptic

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

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

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

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

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

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

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

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 進入資料科學領域肯定會成為初學者的一大優勢,也是程式員在機器學習方面取得進步的絕佳方法。