Tensoflw.js - 01 - 安裝與入門(中文註釋)
Tensoflw.js - 01 - 安裝與入門(中文註釋)
參考 W3Cschool 文件:https://www.w3cschool.cn/tensorflowjs/
本文主要翻譯一些英文註釋,新增通俗的註釋,記錄新手使用遇到的小問題,去除不必要的部分,幫助新手快速入門
Tensoflw.js 介紹:
TensorFlow.js 是一個開源的基於硬體加速的 JavaScript 庫,用於訓練和部署機器學習模型。TensorFlow.js 可以為你提供高效能的、易於使用的機器學習構建模組,允許你在瀏覽器上訓練模型,或以推斷模式執行預訓練的模型。TensorFlow.js 不僅可以提供低階的機器學習構建模組,還可以提供高階的類似 Keras 的 API 來構建神經網路
Tensorflow.js 安裝
在 JavaScript 專案中,TensorFlow.js 的安裝方法有兩種:
- 一種是通過 script 標籤線上引入(方便,但依賴網路,學習建議使用)
- 另外一種就是通過 npm 進行安裝,本地使用 (開發建議使用)
- 後面我會貼上我目前的最新版 tf.js 0.13.2 下載地址:
一、使用Script 標籤線上引入:
1.新建 html 檔案:
<html> <head> <!-- 載入 TensorFlow.js,發行版本可以直接修改版本號載入需要的版本 --> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/[email protected]"> </script> <!-- 將程式碼放在下面的指令碼標記中 --> <script> // 提示:1.沒有“import”宣告。“if”在索引頁上可用,因為上述的指令碼標籤線上引用 // 2.輸出的值都是列印在瀏覽器開發者工具的控制檯,而不是頁面上 // 此處貼上自己的內容 </script> </head> <body> </body> </html>
2.將下面的程式碼新增到HTML檔案中,在瀏覽器中開啟該HTML檔案,程式碼應該執行!
二、通過 NPM 下載到本地
使用 npm 將 TensorFlow.js 新增到您的專案中。
注意:因為使用 ES2017 語法(如import),所以此工作流程假定您使用打包程式/轉換程式將程式碼轉換為瀏覽器可以理解的內容。
1.進入專案的 js 目錄
2.(如果還有在該目錄使用過 npm,請先執行> npm init)再使用下面命令
npm install @tensorflow/tfjs
3.安裝後容易出現目錄問題,請先檢查
4.在js檔案中輸入以下程式碼:
import * as tf from '@tensorflow/tfjs'; //下面是官方給出的一個示例,就類似於 hellowolrd 示例,一般用不到直接刪掉 // //// 定義一個線性迴歸模型。 //const model = tf.sequential(); //model.add(tf.layers.dense({units: 1, inputShape: [1]})); // //// 準備培訓模型:指定損失和優化器。 //model.compile({loss: 'meanSquaredError', optimizer: 'sgd'}); // // // 為訓練提供一些合成數據。 // const xs = tf.tensor2d([1, 2, 3, 4], [4, 1]); //const ys = tf.tensor2d([1, 3, 5, 7], [4, 1]); // // // 利用資料對模型進行訓練。 //model.fit(xs, ys).then(() => { //// Use the model to do inference on a data point the model hasn't seen before: //model.predict(tf.tensor2d([5], [1, 1])).print(); //});
上面 js 程式碼暫時看不懂沒關係,瞭解他們是給我們搭建 機器學習的環境,使您能夠在瀏覽器中訓練神經網路或在推理模式下執行預先訓練的模型
npm 安裝的 Tensorflow.js 0.13 連結:https://pan.baidu.com/s/1w-Y9Xmlh-cZJLHp6ElAzug 密碼:hvmk
Tensorflow.js 張量和變數
張量(Tensor):
1.張量(Tensor)和變數(Variable)是 TensorFlow.js 中資料的主要表現形式。
兩者不同之處在於張量是不可變的,而變數是可變的。
2.究竟什麼是張量(Tensor)?
定義:一組數值形成一個或多個維度的陣列。 張量例項具有定義陣列形狀的形狀屬性。張量是 TensorFlow.js 中資料的中心單位,也是 Tensorflow.js 中資料的主要表現形式
(可以簡單的理解為 n 為陣列,是資料的中心單位)
3.shape 屬性:(張量是 n 維陣列,shape 就是說明張量具體是幾維幾行幾列的陣列)
4.一個 Tensor 例項有一個shape 屬性來定義這一組數值如何組成張量,而最主要的 Tensor 例項的建構函式就是 tf.tensor 函式,如下所示:
<script> //直接將程式碼拷貝到有引入 Tensorflow.js 的 html 中即可 //提示:輸出的值都是列印在瀏覽器開發者工具的控制檯,而不是頁面上 // 2x3 Tensor const shape = [2, 3]; // 2 行, 3 列 const a = tf.tensor([1.0, 2.0, 3.0, 10.0, 20.0, 30.0], shape); a.print(); // 列印張量值 //提示:輸出顯示在瀏覽器控制檯,F12 > console //輸出:[[1 , 2 , 3 ], //[10, 20, 30]] // shape也可以用下面的方式實現: const b = tf.tensor([[1.0, 2.0, 3.0], [10.0, 20.0, 30.0]]); b.print(); // 輸出:[[1 , 2 , 3 ], //[10, 20, 30]] </script>
推薦使用下面的函式來增強程式碼的可讀性:
tf.scalar(零維), tf.tensor1d(一維), tf.tensor2d(二維), tf.tensor3d(三維)、tf.tensor4d(四維)以及 tf.ones(值全是1)或者tf.zeros(值全是0)
如下所示:
<script> //直接將程式碼拷貝到有引入 Tensorflow.js 的 html 中即可 //提示:輸出的值都是列印在瀏覽器開發者工具的控制檯,而不是頁面上 const a = tf.scalar(3.14); a.print(); // 輸出零維張量 const b = tf.tensor2d([[2, 3, 4], [5, 6, 7]]); b.print(); // 輸出二維張量 const c = tf.zeros([2, 3]); c.print(); // 輸出2行3列的值全是0的張量 const d = tf.ones([3, 5]); d.print(); // 輸出3行5列的值全是1的張量 </script>
在 TensorFlow.js 中,張量是不變的; 一旦建立你就不能改變它們的值。 但是,您可以對它們執行操作來生成新的張量。
變數(Variable):
1.Variables 變數是通過張量進行初始化得到的。不像 Tensor 的值不可變,變數的值是可變的。你可以使用變數的 assign 方法分配一個新的 tensor 到這個變數上,這是變數就會改變:
<script> //直接將程式碼拷貝到有引入 Tensorflow.js 的 html 中即可 //提示:輸出的值都是列印在瀏覽器開發者工具的控制檯,而不是頁面上 const initialValues = tf.zeros([5]); const biases = tf.variable(initialValues); // 初始化biases biases.print(); // 輸出: [0, 0, 0, 0, 0] const updatedValues = tf.tensor1d([0, 1, 0, 1, 0]); biases.assign(updatedValues); // 更新 biases的值 biases.print(); // 輸出: [0, 1, 0, 1, 0] </script>
如上所示,首先使用 tf.zeros 得到一個張量,然後利用這個張量初始化得到一個變數,接著我們就可以列印這個變數,並且通 Object.prototype.toString.call(biases) 方法可以判斷變數也是一個物件,接著,我們再生成一個張量,然後變數呼叫 assign 方法傳入這個張量,就可以得到一個新的變量了,如下:
由此我們可以得出一個結論: 變數由張量生成,且張量不可變而變數可變。