📅  最后修改于: 2021-01-11 10:28:04             🧑  作者: Mango
TensorFlow Playground是一个用d3.js (JavaScript)编写的Web应用程序。而且它是学习无数学的神经网络(NN)的最佳应用程序。在我们的Web浏览器中,我们可以创建一个NN(神经网络)并立即查看我们的结果。它是根据2004年1月的Apache许可2.0许可的( http://www.apache.org/licenses/ )。
丹尼尔·斯米尔科夫(Daniel Smilkov)和珊·卡特(Shan Carter)创造了它,并基于许多先前的作品。其贡献成员包括Fernanda Viegas和Martin Wattenberg ,以及Big Picture和Google Brain团队,以提供反馈和指导。
TensorFlow Playground是一个网络应用程序,允许用户使用TensorFlow机器学习库测试人工智能(AI)算法。
TensorFlow Playground不熟悉用于深度学习和其他机器学习应用程序的高级数学和神经网络编码。神经网络操作是交互式的,并在游乐场中表示。
开源库旨在满足教育需求。
现在转到链接http://playground.tensorflow.org 。
该网站的顶部是时代,学习率,激活率,正则化率,问题类型,下面逐一描述。
每次针对训练集进行训练时,纪元数都会增加,如下所示。
学习速度决定学习的速度;因此,我们需要选择适当的学习率。
节点的激活函数定义该节点或数据集的输出。标准的计算机芯片电路可以是激活功能的数字网络,根据其输入,激活函数可以是“ ON”(1)或“ OFF”(0)。
正则化用于避免过度拟合。
TensorFlow游乐场实现两种类型的正则化:L1,L2。
正则化可以增加或减少牢固或较弱连接的权重,以使模式分类更清晰。
L1和L2是流行的正则化方法。
辍学也是一种正则化方法。
较高的正则化率将使权重范围受到更大限制。
在问题类型中,从以下两种问题中选择:
我们必须根据在此指定的数据集来了解要解决的问题类型。根据我们在下面定义的数据集进行求解。
总的来说,有四种类型的分类,下面给出了两种存在的回归问题。
在这里,蓝色和橙色点形成数据集意味着
橙色点的值为-1。蓝点值为+1
使用测试数据的训练比率,可以在此处使用控制模块控制训练集的百分比。
例如:如果是50%,则点与它的相同,因为这是它的默认设置,但是如果我们将控件更改为10%。然后,我们可以看到那里的点变得不再像给定的数字那样多了。
数据集的噪声级别可以控制。我们可以使用控制模块来做到这一点。随着噪声的增加,数据模式变得更加不可靠。当噪声为零时,则可以清楚地区分问题。但是,通过将其增加到50,我们可以看到蓝色点和橙色点混合在一起,并强加了分配。
批次大小决定了每次训练迭代要使用的数据速率,我们根据以下屏幕截图进行控制。我们可以使用下面的方法控制它。
现在,我们需要选择功能。功能选择将使用此处给出的x1和x2;
x1和x2-的示例点的近似x1值为3.1,x2值为4,就像我们在下图中看到的那样。
隐藏层的结构在下面列出,其中最多可以设置六个隐藏层。如果要通过添加隐藏层来控制隐藏层的数量,请单击加号。而且我们还可以在每个隐藏的工作表中最多添加八个神经元,并通过单击加号将神经元添加到隐藏层来对其进行控制。
通过按箭头按钮,开始NN(神经网络)训练,其中Epoch将增加1,然后使用反向传播训练神经网络。如果我们需要刷新整体实践,则可以通过单击刷新按钮来做到这一点。
NN(神经网络)使测试损失和训练损失最小化。测试损失和训练损失的变化将以小的性能曲线表示,该曲线将位于下面的右侧。测试损失将具有白色的性能曲线,而训练损失将具有灰色的性能曲线。如果损失减少,则曲线将下降。
神经网络模型或感知器是称为神经元的简单组件网络,这些组件接收输入,并根据数据更改其内部状态。并根据数据和激活来产生输出(0和1)。我们只有一个输入和输出,充其量只有最易访问的神经网络(称为浅层神经网络)中的一个隐藏层。
橙色和蓝色用于可视化的方式有所不同,但真正的橙色显示负值,蓝色显示正值。
数据点被涂成橙色或蓝色,分别对应于一个正数和一个负数。
在隐藏层中,这些线由神经元之间的连接权重来着色。蓝色显示实际重量,橙色显示负重量。
在输出层中,根据原始值,点的颜色为橙色或蓝色。背景颜色显示网络对特定区域的预测。
我们可以从隐藏层中单个神经元的基本模型(浅层神经网络)开始。让我们选择数据集“圆”,“ X1”和“ X2”,0.03学习率和“ ReLU”刺激。
我们将按下运行按钮,等待一百个纪元的完成,然后单击“暂停”。
完成100个纪元后,训练损失和测试均大于0.4。现在,我们将使用添加按钮在隐藏层中添加四个神经元,然后再次运行。
现在,我们的测试和训练损失为0.02,并且输出可以很好地分为两类(橙色和蓝色)。隐藏层中神经的添加提供了分配不同权重和并行计算的灵活性。但是,在一定程度上添加神经元将是昂贵的,几乎没有好处。
在神经网络中,我们将非线性激活函数用于分类问题,因为我们的输出标签介于0和1之间,其中线性激活函数可以提供-∞到+∞之间的任何数字。结果,输出将不会在任何时候收敛。
在上面的图中,我们运行了相同的模型,但是线性激活,并且它没有收敛。 100个纪元后,测试和培训效率大于0.5。
现在,我们再添加一个具有双神经元的隐藏层,然后按运行按钮。与任何单个隐藏层模型相比,我们的测试和准确性仅在50个纪元内降低到0.02以下,几乎降低了一半。与神经元相似,添加隐藏层并不是在所有情况下的正确选择。它变得昂贵而没有增加任何好处。图片中对此进行了很好的解释。即使运行100个纪元,我们也无法取得良好的结果。
为什么ReLU激活是所有隐藏层的绝佳选择,因为如果z为正数,则导数为1 ;当z为负数时,导数为0。
我们将运行训练的不同激活函数(ReLU,Sigmoid,tanh和线性),我们将看到影响。
整流线性单位(ReLU)是所有隐藏层的最佳选择,因为如果z为正,则其导数为1,而当z为负时,其导数为0。换句话说,由于z很大或很小,因此S型和tanh函数都不适合隐藏层。然后,任务的范围变得非常小,从而减慢了梯度下降的速度。
在上图中,很明显ReLU优于所有其他激活功能。 Tanh在我们选择的数据集上表现很好,但效率不如ReLU函数。这是ReLU在深度学习中如此盛行的主要原因。
所有可用功能都无法帮助您对问题进行建模。使用所有功能或不相关的功能将很昂贵,并可能影响最终精度。在现实生活中的应用程序中,要找出哪种方法最适合该问题需要花费大量的反复试验。我们将在模型中探索不同的功能。