首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何训练这种神经网络?

如何训练这种神经网络?
EN

Stack Overflow用户
提问于 2017-06-07 17:40:37
回答 1查看 225关注 0票数 1

我编写了一个简单的反向传播神经网络。下面是代码片段:

代码语言:javascript
复制
        for (int i = 0; i < 10000; i++)
        {

            /// i1 = Convert.ToDouble(textBox1.Text);
            //i2 = Convert.ToDouble(textBox2.Text);
            //desired = Convert.ToDouble(textBox3.Text);

            Random rnd = new Random();
            i1 = rnd.Next(0, 1);
            Random rnd1 = new Random();
            i2 = rnd1.Next(0, 1);
            if(i1 == 1 && i2 == 1)
            {
                desired = 0;
            }
            else if(i1 == 0&&i2 == 0)
            {
                desired = 0;
            }
            else
            {
                desired = 1;
            }



            //hidden layer hidden values
            h1 = i1 * w1 + i2 * w2; //i1*w1+i2*w2
            h2 = i1 * w3 + i2 * w4;//i1*w3+i2*w4
            h3 = i1 * w5 + i2 * w6;//i1*w5+i2*w6;

            //hidden layer hidden values

            //VALUE OF HIDDEN LAYER
            h1v = Sigmoid(h1);
            h2v = Sigmoid(h2);
            h3v = Sigmoid(h3);
            //VALUE OF HIDDEN LAYER            

            //output final
            output = h1v * w7 + h2v * w8 + h3v * w9;
            outputS = Sigmoid(output);
            //output final

            //BACKPROPAGATION

            //MARGIN ERROR
            Error = desired - outputS; //desired-cena jaka ma byc OutputS-zgadnienta cena

            //Margin Error

            //DElta output sum
            deltaoutputsum = Derivative(output) * Error; //output bez sigmoida i error
                                                         //Delta output sum

            //weight of w7,w8,w9.
            w7b = w7; //0.3
            w8b = w8; // 0.5
            w9b = w9;// 0.9
            w7 = w7 + deltaoutputsum * h1v; //waga w7
            w8 = w8 + deltaoutputsum * h2v; //waga w8
            w9 = w9 + deltaoutputsum * h3v; //waga w9
                                            //weights of w7,w8,w9.

            //DELTA HIDDEN SUm
            h1 = deltaoutputsum * w7b * Derivative(h1);
            h2 = deltaoutputsum * w8b * Derivative(h2);
            h3 = deltaoutputsum * w9b * Derivative(h3);
            //DELTA HIDDEN SUM

            //weights 1,2,3,4,5,6
            w1 = w1 - h1 * i1;
            w2 = w2 - h1 * i2;
            w3 = w3 - h2 * i1;
            w4 = w4 - h2 * i2;
            w5 = w5 - h3 * i1;
            w6 = w6 - h3 * i2;
            label1.Text = outputS.ToString();
            label2.Text = w1.ToString();
            label3.Text = w2.ToString();
            label4.Text = w3.ToString();
            label5.Text = w4.ToString();
            label6.Text = w5.ToString();
            label7.Text = w6.ToString();
            label8.Text = w7.ToString();
            label9.Text = w8.ToString();
            label10.Text = w9.ToString();
            //weights 1,2,3,4,5,6

        }

解决异或问题是非常简单的。但我现在不知道如何预测产量。在这里我必须提供内衣来设定权重,但是如何预测呢?它根据随机训练数据训练了10,000人。现在,当它被训练的时候,如何预测内衣呢?请帮帮忙。对不起,我的英语不太好。

h1-3是节点的权重,h1v是节点的值w1-10是权重。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-07 19:32:01

我相信你的问题在于你的训练方式。

做以下操作,我相信你的程序是正确的

  • 尝试一个接一个地训练每个数据集,而不是对连续浮点值进行随机的工作,但是当您使用XOR时,您可能会遇到这样的问题:对一组或两组值进行过多的培训(因为随机的性质)会导致问题,将wieghts移回与其他输入的XOR值一起工作的值。所以训练1,1,然后立即,1, 0,0,1,0,0,0,然后重复一遍又一遍。
  • 确保导数函数是正确的;乙状结肠的导数应该是sigmoid(x) - sigmoid(x)^2
  • 将隐藏的和值命名为不同于h1h2等的值。如果将其用于隐藏节点输入值。

如果你做了这些事情,看起来你应该有一些与“如何建立神经网络”完全相同的数学上的东西。

我还建议在循环中而不是在外部对值进行持久初始化。我可能错了,但我认为除了你的w1 w2 w3等.价值观需要在每一次训练迭代中持久化。不这样做会导致很难捕获bug并使代码更难阅读,因为您不能保证变量不会在其他地方被修改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44419408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档