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/tfjs@0.13.2"> </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 方法傳入這個張量,就可以得到一個新的變量了,如下:
由此我們可以得出一個結論:變量由張量生成,且張量不可變而變量可變。
更多文章
- TensorflowJS 教程:Tensoflw.js 教程