? ? ? ? 機器學習中的訓練集由輸入數據點和輸出數據點(標簽)組成。它被用來訓練為訓練集(例如測試集)之外的新輸入數據點預測輸出的算法。在訓練階段,由神經網絡訓練的算法調整其權重以預測輸入數據點的給定標簽??傊?,已訓練算法是一個以數據點作為輸入并近似輸出標簽的函數。
? ? ? ?該算法經過神經網絡的訓練后,可以為不屬于訓練集的新背景顏色輸出字體顏色。因此,稍后你將使用測試集來驗證訓練算法的準確率。由于我們正在處理顏色,因此為神經網絡生成輸入顏色的樣本數據集并不困難。
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 中,允許在瀏覽器中訓練神經網絡或在推斷模式下運行預訓練模型?!贡疚模銓⒂柧氉约旱哪P停缓笤谕茢嗄J街羞\行該模型。使用該庫有兩個主要優勢:
首先,它使用本地電腦的 GPU 加速機器學習算法中的向量計算。這些機器學習計算與圖解計算類似,因此使用 GPU 的計算比使用 CPU 更加高效。
其次,deeplearn.js 的結構與流行的 TensorFlow 庫類似(TensorFlow 庫也是谷歌開發的,不過它使用的是 Python 語言)。因此如果你想在使用 Python 的機器學習中實現飛躍,那么 deeplearn.js 可提供通向 JavaScript 各領域的捷徑。
現在回到你的項目。如果你想用 npm 來設置,那么你只需要在命令行中安裝 deeplearn.js。也可以查看 deeplearn.js 項目的官方安裝說明文檔。
npm install deeplearn
評論
查看更多