TensorFlow.js:讓你在瀏覽器中玩轉機器學習

2021-02-13 讀芯術


全文共2000字,預計學習時長4分鐘

當談及機器學習和谷歌的TensorFlow時候,相比於JavaScript和其他瀏覽器,大多數人會想到Python和專用硬體。本文解釋了TensorFlow.js的用途,以及機器學習在瀏覽器中運行的意義。

TensorFlow.js 是一個JavaScript庫,可以在瀏覽器中運行,也可以通過伺服器上的Node.js.運行。但是,在本文中,我們著眼的範圍僅在於瀏覽器中的應用程式。TensorFlow.js的界面完全基於TensorFlow的高級API Keras。Keras代碼通常只能和TensorFlow.js代碼區分開,大多數差異是因為在Python和JavaScript配置參數中語言結構不同而導致的。

每臺GPU都有機器學習

TensorFlow.js可以讓你從零開始機器學習。如果有可使用的必需數據,你可以直接在瀏覽器中訓練或執行模型。為此,TensorFlow.js通過WebGL瀏覽器API,使用計算機的圖形卡(GPU)。 這樣一來,由於WebGL瀏覽器需要一些技巧,才能強制執行TensorFlow.js所需的矩陣乘法,導致部分性能最終會丟失。然而,這是無法避免的,因為TensorFlow.js作為一種機器學習策略,是神經網絡的主要支撐。這些損耗,可以在訓練期間或預測期間,通過矩陣乘法準確反映出來。

到這裡,我們已經看到了TensorFlow.js勝過TensorFlow的第一個優勢:儘管TensorFlow目前只能通過CUDA支持NVIDIA GPU,但TensorFlow.js可以和任意顯卡配合使用。清單1包含了使用High Level API在瀏覽器中創建順序神經網絡的代碼。如果你了解TensorFlow的Keras API,那一切操作都很清楚,教程也可以在 tensorflow.org 上找到。

Listing 1

 

// create a sequential model

const model = tf.sequential();

 

// add a fully connected layer with 10 units (neurons)

model.add(tf.layers.dense({units: 10}));

 

// add a convolutional layer to work on a monochrome 28x28 pixel image with 8

// filter units

model.add(tf.layers.conv2d({

  inputShape: [28, 28, 1],

  filters: 8

}));

 

// compile the model like you would do in Keras

// the API speaks for itself

model.compile({

  optimizer: 'adam',

  loss: 'categoricalCrossentropy',

  metrics: ['accuracy']

});

與所有瀏覽器API交互

尋找不同作業系統和設備上的接口地址,著實令人苦惱。而基於瀏覽器的應用

程序,在開發過程中便無需這樣,它們甚至可以訪問相機或麥克風一類的複雜硬體,這些硬體都固定在HTML標準中,目前所有的瀏覽器都支持。

此外,瀏覽器的性質,既為瀏覽器交互而設計,同樣也適合你。因此,如今想獲取一個具有機器學習功能的交互式應用程式比以往更容易。

舉個例子,我們有一個簡單的遊戲Scavenger Hunt,它可以在手機瀏覽器中運行,從而給我們帶來極大的樂趣。

如下圖所示,在現實世界中,你必須快速找到與顯示的表情符號相匹配的對象。為此,內置攝像機和訓練好的神經網絡,可以檢測到相匹配的對象。即使沒有機器學習技能,任何JavaScript開發人員都可以運用這樣的模型。

機器學習,無需在每臺計算機上安裝

TensorFlow.js允許你使用TensorFlow部署預先創建的模型。此模型可能已經在強硬體上完全或一定程度上接受過訓練。然而,在瀏覽器中,它僅被歸結為應用程式或進一步訓練。圖2顯示了通過不同姿勢控制的吃豆人變體,它基於預先訓練的網絡,在瀏覽器中根據自己的姿勢進行再訓練,我們稱之為遷移學習。

模型由提供的程序進行轉換,並且可以在加載後通過輸入類似於以下內容的行,進行異步加載:

