不久前 Google 發表了 TensorFlow.js,終於把 TensorFlow 帶到瀏覽器上,不過對 Node.js 仍然不支援。現在 Google 終於把測試版本的 TensorFlow 丟到 npm 上了!

安裝 TensorFlow.js

首先透過 npm(或 yarn 也行)安裝 TensorFlow.js 和 TensorFlow.js 的 Node.js 版本:

npm install @tensorflow/tfjs
npm install @tensorflow/tfjs-node

之後再安裝對應版本的 NVDIA CUDA、cuDNN 就可以啦!

值得注意的是:

  1. tfjs-node 還在測試中(Under development),可能不適合正式環境使用。
  2. 目前只有 Linux、macOS 可以使用,~~Windows 的使用者可能無法。~~Windows 也能用啦!

開始使用 TensorFlow.js

首先要引入 TensorFlow.js:

const tf = require('@tensorflow/tfjs');
require('@tensorflow/tfjs-node');

tf.setBackend('tensorflow');

之後 TensorFlow 就會放在 tf 這個全域變數裡,接著我們改寫官方的範例來試試看 tf.js。

async function myFirstTfjs() {
	// Create a simple model.
	const model = tf.sequential();
	model.add(tf.layers.dense({units: 1, inputShape: [1]}));

	// Prepare the model for training: Specify the loss and the optimizer.
	model.compile({
		loss: 'meanSquaredError',
		optimizer: 'sgd'
	});

	// Generate some synthetic data for training. (y = 2x - 1)
	const xs = tf.tensor2d([-1, 0, 1, 2, 3, 4], [6, 1]);
	const ys = tf.tensor2d([-3, -1, 1, 3, 5, 7], [6, 1]);

	// Train the model using the data.
	await model.fit(xs, ys, {epochs: 250});

	// Use the model to do inference on a data point the model hasn't seen.
	// Should print approximately 39.
	const output = model.predict(tf.tensor2d([20], [1, 1])).toString()
	console.log(output);
}

myFirstTfjs();

這個範例用來預測 $y=2x-1$ 這個方程式,而我們在 model.predict 的地方預測了 $20$,預期出來的結果應該要是 $39$。而這是我的預測結果:

[[38.4072647],]

還蠻接近 39 的。

上面的範例取自官方的 tfjs-examples,而為了適應後端環境,我只將最後的 document.getElementById(...).innerText += 改成 console.log 而已。如果有興趣,也能把手寫辨識的範例抓下來跑看看。

參考資料