中华爱心网
尽管 R 编程语言的学习曲线相对容易,但 Web 开发人员更喜欢在 Java 的舒适区内做事。 目前,node.js已经开始将Java应用到各个领域。 在这个大趋势下,我们需要了解并使用JS来进行机器学习。 它因可用软件包的数量而变得流行,但 JS 社区也紧随其后。 本文将帮助初学者学习如何构建一个简单的分类器。
扩展:
2019年11个java机器学习库
很棒的机器学习库,可以为您的下一个应用程序添加一些人工智能!
创造
我们可以创建一个使用 .js 的网页来在浏览器中训练模型。 给定房屋的“”,模型可以学习预测房屋的“价格”。
为此我们要做的是:
加载数据并准备训练。
定义模型的架构。
训练模型并在训练时监控其性能。
通过做出一些预测来评估训练后的模型。
第一步:让我们从基础开始
创建 HTML 页面并包含 Java。 将以下代码复制到名为 index.html 的 HTML 文件中。
为代码创建java文件
在与上面的 HTML 文件相同的文件夹中,创建一个名为 .js 的文件并将以下代码放入其中。
.log('你好');
测试
现在 HTML 和 Java 文件已经创建,让我们测试它们。 在浏览器中打开index.html 文件并打开控制台。
如果一切正常,应该创建两个全局变量并在控制台中可用:
您现在应该看到一条消息“Hello”。 如果是这样,您可以继续下一步。
需要这样的输出
注意:您可以使用Bit来共享可重用的JS代码
Bit (Bit on Bit) 是跨项目和应用程序共享可重用 Java 代码的最快、最具扩展性的方式。 尝试一下,它是免费的:
组件发现与协作·Bit
Bit 是开发人员共享组件并协作共同构建令人惊叹的软件的地方。 发现共享组件...
比特开发
例如:Ramda用作共享组件
Ramda by Ramda·Bit
面向 Java 程序员的实用程序库。 -256 个 java 组件。 例如:等号、乘号...
步骤 2:加载数据、格式化数据并可视化输入数据
我们将加载“house”数据集,可以在此处找到。 它包含特定房屋的许多不同特征。 在本教程中,我们只需要有关平均房间大小和每间房屋价格的数据。
将以下代码添加到 .js 文件中。
这将删除所有未定义价格或房间数量的条目。 我们可以将这些数据绘制成散点图,看看它是什么样子的。
将以下代码添加到 .js 文件的底部。
当刷新页面时,您可以在页面左侧看到一个面板,其中包含数据的散点图,如下所示。
散点图
一般来说,在处理数据时,最好找到查看数据并在必要时清理数据的方法。 可视化数据使我们能够了解模型是否可以学习数据的任何结构。
从上图可以看出,房间数量和价格之间存在正相关关系,即随着房间数量的增加,房屋的价格普遍上涨。
第三步:构建待训练模型
在此步骤中,我们将编写代码来构建机器学习模型。 该模型主要是基于此代码构建的,因此这是重要的一步。 机器学习模型接受输入并产生输出。 对于.js,我们必须构建一个神经网络。
将以下函数添加到 .js 文件中以定义模型。
这是我们可以在 .js 中定义的最简单的模型之一,让我们尝试简单地分解每一行。
实例化模型
常量模型 = tf.();
这将实例化一个 tf.model 对象。 该模型是连续的,因为它的输入直接流向其输出。 其他类型的模型可以有分支,甚至可以有多个输入和输出,但在许多情况下,您的模型是连续的。
添加图层
model.add(tf..dense({: [1], 单位: 1, : true}));
这为我们的网络添加了一个隐藏层。 由于这是网络的第一层,因此我们需要定义输入形状。 输入形状为 [1],因为我们将数字 1 作为输入(给定房间中的房间数)。
单位(链接)设置层中权重矩阵的大小。 这里设置为1,我们可以说每个数据输入特征都有一个权重。
model.add(tf..dense({单位:1}));
上面的代码创建了我们的输出层。 我们将单位设置为 1,因为我们要输出数字 1。
创建实例
将以下代码添加到之前定义的 run 函数中。
这将创建一个实例模型并在网页上显示该层的摘要。
步骤 4:准备创建数据
为了获得 .js 的性能优势并使训练机器学习模型实用,我们需要将数据转换为 .js。
将以下代码添加到 .js 文件中。
接下来我们可以分析一下会发生什么。
随机播放数据
在训练模型的过程中,数据集被分成更小的集合,每个集合称为一个批次。 然后将这些批次输入模型运行中。 组织数据很重要,因为模型不应该一遍又一遍地获取相同的数据。 如果一遍又一遍地向模型提供相同的数据,则模型将无法概括数据并为运行期间收到的输入提供指定的输出。 洗牌将有助于在每个批次中拥有多种数据。
转换成
这里我们创建两个数组,一个用于输入示例(房间条目数),一个用于实际输出值(在机器学习中称为标签,在我们的例子中是每栋房子的价格)。 然后我们将每个数组数据转换为二维张量。
标准化数据
接下来,我们对数据进行标准化。 这里我们使用最小-最大比率将数据归一化到数值范围 0-1。 规范化很重要,因为您将使用 .js 构建的许多机器学习模型的内部设计都是为了处理不太大的数字。 将数据标准化为包括 0 到 1 或 -1 到 1 的常见范围。
返回数据和标准化范围
我们可以在运行期间保留用于标准化的值,因此我们可以将输出非标准化回到其原始大小,并且我们可以以相同的方式标准化未来的输入数据。
第 5 步:运行模型
通过创建模型实例并将数据表示为张量,我们准备开始运行模型。
将以下函数复制到 .js 文件中。
让我们来分解一下。
准备运行
我们必须在训练之前“编译”模型。 为此,我们必须明确一些非常重要的事情:
优化器:这是一种控制模型更新的算法,就像上面的例子一样。 .js 中有许多可用的优化器。 这里我们选择Adam优化器,因为它在实践中非常有效,并且不需要额外的配置。
损失函数:这是一个检测模型对每个批次(数据子集)的执行情况的函数。 在这里我们可以用来将模型做出的预测与真实值进行比较。
指标:这是我们要在每个块末尾计算的指标数组。 我们可以用它来计算整个训练集的准确性,这样我们就可以检查我们自己的运行结果。 这里我们使用mse,它是.的缩写。 这与我们用于损失函数的函数相同,也常用于回归任务。
接下来,我们选择批量大小和时间段:
指模型每次运行时将看到的数据子集的大小。 常见的批量大小通常在 32-512 之间。 对于所有问题,都不存在真正理想的批量大小。 本教程未解释描述各种批量大小的精确方法。 如果您对这些感兴趣,可以通过其他渠道了解。
指模型查看您提供的整个数据集的次数。 这里我们迭代数据集 50 次。
开始火车循环
model.fit 是我们调用来启动循环的函数。 它是一个异步函数,因此我们返回它给我们的特定值,以便调用者可以确定运行何时结束。
为了监控运行进度,我们将一些回调传递给 model.fit。 我们使用 tfvis.show。 生成绘制前面指定的损失和毫秒指标的函数。
把它们放在一起
现在我们必须调用 run 函数中定义的函数。
将以下代码添加到 run 函数的底部。
当您刷新页面时,几秒钟后您应该会看到图表正在更新。
这些是根据我们之前创建的回调创建的。 它们显示每个时期结束时的损失(在最近的批次上)和毫秒(在整个数据集上)。
当训练模型时,我们希望看到损失减少。 在这种情况下,由于我们的指标是错误指标,因此我们也希望看到它下降。
第六步:做出预测
现在我们的模型已经训练完毕,我们想要做出一些预测。 让我们通过观察模型预测的房间数量从低到高的统一范围来评估该模型。
将以下函数添加到您的 .js 文件中
上述函数中有几点需要注意。
我们生成 100 个新的“示例”来填充模型。 模型。 就是我们如何将这些示例输入到模型中。 请注意,当我们进行训练时,它们需要具有相似的形状([, of ])。
为了将数据返回到其原始范围(而不是0-1),我们使用归一化时计算的值,但只需反转操作即可。
[.(), .()];
.() 是我们可以用来获取存储在张量中的值的方法。 这允许我们在常规java中处理这些值。 这是 .data() 方法通常首选的同步版本。
最后,我们使用 tfjs-vis 绘制模型的原始数据和预测。
将以下代码添加到 run 函数中。
(模型、数据、);
刷新页面即可完成!
现在您已经学会了使用 .js 创建简单的机器学习模型。 这是供参考的存储库。
综上所述
我开始接触这些是因为机器学习的概念确实很吸引我,我想看看是否有办法在前端开发中实现它,我很高兴发现.js 库可以帮助我实现我的目标。 这只是前端开发中机器学习的开始,.js 还可以做更多的事情。 感谢您的阅读!
【阿里巴巴小程序云30问】问你的问题,解答你的困惑
中华爱心网