const model = await tf.loadModel('model.json')

之後,模型不再與瀏覽器中直接創建的模型相區分開。因此,它便於進行預測,接著,預測又在GPU上異步執行:

const example = tf.tensor([[150, 45, 10]]);

const prediction = model.predict(example);

const value = await prediction.data();

除了通過遊戲進行娛樂外,這裡還可以設想更多有用的應用程式。比如通過手勢進行導航或互動,可以為殘疾人或特殊情況下的人提供幫助。 正如前面已經提到的:只需加載一個網站,即可完成所有操作。

位置檢測技術的另一案例,是下圖中的PoseNet。它已經過預先訓練,即使圖片中有多個人,它也可以識別臉部,手臂和腿部的位置。在這裡,即使有一定的距離,我們也去有能力去有效地控制重要程序。PoseNet的使用非常簡單,甚至不需要機器學習領域的基礎知識。

清單2進行了概述。

Listing 2

import * as posenet from '@tensorflow-models/posenet';

import * as tf from '@tensorflow/tfjs';

 

// load the posenet model

const model = await posenet.load();

 

// get the poses from a video element linked to the camera

const poses = await model.estimateMultiplePoses(video);

 

// poses contain

// - confidence score

// - x, y positions

用戶數據無需離開瀏覽器

特別是現在,根據GDPR進行數據保護,已經越來越重要。人們會考慮,他們是否想在計算機上有特定的cookie,或者是否願意把用戶的統計數據發送給製造商,用於改善軟體的用戶體驗。如果反過來,會怎麼樣?製造商提供了如何使用軟體的一般模型,類似於上述的吃豆人遊戲,它通過轉移學習模型來適應個人用戶。儘管這方面成果不多,但非常有發展潛力,讓我們拭目以待。

總結

首先,瀏覽器中的機器學習似乎對許多開發人員沒有多大意義。但是,如果你仔細研究,就會發現它的應用可能性,這是其他平臺無法提供的:

1.培訓:你可以直接與機器學習概念進行交互,通過實驗進行學習。

2.開發:如果你已經擁有或想要或需要構建JS應用程式,則可以直接使用或訓練機器學習模型。

3.遊戲:僅通過相機進行實時位置估算(當前相機前方的人們如何移動)或圖像識別,可以與遊戲直接結合。已經有一些非常酷的遊戲案例,但是,你可以做的遠不止遊戲。

4.部署:假設你已經擁有了機器學習模型,想知道如何投入生產。可以用瀏覽器來解決這個問題。即使是已經完成的模型也可以集中到您自己的應用程式中,並無需深入了解機器學習。

5.交互式可視化:用於交互式項目甚至藝術項目。

正如我們在上圖中看到的,對於相同的硬體,在TensorFlow上的性能仍有不足。在1080GTX GPU上運行後,作為比較,我們測量出使用MobileNet進行預測的時間,因為提到了它的運用示例。在這種情況下,TensorFlow的運行速度比TensorFlow.js快了三到四倍。但是,兩個值都非常低。WebGPU標準可以更直接地訪問GPU,有望實現更好的性能。

留言 點讚 發個朋友圈

我們一起分享AI學習與發展的乾貨

編譯組:姚宇歌、胡婷

相關連結:

https://mlconference.ai/blog/machine-learning-in-the-browser-what-possibilities-are-there-with-tensorflow-js/

如需轉載,請後臺留言,遵守轉載規範


推薦文章閱讀

長按識別二維碼可添加關注

讀芯君愛你

