初步認識TensorFlow.js

Heko
小彥彥的前端五四三
5 min readDec 17, 2018

TensorFlow.js是Google將機器學習(Machine Learning、ML)框架TensorFlow的JavaScript版本,透過TensorFlow.js,讓JavaScript開發人員也有機會加入機器學習的領域。

機器學習基本概念

先來簡單講講一般機器學習是怎麼做的,在機器學習中,通常我們會針對一個題目,給予一組訓練資料清單,這些資料包含了問題與答案,接著透過機器學習的各種演算法,來訓練出一個針對這個題目的模型

這個模型通常就代表了一個公式,只要將題目帶進去公式,就能夠算出答案,而這個公式怎麼來的呢?就是透過機器學習演算法,這些演算法通常會先隨機產生一個公式(也就是模型),接著將訓練資料帶進去計算出預測值,並與正確答案比較,並透過不斷的調整模型內容,不斷想辦法降低預測值與正確答案的差距,直到預測值與足夠接近正確答案為止。

簡單來說,就是經驗法則啦!剛開始學一項知識的時候,得到的結果會與預期落差很大,藉由不斷學到正確知識後,就會與預期越來越接近!

萬事起頭難

參考了幾個作者的介紹文章,我能夠發現TensorFlow.js的確不是一蹴可成的,不過沒關係,就算我們目前還沒有能力可以學習TensorFlow.js,但至少也要試著了解他的概念與名詞。

Tensor 和 Variable 是TensorFlow.js中最基礎的兩種數據形式。那他們到底是什麼意思呢?

Tensor在谷歌翻譯中是“張量”的意思,“張量”這個詞是數學和物理中的一個術語,我們暫且不深究它的意思,你只需要記住,Tensor(張量)是不可變的,類似於const,一旦定義就不能改變它的值。

Variable就很容易理解了,它是“變量”的意思,顧名思義,它的值是可以改變的。

總之,Tensor(張量)不可變,Variable(變量)可變。

張量 Tensor

矩陣(Matrix)擁有兩個維度,在更高的維度,就是張量。其實所有的標量,矢量,矩陣都可以用張量表示,只是維度不同。

- 標量 Scalar
標量就是一個簡單的數字,概念就是只有大小,沒有方向。

- 向量/矢量 Vector
向量就是一個一維數組,概念就是有大小和方向。

在Tensoflow中Rank表示了維度的等級,對應如下標量0 tf.scalar矢量1 tf.tensor1d矩陣2 tf.tensor2d張量2+ tf.tensor3d, tf.tensor4d

一張圖來直觀說明:

各維度張量示意圖,圖片來源:https://zhuanlan.zhihu.com/p/35345939

變量 Variable

Variable(變量)只能通過Tensor(張量)生成。我們可以使用assign給變量重新賦值。

操作 Variable

TensorFlow.js提供了各種向量運算的API,我們可以稱這些為Operations。

梯度下降法 Gradient Descent

Gradient Descent 是深度學習為了找尋接近目標點的一種方法,它是透過一步步慢慢靠近目標的方式,最終找到一個極近似目標的函數。

卷積神經網絡 Convolutional Neural Network

簡稱CNN,CNN是所有深度學習課程、書籍必教的模型(Model),CNN在影像識別方面的威力非常強大,許多影樣辨識的模型也都是以CNN的架構為基礎去做延伸。

--

--