秒速赛车稳赚玩法deeplearnjs:在浏览器上训练神经
秒速赛车技巧-秒速赛车规律_官网-秒速赛车走势图
当前位置:主页 > 秒速赛车技巧 > 正文

秒速赛车稳赚玩法deeplearnjs:在浏览器上训练神经

  市政府每天生成并发布大量的数据和信息。本文演示了如何使用Oracle Application Express(APEX),一种基于云计算的低代码开发工具,以及Socrata Open Data API(SODA),构建一个提供纽约市NYC 311服务请求公开数据报告和图表的Web应用。

  市政府每天生成并发布大量的数据和信息。本文演示了如何使用Oracle Application Express(APEX),一种基于云计算的低代码开发工具,以及Socrata Open Data API(SODA),构建一个提供纽约市NYC 311服务请求公开数据报告和图表的Web应用。

  ATDD

  协作是敏捷方法的核心价值观之一。也就是说,您要留意如果敏捷团队中的开发人员、测试人员和业务人员之间缺乏协作,会发生什么? 本文提供了在您的项目中实现验收测试驱动开发(ATDD)的快速指南,以缓解由于缺乏协作而导致的问题。

  来自德国的软件工程师Robin Wieruch将带我们一起体验如何使用deaplearn.js在浏览器上训练神经网络。原文链接:Neural Networks in JavaScript with deeplearn.js。

  最近我写了一些文章,介绍如何使用JavaScript实现基础的机器学习算法。我基于Node的math.js从头开始实现了这些算法,但我仍然觉得使用JavaScript实现机器学习算法是一件非常复杂的事情。目前我正在自学神经网络,想找一些现成的库可以帮我完成一些任务。谷歌最近发布了deeplearn.js,可以用来训练神经网络,于是我就试用了一把。在这篇文章里,我将分享如何使用deeplearn.js训练神经网络,并用它解决真实世界的Web访问性问题。

  这篇文章里实现的神经网络可用于改进Web访问性,它会根据背景色选择恰当的字体颜色。比如,深蓝色背景的字体应该是白色的,而浅黄色背景的字体应该是黑色的。你或许会想:为什么要在这里使用神经网络?通过编程的方式来给字体设置恰当的颜色并不难啊,不是吗?我很快从Stack Overflow上找到了一个解决方案,并根据我的需求进行了修改。

  因为已经可以通过编程的方式来解决这个问题,所以似乎就没有必要使用神经网络。不过,既然已经有了编程的解决方案,那为什么不将它与神经网络解决方案的性能进行比较?GitHub上有一个动画演示了最终效果,从动画上你可以很直观地看到这篇文章将会教你做一个什么样的东西。

  如果你熟悉机器学习,秒速赛车稳赚玩法可能已经注意到,这其实是一个分类问题。它需要一个算法,根据输入数据(背景色)输出一个二元结果(字体颜色:白色或黑色)。在使用神经网络对算法进行训练之后,最终会根据输入的背景色输出恰当的字体颜色。

  机器学习的训练包括输入数据点和输出数据点(标签)。它们用来训练算法,而算法会预测输入数据点对应的输出是什么。在训练阶段,算法会调整它的权重,对输入数据点的标签进行预测。简单地说,被训练的算法就是一个函数,它接收数据点,并预测输出标签。

  通过神经网络训练得到的算法将会为新的背景色输出对应的字体颜色,而这些字体颜色值并不存在于训练数据集中。在后续可以使用测试数据集来验证算法的准确性。因为我们处理的是颜色值,所以可以很容易为神经网络生成样本数据。

  之前已经使用编程的方式来生成字体颜色,现在我们对它稍作调整,用来为训练集生成标签。我们要解决的是一个分类问题,标签对应的是RGB里的白色或黑色。所以,标签要么是表示黑色的[0,1],要么是表示白色的[1,0]。

  现在进入最激动人心的部分,我们将要使用JavaScript来实现一个神经网络。在开始之前,需要先安装deeplearn.js库。deeplearn.js是一个JavaScript神经网络框架,据官方的说法,“它是一个开源的框架,将机器学习带到Web上,可以在浏览器上训练神经网络或者在推理模式下运行预训练的模型”。这个框架为我们带来了两大好处:

  首先,它利用了本地机器的GPU来加速机器学习算法的矢量运算。这些运算与图形计算类似,所以使用GPU来计算效率更高。

  你也可以在这个方法里生成数据集,不过我只用它来规范化数据,而把数据集生成逻辑放在这个类之外。你可能会说,生成数据集的方式有很多,所以可以不在神经网络模型里事先定义。不过不管怎样,这只是个实现细节的问题。

  在机器学习里,训练阶段和推理阶段都是在一个会话(session)里进行的。首先,从deeplearn.js中导入NDArrayMathGPU类,这个类可用于在GPU上执行高效的数学运算。

  第四步,以张量的形式定义输入数据点和输出数据点的形状。张量是一组数值(或数值数组),这些数值可以有多个维度。张量可以是一个vector、一个矩阵或一个多维矩阵。神经网络将这些张量作为输入和输出。我们的这个例子有三个输入单元(每种颜色通道就是一个输入单元)和两个输出单元(二元分类:白颜色或黑颜色)。

  用于创建连接层的方法以图、变形层、新层索引和单元数量作为参数。图的层属性可用于返回一个带有名字的张量。

  第七步,声明一个成本张量。在这里,它就是均方误差。它使用训练集的目标张量(标签)和来自已训练算法的预测张量进行成本计算,以此来优化算法。

  第一个参数是学习速率(learning rate),它在线性回归或逻辑回归的梯度下降中有用到,主要用来确定算法以多快的速度收敛到最小成本。它的值可以设置得很高,不过不是必需的。否则的话,梯度下降将无法收敛,因为找不到局部最优状态。

  第二个参数是批次大小(batch size),它定义了每个迭代周期有多少数据点会经过神经网络。每个周期时间点(epoch)都包含一个前向和一个后向的数据点批次。以批次的形式来训练神经网络有两个好处。首先,它不会造成密集的计算,因为训练算法使用更少的数据点。其次,权重是根据批次来调整的,而不是根据整个训练集来调整。

  训练方法只能运行在某个时间点上,所以需要在外部进行多次迭代调用才能进行神经网络训练,而且它进行的是批次训练。为了进行多个批次的算法训练,需要多次迭代运行这个训练方法。

  基本的训练就是这样的,不过我们可以通过调整学习速率来改进训练。学习速率在刚开始时可以设置得高一些,不过随着算法不断收敛,可以逐步降低学习速率。

  在我们的例子里,学习速率每50步会降低10%。接下来,通过获取训练成本来验证它会随着时间而下降是一件很有趣的事情。我们可以在每次迭代之后把它返回,但这样会影响计算性能,因为每次发出获取成本的请求,都需要访问GPU。所以,我们只在需要验证它的时候才去获取。如果不需要获取成本,成本损失常量就设置为NONE(之前的默认值)。

版权保护: 本文由 主页 原创,转载请保留链接: http://www.ecentiv.com//html/368.html