相關焦點

  • 在瀏覽器中使用TensorFlow.js和Python構建機器學習模型(附代碼)
    (deeplearn.js)使我們能夠在瀏覽器中構建機器學習和深度學習模型,而無需任何複雜的安裝步驟。這就是為什麼構建不僅能夠訓練機器學習模型而且能夠在瀏覽器本身中「學習」或「遷移學習」的應用程式是有意義的。在本文中,我們將首先了解使用TensorFlow.js的重要性及其它的不同組件。然後,我們將深入討論使用TensorFlow.js在瀏覽器中構建我們自己的機器學習模型。然後我們將構建一個應用程式,來使用計算機的網絡攝像頭檢測你的身體姿勢!
  • 獨家 | 在瀏覽器中使用TensorFlow.js和Python構建機器學習模型(附代碼)
    這就是為什麼構建不僅能夠訓練機器學習模型而且能夠在瀏覽器本身中「學習」或「遷移學習」的應用程式是有意義的。 在本文中,我們將首先了解使用TensorFlow.js的重要性及其它的不同組件。然後,我們將深入討論使用TensorFlow.js在瀏覽器中構建我們自己的機器學習模型。然後我們將構建一個應用程式,來使用計算機的網絡攝像頭檢測你的身體姿勢!
  • 從TensorFlow.js入手了解機器學習
    你可以在線運行一下這段代碼:https://stackblitz.com/edit/linearmodel-tensorflowjs-react在 TensorFlow.js 中使用訓練好的模型學習如何創建模型是最難的部分
  • 前端入門機器學習 Tensorflow.js 簡明教程
    本文主要是針對web開發者認識機器學習這個領域,而web開發者必備的語言技能就是Javascript。Tensorflow.js就是以純Javascript來編寫機器學習程序的開發庫,而且運行環境可以選擇瀏覽器,可以很好的可視化程序的訓練過程。這就是本文選擇Tensorflow.js的最重要原因。
  • 在瀏覽器中使用Keras MobileNet模型以及Tensorflow.js進行圖片分類
    Chrome在這篇文章中,我們將了解如何使用Keras的MobileNet模型進行圖像分類,使用TensorFlow.js在Google Chrome瀏覽器中部署,並使用該模型在瀏覽器中進行實時的預測。
  • 基於tensorflow.js在瀏覽器中設計訓練神經網絡模型的18條建議
    在將現有的一些目標檢測、臉部檢測、臉部識別的模型移植到tensorflow.js後,我發現有的模型在瀏覽器中的表現沒有達到最優,而另一些模型在瀏覽器上的表現相當不錯。瀏覽器內的機器學習潛力巨大,tensorflow.js等庫給web開發者帶來了太多可能性。
  • 有了 TensorFlow.js,瀏覽器中就能進行實時人體姿勢判斷
    編輯和插圖 / 創意技術專家 Irene Alvarado 和 Google Creative Lab 的自由平面設計師 Alexis Gallo通過與 Google 創意實驗室的合作,我很高興地宣布 TensorFlow.js 版本的 PoseNet¹,² 發布了,這是一個允許在瀏覽器中進行實時人體姿勢判斷的機器學習模型。 訪問 這裡 嘗試一下在線演示吧。
  • 機器學習tensorflow簡介
    機器學習的一個重要方向,是深度學習。深度學習,一方面需要健全的神經網絡,另一方面需要大量良好的數據樣本進行訓練。神經網絡方面,對於程式設計師,開源項目是一個選擇,而開源項目中,tensorflow,是一個好的選擇。本文簡單介紹tensorflow的使用。
  • Tensorflow 2.0到底好在哪裡?
    TensorFlow.js(https://www.tensorflow.org/js)是一個用於在 JavaScript 中開發和訓練機器學習模型並在瀏覽器或 Node.js 中部署它們的庫。還有一個基於 TensorFlow.js 的高級庫 ml5.js(https://ml5js.org/),使用戶無需直接面對複雜的張量和優化器。
  • 棒球比賽中是好球還是壞球?TensorFlow.js 已經知道
    隨著我們的進展,我們將模型在整個訓練過程中理解的打擊區域可視化。您可以通過訪問此 Observable 筆記本在瀏覽器中運行此模型。註:Observable 連結https://beta.observablehq.com/@nkreeger/visualizing-ml-training-using-tensorflow-js-and-baseball-d 如果你不熟悉棒球的擊球區,這裡有一篇詳細的文章。
  • 在Android中藉助TensorFlow使用機器學習
    相比Android、iOS等開發項目,機器學習門檻相對要高一些,需要耐心地學習。在接觸真正的機器學習之前,我們先來看一個在Android App中使用機器學習的例子。原文地址:https://blog.mindorks.com/android-tensorflow-machine-learning-example-ff0e9b2654cc#.i8l12xa39我們知道谷歌開源了在Android中可以使用機器學習的Library-TensorFlow。
  • TensorFlow.js 實例上手指南
    作者 | Nick Bourdakos編譯 | Xiaowen什麼是TensorFlow.js? 它能幹什麼?在官方頁面中,tensorflow.js是「一個用於在瀏覽器和node.js中訓練和部署ML模型的javascript庫」。那它能做什麼呢?跟著這篇文章試一試。
  • TensorFlow.js 的核心概念
    TensorFlow.js 中的中心數據單位是 tensor(張量):一個一維或多維的數組。tensor(張量)實例具有定義數組形狀的 shape 屬性(即,數組的每個維度有多少值)。你可以使用 assign 方法將一個新 Tensor(張量 ) 賦值給現有的 Variables(變量)。
  • 用 TensorFlow.js 探索 BERT 在瀏覽器中的趣味實踐
    -- Load TensorFlow.js. This is required to use the qna model. --><script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"> </script><!-- Load the qna model.
  • 教程 | 從零開始:TensorFlow機器學習模型快速部署指南
    你也可以閱讀下文,在容器中按照下文說明進行操作。現在,TensorFlow 將模型信息保存至/tmp/output_graph.pb 和 /tmp/output_labels.txt,二者作為命令行參數被輸入至 label_image.py (https://github.com/tensorflow/tensorflow/blob/r1.4/tensorflow/examples/image_retraining/label_image.py
  • 教程 | face-api.js - 使用 tensorflow.js 在瀏覽器中進行面部識別的 JavaScript API
    在本文中,我將介紹 face-api.js,這是一個構建在 tensorflow.js 核心 之上的 javascript 模塊,它實現了幾個 CNN (卷積神經網絡)來解決面部檢測,人臉識別和面部標誌檢測,並針對行動裝置進行了網絡優化。與往常一樣,我們將會研究一個簡單的代碼示例,讓您可以再幾行代碼中立即用上該包。如果您想首先閱讀一些示例,請查看演示頁面!但不要忘記回來閱讀這篇文章。
  • TensorFlow.js 更新計劃
    我們計劃本月發布 TensorFlow.js 2.0。由於 Tensorflow 3.0 變更的幅度較大,我們還沒有確定發布日期。由於這項升級幾乎涉及到 tfjs-core 中的每個文件,因此我們也會藉此機儘可能地償還技術債。我應該升級到 TensorFlow.js 2.x 還是等待 3.x ?
  • Tensorflow官方視頻課程-深度學習工具 TensorFlow入門
    課程首頁    https://cn.udacity.com/course/intro-to-tensorflow-for-deep-learning--ud187 你將學到什麼    課程 1 什麼是人工智慧和機器學習?
  • TensorFlow 2.0 正式版現已發布
    註:Keras with TensorFlow 連結https://tensorflow.google.cn/guide/keras/overviewEager Execution 連結https://tensorflow.google.cn/guide/eager為了能夠在不同運行時環境(如雲、Web、瀏覽器、Node.js、移動端以及嵌入式系統
  • TensorFlow 初探
    真正的可移植性Tensorflow 可以在CPU和GPU上運行,比如說可以運行在臺式機、伺服器、手機行動裝置等等。想要在沒有特殊硬體的前提下,在你的筆記本上跑一下機器學習的新想法?Tensorflow也可以辦到。準備將你的訓練模型在多個CPU上規模化運算,又不想修改代碼?Tensorflow也可以辦到。想要將你的訓練好的模型作為產品的一部分用到手機app裡?