? ? ? ? 機器學習中的訓練集由輸入數據點和輸出數據點(標簽)組成。它被用來訓練為訓練集(例如測試集)之外的新輸入數據點預測輸出的算法。在訓練階段,由神經網絡訓練的算法調整其權重以預測輸入數據點的給定標簽。總之,已訓練算法是一個以數據點作為輸入并近似輸出標簽的函數。
? ? ? ?該算法經過神經網絡的訓練后,可以為不屬于訓練集的新背景顏色輸出字體顏色。因此,稍后你將使用測試集來驗證訓練算法的準確率。由于我們正在處理顏色,因此為神經網絡生成輸入顏色的樣本數據集并不困難。
function generateRandomRgbColors(m) {
const rawInputs = [];
for (let i = 0; i < m; i++) {
rawInputs.push(generateRandomRgbColor());
}
return rawInputs;
}
function generateRandomRgbColor() {
return [
randomIntFromInterval(0, 255),
randomIntFromInterval(0, 255),
randomIntFromInterval(0, 255),
];
}
function randomIntFromInterval(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
generateRandomRgbColors() 函數創建給定大小為 m 的部分數據集。數據集中的數據點是 RGB 顏色空間中的顏色。每種顏色在矩陣中被表征為一行,而每一列是顏色的特征。特征是 RGB 空間中的 R、G、B 編碼值。數據集還沒有任何標簽,所以訓練集并不完整,因為它只有輸入值而沒有輸出值。
由于基于已知顏色生成可使用字體顏色的編程方法是已知的,因此可以使用調整后的功能版本以生成訓練集(以及稍后的測試集)的標簽。這些標簽針對二分類問題進行了調整,并在 RGB 空間中隱含地反映了黑白的顏色。因此,對于黑色,標簽是 [0,1];對于白色,標簽是 [1,0]。
function getAccessibleColor(rgb) {
let [ r, g, b ] = rgb;
let color = [r / 255, g / 255, b / 255];
let c = color.map((col) => {
if (col <= 0.03928) {
return col / 12.92;
}
return Math.pow((col + 0.055) / 1.055, 2.4);
});
let L = (0.2126 * c[0]) + (0.7152 * c[1]) + (0.0722 * c[2]);
return (L > 0.179)
? [ 0, 1 ] // black
: [ 1, 0 ]; // white
}
現在你已經準備好一切用于生成(背景)顏色的隨機數據集(訓練集、測試集),它被分類為黑色或白色(字體)顏色。
function generateColorSet(m) {
const rawInputs = generateRandomRgbColors(m);
const rawTargets = rawInputs.map(getAccessibleColor);
return { rawInputs, rawTargets };
}
使神經網絡中底層算法更好的另一步操作是特征縮放。在特征縮放的簡化版本中,你希望 RGB 通道的值在 0 和 1 之間。由于你知道最大值,因此可以簡單地推導出每個顏色通道的歸一化值。
function normalizeColor(rgb) {
return rgb.map(v => v / 255);
}
你可以把這個功能放在你的神經網絡模型中,或者作為單獨的效用函數。下一步我將把它放在神經網絡模型中。
JavaScript 神經網絡模型的設置階段
現在你可以使用 JavaScript 實現一個神經網絡了。在開始之前,你需要先安裝 deeplearn.js 庫:一個適合 JavaScript 神經網絡的框架。官方宣傳中說:「deeplearn.js 是一個開源庫,將高效的機器學習構造塊帶到 web 中,允許在瀏覽器中訓練神經網絡或在推斷模式下運行預訓練模型。」本文,你將訓練自己的模型,然后在推斷模式中運行該模型。使用該庫有兩個主要優勢:
首先,它使用本地電腦的 GPU 加速機器學習算法中的向量計算。這些機器學習計算與圖解計算類似,因此使用 GPU 的計算比使用 CPU 更加高效。
其次,deeplearn.js 的結構與流行的 TensorFlow 庫類似(TensorFlow 庫也是谷歌開發的,不過它使用的是 Python 語言)。因此如果你想在使用 Python 的機器學習中實現飛躍,那么 deeplearn.js 可提供通向 JavaScript 各領域的捷徑。
現在回到你的項目。如果你想用 npm 來設置,那么你只需要在命令行中安裝 deeplearn.js。也可以查看 deeplearn.js 項目的官方安裝說明文檔。
npm install deeplearn
評論