精华内容
下载资源
问答
  • 基于C#的机器学习--颜色混合-自组织映射和弹性神经网络 自组织映射和弹性神经网络  自组织映射(SOM),或者你们可能听说过的Kohonen映射,是自组织神经网络的基本类型之一。自组织的能力提供了对以前不可见的输入...

    基于C#的机器学习--颜色混合-自组织映射和弹性神经网络
    自组织映射和弹性神经网络
           自组织映射(SOM),或者你们可能听说过的Kohonen映射,是自组织神经网络的基本类型之一。自组织的能力提供了对以前不可见的输入数据的适应性。它被理论化为最自然的学习方式之一,就像我们的大脑所使用的学习方式一样,在我们的大脑中,没有预先定义的模式被认为是存在的。这些模式是在学习过程中形成的,并且在以更低的维度(如二维或一维)表示多维数据方面具有不可思议的天赋。此外,该网络以这样一种方式存储信息,即在训练集中保持任何拓扑关系。

           更正式地说,SOM是一种集群技术,它将帮助我们发现大型数据集中有趣的数据类别。它是一种无监督的神经网络,神经元被排列在一个单一的二维网格中。网格必须是矩形的,例如,纯矩形或六边形。在整个迭代过程中,网格中的神经元将逐渐合并到数据点密度更高的区域。当神经元移动时,它们会弯曲和扭曲网格,直到它们更靠近感兴趣的点,并反映出数据的形状。

           在这一章中,我们将讨论以下主题:

    Kohonen SOM(自组织映射)
    使用AForge.NET
    SOM引擎
           简而言之,我们网格上的神经元,通过迭代,它们逐渐适应数据的形状(在我们的示例中,如下面的图所示,位于点面板左侧)。我们再来讨论一下迭代过程本身。

           1.第一步是在网格上随机放置数据。我们将随机将网格的神经元放在数据空间中,如下图所示:

           2.第二步是算法将选择单个数据点。

           3.在第三步中,我们需要找到最接近所选数据点的神经元(数据点)。这就成了我们最匹配的单元。

           4.第四步是将最匹配的单元移向该数据点。我们移动的距离是由我们的学习率决定的,每次迭代后学习率都会下降。

           5.第五,我们将把最匹配单元的邻居移得更近,距离越远的神经元移动得越少。你在屏幕上看到的初始半径变量是我们用来识别邻居的。这个值,就像初始学习率一样,会随着时间的推移而降低。如果您已经启动并运行了监视器,您可以看到初始学习率随着时间的推移而降低,如下面的屏幕截图所示:

           6.我们的第六步也是最后一步,是更新初始学习速率和初始半径,就像我们目前描述的那样,然后重复它。我们将继续这一进程,直到我们的数据点稳定下来并处于正确的位置。

           现在我们已经有了了一些关于SOMs的直观的认识,我们再来讨论一下我们这一章要做的事情。我们选择了一个非常常见的机制来教我们的程序,那就是颜色的映射。

           颜色本身是由红色、绿色和蓝色表示的三维对象,但是我们将把它们组织成二维。颜色的组织有两个关键点。首先,颜色被聚集成不同的区域,其次,具有相似属性的区域通常彼此相邻。

           第二个例子更高级一些,它将使用ANN(人工神经网络);这是机器学习的一种高级形式,用于创建与呈现给它的映射相匹配的组织映射。

           让我们看第一个例子。下面是我们示例的屏幕截图。正如所看到的,我们有一个随机的颜色图案,当完成时,它由一组相似的颜色组成:

           如果我们成功了,我们的结果应该是这样的:

           让我们从以下步骤开始:

           1.我们将首先进行500次迭代来实现我们的目标。使用较小的数字可能不会产生我们最终想要的混合。例如,如果我们进行500次迭代,下面是我们的结果:

           2.正如所看到的,我们离我们需要达到的目标还很远。但是我们能够更改迭代,以允许使用完全正确的设置进行试验。到了这里我们必须承认,500次的迭代远远不够,所以我把它留作练习,让你自己算出进展到哪里停止,才会让你感到满意(所以这个迭代次数是因人而异的,但可以肯定的是500次,肯定是不符合绝大多数人的要求的)

           3.在设置了迭代次数之后,我们所要做的就是确保程序拥有我们想要的随机颜色模式,这可以通过单击随机按钮来实现。有了想要的模式后,只需单击Start按钮并查看结果。

           4.一旦你点击开始,停止按钮将被激活,你可以随时停止进程。一旦达到指定的迭代次数,程序将自动停止。

           在我们进入实际代码之前,让我们看一些组织模式的屏幕截图。我们可以通过简单地更改不同的参数来实现出色的结果,我们将在后面详细描述这些参数。

           在下面的截图中,我们将迭代次数设置为3000次,初始半径为10:

           在下面的截图中,我们将迭代次数设置为4000次,初始半径为18:

           在下面的截图中,我们将迭代次数设置为4000次,初始半径为5:

           这里我们将迭代次数设为5000次,初始学习率设为0.3,初始半径设为25,如下截图所示,得到了期望的结果:

           现在让我们深入研究代码。

           在本例中,我们将使用AForge并使用DistanceNetwork对象。距离网络是只有一个距离的神经网络。除了用于SOM之外,它还用于一个弹性网络操作,这就是我们将要使用的来展示进程中对象之间的弹性连接。

           我们将使用三个输入神经元和10000个神经元来创建我们的距离网络:

        // 创建网络
        network = new DistanceNetwork(3, 100 * 100);
           当我们点击随机化颜色按钮来随机化颜色时:  

    复制代码
            /// <summary>
            /// 赋予网络随机权重
            /// </summary>
            private void RandomizeNetwork()
            {
                if (network != null)
                {
                    foreach (var neuron in (network?.Layers.SelectMany(layer => layer?.Neurons)).Where(neuron => neuron != null))
                        neuron.RandGenerator = new UniformContinuousDistribution(new Range(0, 255));

                    network?.Randomize();
                }

                UpdateMap();
            }
    复制代码
           这里需要注意的是,我们处理的随机化范围保持在任何颜色的红、绿色或蓝色特征的范围内,即0-255之间(包含0,包含255)。

           接下来,我们来看看我们的学习循环,就像这样。我们一会儿会深入研究它:

    复制代码
            /// <summary>
            /// 工作内容
            /// </summary>
            private void SearchSolution()
            {
                SOMLearning trainer = new SOMLearning(network);
                double[] input = new double[3];
                double fixedLearningRate = learningRate / 10;
                double driftingLearningRate = fixedLearningRate * 9;
                int i = 0;

                while (!needToStop)
                {
                    trainer.LearningRate = driftingLearningRate * (iterations - i) / iterations + fixedLearningRate;
                    trainer.LearningRadius = radius * (iterations - i) / iterations;

                    if (rand != null)
                    {
                        input[0] = rand.Next(256);
                        input[1] = rand.Next(256);
                        input[2] = rand.Next(256);
                    }

                    trainer.Run(input);

                    // 每50次迭代更新一次map
                    if ((i % 10) == 9)
                    {
                        UpdateMap();
                    }

                    i++;

                    SetText(currentIterationBox, i.ToString());

                    if (i >= iterations)
                        break;
                }

                EnableControls(true);
            }
    复制代码
           如果仔细观察,会发现我们创建的第一个对象是SOMLearning对象。这个对象是为正方形空间学习而优化的,这意味着它期望它所处理的网络具有与其宽度相同的高度。这使得计算网络神经元数量的平方根变得更加容易:

        SOMLearning trainer = new SOMLearning(network); 
           接下来,我们需要创建变量来保存红色、绿色和蓝色的输入颜色,从中我们将不断地随机化输入颜色,以实现我们的目标:

    复制代码
           if (rand != null)
           {
               input[0] = rand.Next(256);
               input[1] = rand.Next(256);
               input[2] = rand.Next(256);
           }
    复制代码
           一旦我们进入while循环,我们将不断地更新变量,直到我们达到所选择的迭代总数。在这个更新循环中,会发生一些事情。首先,我们将更新学习速率和学习半径,并将其存储在我们的SOMLearning对象:

        trainer.LearningRate = driftingLearningRate * (iterations - i) / iterations + fixedLearningRate;
     
        trainer.LearningRadius = radius * (iterations - i) / iterations;
     

           学习率决定了我们的学习速度。学习半径会对视觉输出产生非常显著的影响,它决定了相对于获胜神经元多少距离,需要更新的神经元数量。指定半径的圆由神经元组成,神经元在学习过程中不断更新。一个神经元离获胜神经元越近,它接收到的更新信息就越多。请注意,如果在实验中,将该值设置为零,那么只能更新获胜神经元的权重,而不能更新其他神经元的权重。

           现在我们对这个迭代进行一次训练,并将Input数组传递给它:

        trainer.Run(input); 
           让我们谈一下学习。正如我们所提到的,每次迭代都将尝试和学习越来越多的信息。这个学习迭代返回一个学习偏差,即神经元的权重和输入向量Input的差值。如前所述,距离是根据与获胜神经元之间的距离来测量的。过程如下。

           训练器运行一次学习迭代,找到获胜的神经元(权重值与Input中提供的值最接近的神经元),并更新其权重。它还会更新相邻神经元的权重。随着每次学习迭代的进行,网络越来越接近最优解。

           接下来是运行应用程序的屏幕截图。在实时调试和诊断工具中,可以看到我们是如何记录每次迭代的,更新地图时使用的颜色值,以及学习速率和学习半径。

           由于SOM是自组织的,我们的第二个例子会更加形象。它能帮助我们更好地理解幕后所发生的事情。

           在本例中,我们将再次使用AForge。并构建一个二维平面的对象,组织成几个组。我们将从一个单独的位置开始,直观地得到这些形状的位置。这与我们的颜色示例在概念上是相同的,它使用了三维空间中的点,只是这次,我们的点是二维的。可视化在map面板中,这是一个自顶向下的视图,用于查看二维空间中发生的事情,从而获得一个一维图形视图。

           起初,SOM网格中的神经元从随机位置开始,但它们逐渐被揉捏成我们数据形状的轮廓。这是一个迭代的过程,我已经在迭代过程的不同地方截屏,向大家展示了发生了什么。当然你也可以自己运行这个示例来实时查看它。

           我们将运行500次迭代来展示演进。我们将从一个空白的白色面板得到一个类似的点的面板:

           在我们点击开始按钮,我们将看到这些点开始通过移动到正确的位置来组织自己,希望这将反映出我们所指定的点:

           经过262次迭代:

           经过343次迭代:

           在完成之后,我们可以看到对象已经像我们最初创建的模式那样组织了它们自己。蓝色的点是活跃的神经元,浅灰色的点是不活跃的神经元,画的线是神经元之间的弹性连接。嗯,这有些像《黑客帝国》中的那个绿色的数据流。如果你看到足够仔细,是能够看到3D效果的。

           如果你窗体中没有显示连接和不活跃的神经元,你会看到map中的组织模式与我们的目标达到了相同的集群,对我们来说这意味着成功:

           那么这一切究竟是如何工作的呢。像往常一样,让我们来看看我们的主执行循环。正如我们所看到的,我们将使用与前面讨论的相同的DistanceNetwork和SOMLearning对象:

    复制代码
            /// <summary>
            /// 工作内容
            /// </summary>
            private void SearchSolution()
            {
                // 创建网络
                DistanceNetwork network = new DistanceNetwork(2, networkSize * networkSize);

                // 设置随机生成器范围
                foreach (var neuron in network.Layers.SelectMany(layer => layer.Neurons))
                    neuron.RandGenerator = new UniformContinuousDistribution(
                        new Range(0, Math.Max(pointsPanel.www.meiwanyule.cn/ ClientRectangle.Width, pointsPanel.ClientRectangle.Height)));

                // 创建学习算法
                SOMLearning trainer = new SOMLearning(network, networkSize, networkSize);

                // 创建map
                map = new int[networkSize, networkSize, 3];

                double fixedLearningRate = learningRate / 10;
                double driftingLearningRate = fixedLearningRate * 9;

                // 迭代次数
                int i = 0;
                
                while (!needToStop)
                {
                    trainer.LearningRate = driftingLearningRate * (iterations - i) / iterations + fixedLearningRate;
                    trainer.LearningRadius =www.fenghuang1999.com        (double)learningRadius * (iterations - i) / iterations;

                    // 开始纪元的训练
                    trainer.RunEpoch(trainingSet);
                    
                    UpdateMap(network);
                    
                    i++;

                    // 设置当前迭代的信息
                    SetText(currentIterationBox, i.ToString());

                    // stop ?
                    if (i www.boyunylpt1.com>= iterations)
                        break;
                }

                // 启用设置控件
                EnableControls(true);
            } 
    复制代码
     

           正如我们前面提到的,LearningRate和LearningRadius在每次迭代中都在不断发展。这一次,让我们来谈谈训练器的RunEpoch方法。这个方法虽然非常简单,但其设计目的是获取一个输入值向量,然后为该迭代返回一个学习偏差(正如我们现在看到的,有时也称为epoch)。它通过计算向量中的每个输入样本来实现这一点。学习误差是神经元的权值和输入之间的绝对差。这种差异是根据获胜神经元之间的距离来测量的。如前所述,我们针对一个学习迭代/历元运行此计算,找到获胜者,并更新其权重(以及邻居权重)。应该指出的是,当说赢家时,指的是权重值与指定输入向量最接近的神经元,也就是给网络输入的最小距离。

           接下来,将重点介绍如何更新映射本身;我们计算的项目应该与初始输入向量(点)匹配:

    复制代码
            private void UpdateMap(DistanceNetwork network)
            {
                // 得到第一层
                Layer layer = network.Layers[0];

                // 加锁
                Monitor.Enter(this);

                // 遍历所有神经元
                for (int i = 0; i < layer.Neurons.Length; i++)
                {
                    Neuron neuron = layer.Neurons[i];

                    int x = i % networkSize;
                    int y = i / networkSize;

                    map[y, x, 0] = (int)neuron.Weights[0];
                    map[y, x, 1] =www.gcyL157.com (int)neuron.Weights[1];
                    map[y, x, 2] = 0;
                }

                // 收集活动的神经元
                for (int i = 0; i < www.fengshen157.com/ pointsCount; i++)
                {
                    network.Compute(trainingSet[i]);
                    int w = network.GetWinner();

                    map[w / networkSize, w % networkSize, 2] = 1;
                }

                // 解锁
                Monitor.Exit(this);
                
                mapPanel.Invalidate();
            }
    复制代码
     

           从这段代码中可以看到,我们得到了第一层,计算了所有神经元的map,收集了活动神经元,这样我们就可以确定获胜者,然后更新map。

           我们确定获胜者的过程,实际上就是寻找权重与网络输入距离最小的神经元,就是这么简单,一定不要把简单的问题复杂化,就好像那个雨滴与硕士博士教授的笑话一样。

    总结
           在这一章中,我们学习了如何利用SOMs和弹性神经网络的力量。现在我们已经正式从机器学习跨入了神经网络的阶段。

    展开全文
  • 文章目录人工神经网络的最大弹性摘要背景知识人工神经网络的算术编码扰动界限启发式问题编码实现和评估总结 人工神经网络的最大弹性 作者:Chih-Hong Cheng, Georg Nuhrenberg, and Harald Ruess 单位:慕尼黑工业...

    人工神经网络的最大弹性

    作者:Chih-Hong Cheng, Georg Nuhrenberg, and Harald Ruess

    单位:慕尼黑工业大学

    文献来源:Cheng, C.-H., Nuhrenberg, G., and Ruess, H. Maximum resilience of artificial neural networks. In International Symposium on Automated Technology for Verification and Analysis, pp. 251–268. Springer, 2017.

    摘要

      本文将基于人工神经网络的分类器的弹性定义为可容忍的最大扰动输入量。计算神经网络最大扰动域的问题被简化为求解混合整数规划(Mixed Integer Progamming, MIP)问题。许多MIP启发式编码方法被提出,大大减少MIP求解器的运行时间,并且在我们的实验中,使用MIP求解器的并行化导致计算核心数量几乎线性增加(达到一定的限制)。我们通过计算大量人工神经网络基准集的最大弹性边界来证明我们方法的有效性和可扩展性,这些基准集从典型的图像识别场景到机器人的自主操纵。

    背景知识

    大M法:

    在MIP简化过程中,本文使用大M法的一个变种来将许多非线性表达式线性化。

    在约束条件中人为地加入非负的人工变量,以便使它们对应的系数列向量构成单位阵。由于M是充分大的正数,在极大化目标函数的过程中,就会迫使人工变量离基。

    举例:
    在这里插入图片描述
    [111100021101100310001] \left[\begin{array}{cccc} 1 & 1 & 1 & 1 & 0 & 0 & 0 \\ -2 & 1 & -1 & 0 & -1 & 1 & 0\\ 0 & 3 & 1 & 0 & 0 & 0 & 1 \end{array}\right]

    前馈神经网络:
    在这里插入图片描述

    一个四层的小型前馈网络结构,每一层都有不同类型的节点函数。

    sofmax函数:

    为了进行多类分类,输出层的输出通常通过softmax函数转换成概率分布,softmax函数可以把一些输入映射为0-1之间的实数,并且归一化保证和为1。
    在这里插入图片描述
    sofmax函数的形式,首先转化到指数函数上,这样保证了概率的非负性。将转化后的结果除以所有转化后结果之和,可以理解为转化后结果占总数的百分比。
    在这里插入图片描述

    人工神经网络的算术编码

    我们考虑了ReLU、max-pooling和softmax等函数。

    编码ReLU激活函数:这里的非线性部分大M法进行处理,引入了一个二进制整数变量bi(l)b_i^{(l)}和一个正的常数Mi(l)M_i^{(l)},使得Mi(l)imi(l)-M_i^{(l)}≤im_i^{(l)}xi(l)Mi(l)x_i^{(l)}≤M_i^{(l)}
    在这里插入图片描述
    编码Max-Pooling函数:该函数可写为xi(l)=max(im1,im2)x_i^{(l)}=max(im_1,im_2),其中im1=max(xj1(l1),xj2(l1))im_1=max(x_{j1}^{(l-1)},x_{j2}^{(l-1)})im2=max(xj3(l1),xj4(l1))im_2=max(x_{j3}^{(l-1)},x_{j4}^{(l-1)})。将max(x1x2)max(x_1,x_2)函数编码为MIP约束是使用大M法引入三个二进制整数变量来编码y=max(x1x2)y = max(x_1,x_2)来实现的。

    编码softmax函数:softmax定义中的指数函数无法编码成线性MIP约束。然而,如果要分析的属性不考虑来自神经元的输出具体值,而只考虑比率排序,那么省略输出层的构造就好了,并且可以用xi(L1)x_i^{(L-1)}来替代xi(L)x_i^{(L)}来重写属性。
    在这里插入图片描述

    扰动界限

    m类分类器的最大扰动域:

    对于可将结果分为m类的分类器,我们允许每个输入aia_i有一个小的扰动ϵi\epsilon_i,其扰动的全局值就是每个扰动的绝对值之和,即ϵ1+ϵ2++ϵd|\epsilon_1|+|\epsilon_2|+…+|\epsilon_d|
    在这里插入图片描述
    人工神经网络的扰动域:

    基于上述m类分类器的最大扰动域的解释,寻找最小扰动值的过程可编码为如下形式:
    在这里插入图片描述
    现在要把上面的优化问题转换为一个MIP问题,需要考虑的问题主要由三个:

    (1)由于绝对值函数的引入,目标不是线性的;

    (2)softmax函数带来的非线性:

    (3)条件约束中存在的析取符号。
    在这里插入图片描述

    启发式问题编码

    为了验证人工神经网络,我们列出了一些简单但重要的启发式方法来有效地解决MIP问题。

    (1)通过回顾多层的小型大M法;

    (2)分支优先级;

    (3)从样本和求解器初始化生成约束。

    实现和评估

    我们用C++实现了一个验证和计算神经网络扰动域的实验平台,该平台基于IBM CPLEX Optimization Studio 12.7(学术版)进行MIP求解。我们使用了三个不同的基准集作为我们评估的基础:(1)数字识别的Mnist;(2)代理游戏;(3)深度交通用于模拟高速公路超车场景。这些基准分别用IMNISTI_{MNIST}IAgentI_{Agent}IdeeptrafficI_{deeptraffic}表示。
    在这里插入图片描述
    单个输入实例上验证扰动问题的执行时间
    在这里插入图片描述
    计算最大弹性Φm\Phi_m的计算时间和结果

    总结

      本文使用基于MIP的优化来定义和计算神经网络的最大扰动域是新颖的。通过开发专门的启发式编码方法和使用并行化,我们展示了该神经网络验证方法在现实世界应用中的可扩展性和可能的适用性。尽管如此,我们认为本文的发展只是实现人工神经网络形式化验证技术的全部潜力的第一步,以后可将其用于验证新的安全关键功能,如自动驾驶汽车。

    展开全文
  • 根据大坝实测位移资料,应用模糊神经网络反演坝体和坝基的弹性模量,其中两种水位下的位移的水压分量差值作为网络输入矢量,待求的坝体和坝基的弹性模量作为网络输出矢量.计算结果表明,应用模糊神经网络反演大坝弹性...
  • 基于BP神经网络组合套筒的粘弹性分析,高郁斌,李海滨,粘弹性材料有很强的非线性,基于广义Kelvin模型,给出了粘弹性材料的微分本构关系式。结合粘弹性组合套筒边界条件,本文推导了套筒
  • 里面有附加动量法反向传播网络训练程序,自适应学习及弹性bp算法等,适用于神经网络控制入门.
  • 基于自定义神经网络的粘弹性材料松弛模量拟合,贺云,李海滨,利用自定义神经网络模型对广义Maxwell模型的松弛模量进行拟合。工程实际中的粘弹性材料本构关系较复杂,通常采用Prony级数对实验数据
  • 基于弹性动量深度学习神经网络的果体病理图像识别,设计了深度学习神经网络的 果蔬果体病理图像识别方法,基于对网络误差的传播分析,提出弹性动量的参数学习方法,以苹果为例进行果体病理图像的识别试验。
  • 弹性形状记忆合金循环特性的BP神经网络模型,任文杰,贾茹,超弹性形状记忆合金的滞回性能在循环加卸载中逐渐变化。现有的循环本构模型具有参数确定困难和预测精度不高的缺陷。本文对超弹性
  • SynergyFlow:支持大规模深度神经网络批处理的弹性加速器体系结构
  • _弹性_BP神经网络在识别带有噪声字母中的应用.pdf
  • 基于L-M算法的复数神经网络方法拟合粘弹性材料复模量,贺云,李海滨,针对固体火箭发动机药柱粘弹性材料的本构关系复杂,复模量难以有效拟合的问题,本文提出了一种基于L-M算法的复数神经网络拟合粘弹
  • 论文研究-基于神经网络弹性分析的因素分析法及其应用.pdf,
  • GNES [ jee-nes ]是通用神经弹性搜索,这是一种基于深度神经网络的云原生语义搜索系统。 GNES支持对文本到文本,图像到图像,视频到视频以及任何内容的任何形式的大规模索引和语义搜索。 强调 :cloud_selector: ...
  • 多层神经网络的隐层大多采用sigmoid型传递函数,这类函数又称为“挤压”函数。因为它们将没有边界限制的输入信号压缩到有限的输出范围内,当输入量很大或很小时,输出函数的斜率接近于0。那么当应用梯度下降法训练...

    多层神经网络的隐层大多采用sigmoid型传递函数,这类函数又称为“挤压”函数。因为它们将没有边界限制的输入信号压缩到有限的输出范围内,当输入量很大或很小时,输出函数的斜率接近于0。那么当应用梯度下降法训练多层网络时,其梯度数量级会很小,从而使得权值和阈值的调整范围很小,也就是说即使没有达到最优值,也会形成训练停止的结果。
    弹性梯度下降法就能够消除这种影响。应用弹性梯度下降法训练BP网络时,权值修正取决于表现函数导数的正负号,而导数的数量级对权值修正并没有影响。其原理是:权值变化的大小由不同的修正值决定。当前两次训练时导数的正负号没有改变,权值和阈值的修正值随着参数delt_inc增加;当前两次训练时导数的正负号有改变,权值和阈值的修正值随着参数delt_dec减小;如果导数为0,则修正值不变。这样调整的结果是,权值的变化呈振荡趋势,不过权值变化量逐步减小了。如果权值变化连续几次都在同一个方向,则增加权值变化的量级。

    展开全文
  • 1955年在美国的阿拉莫斯实验室的三名著名的物理学家费米(E.Fermi),帕斯塔(J.Pasta)和乌莱姆(S.Ulam)为了验证能量均分定理,将64个质点用弹簧联结,对少数质点...模仿这个实验做了一个64层每层1个节点的神经网...

    1955年在美国的阿拉莫斯实验室的三名著名的物理学家费米(E.Fermi),帕斯塔(J.Pasta)和乌莱姆(S.Ulam)为了验证能量均分定理,将64个质点用弹簧联结,对少数质点进行激发,看看是否能量是否会均衡的分布到每个质点上。

    但意外的是长时间以后能量几乎全部回到了初始的少数质点上。这个结果表明这个非线性系统可以出现孤立波。这就是著名的FPU问题。

    模仿这个实验做了一个64层每层1个节点的神经网络,1*1…*1,画成图如下





    X0初始化sigmoid(0.9),

    所有权重w[63][0]都初始化为0.02,

    激活函数是sigmoid

    反向传导的方法让左右两边的x相等

    差值的计算方法

    for(int a=0 ;a<2;a++){					
    d=x[a][0]*( x[a+1][0]-x[a+2][0] );				
    }
    
    
    for(int a=2 ;a<r-2 ;a++){					
    d=x[a][0]*( x[a+1][0]-x[a+2][0] )+x[a][0]*( x[a-1][0]-x[a-2][0] );
    }
    
     
    for(int a=r-2 ;a<r-1;a++){
    d=x[a][0]*( x[a-1][0]-x[a-2][0] );
    }

    分别迭代了500次,1000次,2000次,5000次,1万次,10万次,100万次

    将得到的x[64][0]的值画出来




    可以开到一个波包随着迭代次数的增加向右移动







    如果把凹陷看作是波,可以看到这个波在向左移动



    孤立子有4种类型,波包,凹陷,左扭结,右扭结.随着迭代次数的增加这个波包的波长逐渐增大,到迭代100万次的时候图像看起来像右扭结。

    如果这64个神经网络的节点看作是水分子,上面的图像不就是水面上的孤波子吗?

     

    具体数据















    展开全文
  • 2019年4月12日神经网络为什么可以实现分类?---三分类网络0,1,2与弹性振子力学系统的数据
  • NLP:神经网络

    2020-06-22 17:21:20
    使用最广泛的三种主要的神经网络是:循环神经网络、卷积神经网络和递归神经网络。 循环神经网络(RNNs)循环神经网络是处理 NLP 中普遍存在的动态输入序列的一个最佳的技术方案。Vanilla RNNs (Elman,1990)很快被...
  • 在2011年,谷歌开发了一个内部深度学习基础设施叫做“DistBelief”,这个设施允许谷歌人创建更大的神经网络和扩容实训成千上万个核心。最近几年,谷歌引进了TensorFlow,也就是它的二代机器学习系统。TensorFlow的...
  • R语言神经网络

    千次阅读 2019-07-06 17:51:26
    R语言中已经有许多用于神经网络的package。例如nnet、AMORE以及neuralnet,nnet提供了最常见的前馈反向传播神经网络算法。 AMORE包则更进一步提供了更为丰富的控制参数,并可以增加多个隐藏层。 neuralnet包的改进...
  • R语言神经网络

    万次阅读 多人点赞 2016-09-19 08:33:26
    R语言 神经网络 neuralnet包,AMORE包,nnet包,Rsnns包,BP神经网络,nnet提供了最常见的前馈反向传播神经网络算法。 AMORE包则更进一步提供了更为丰富的控制参数,并可以增加多个隐藏层。 neuralnet包的改进在于...
  • 本文制作了一个三分类的网络来分类mnist数据集的0,1,2.并同时制作了一个力学模型,用来模拟这个三分类的过程,并用这个模型解释分类的原理。 上图可以用下列方程描述 只要ωx0,ωx1,ωx2,ωx012这四个数...
  • 不同单元弹性模量的下降模拟不同损伤出现的位置,同一单元,弹性模量不同的下降百分比模拟此处不同的损伤程度。分别计算出损伤量为0%(无损伤),3,7,9,13,16,19单元损伤量分别为100/0,300/0,50%,70%,80%时...
  • R的神经网络

    2016-08-28 21:38:13
    nnet是前馈反向传播神经网络算法,而AMORE包则更进一步提供了更为丰富的控制参数,并增加多个隐藏层,neuralnet的改进提供了弹性反向传播算法。 R的自然语言处理包 emu,wordnet,KEA,openNLP,RWeka,Snowball,Rstem,...
  • 训练方法训练函数梯度下降法traingd有动量的梯度下降法traingdm自适应lr梯度下降法traingda自适应lr动量梯度下降法traingdx弹性梯度下降法trainrpFletcher-Reeves共轭梯度法traincgfPloak-Ribiere共轭梯度法...
  • 从图嵌入算法到图神经网络

    千次阅读 多人点赞 2019-08-13 15:12:25
    依托高度弹性的参数结构,线性与非线性的矩阵变换,神经网络能适用于各式各样的数学场景,在各个类别的应用上我们都能看到神经网络的影子。其中著名的应用方向,包括自然语言处理、计算机视觉、机器学习、生物医疗、...
  • 神经网络输出的大小-1(弹性系数)。 采样元素的数量-N = 125000 = 50个k的不同值* 50个v的不同值* t0的50个不同值(在给定段上均等选择值)。 环境 R版本4.0.3(“兔子小熊怪异”) NET 5.0的C#9.0 组件 Dat
  • 摘要 摘 要 在当今社会聚类分析是人们处理各种数据挖掘问题的重要途径之一神经网络具 有自学习高速寻找优化解等优点运用神经网络算法求解聚类问题是近年来的研究热 点 弹性网络算法ENA是一种强大的神经网络算法具有...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 174
精华内容 69
关键字:

弹性神经网络