机器学习中的训练集由输入数据点和输出数据点(标签)组成。它被用来训练为训练集(例如测试集)之外的新输入数据点预测输出的算法。在训练阶段,由神经网络训练的算法调整其权重以预测输入数据点的给定标签。总之,已训练算法是一个以数据点作为输入并近似输出标签的函数。
该算法经过神经网络的训练后,可以为不属于训练集的新背景颜色输出字体颜色。因此,稍后你将使用测试集来验证训练算法的准确率。由于我们正在处理颜色,因此为神经网络生成输入颜色的样本数据集并不困难。
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
评论
查看更多