示例 2 模型
打亂資料
在訓練前始終打亂資料。
模型訓練時,資料被分成小集合(批次)。每個批次都會被送入模型。打亂資料很重要,可以防止模型重複獲取相同的資料。如果兩次使用相同的資料,模型將無法泛化資料並給出正確輸出。打亂資料可以使每個批次的資料具有更好的多樣性。
示例
tf.util.shuffle(data);
TensorFlow 張量
要使用 TensorFlow,輸入資料需要轉換為張量資料。
// 將 x 值對映到張量輸入
const inputs = values.map(obj => obj.x);
// 將 y 值對映到張量標籤
const labels = values.map(obj => obj.y);
// 將輸入和標籤轉換為二維張量
const inputTensor = tf.tensor2d(inputs, [inputs.length, 1]);
const labelTensor = tf.tensor2d(labels, [labels.length, 1]);
資料歸一化
資料在神經網路中使用前應進行歸一化。
使用 min-max 將範圍設為 0 - 1 通常最適合數值資料。
const inputMin = inputTensor.min();
const inputMax = inputTensor.max();
const labelMin = labelTensor.min();
const labelMax = labelTensor.max();
const nmInputs = inputTensor.sub(inputMin).div(inputMax.sub(inputMin));
const nmLabels = labelTensor.sub(labelMin).div(labelMax.sub(labelMin));
Tensorflow 模型
一個機器學習模型是一種從輸入生成輸出的演算法。
本例使用 3 行程式碼定義一個機器學習模型
const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [1], units: 1, useBias: true}));
model.add(tf.layers.dense({units: 1, useBias: true}));
順序機器學習模型
const model = tf.sequential(); 建立一個順序機器學習模型。
在順序模型中,輸入直接流向輸出。其他模型可以有多個輸入和多個輸出。順序模型是最簡單的機器學習模型。它允許您逐層構建模型,其權重與下一層對應。
TensorFlow 層
model.add() 用於向模型新增兩個層。
tf.layer.dense 是一種在大多數情況下都適用的層型別。它將輸入乘以權重矩陣,然後將一個數字(偏置)新增到結果中。
形狀和單元
inputShape: [1] 是因為我們有 1 個輸入(x = 房間)。
units: 1 定義權重矩陣的大小:每個輸入(x 值)對應一個權重。
編譯模型
使用指定的最佳化器和損失函式編譯模型。
model.compile({loss: 'meanSquaredError', optimizer:'sgd'});
編譯器設定為使用 sgd 最佳化器。它易於使用且相當有效。
meanSquaredError 是我們希望用於比較模型預測和真實值的函式。