【问题标题】:Neural network not learning神经网络不学习
【发布时间】:2016-07-11 03:27:28
【问题描述】:

我尝试创建一个具有 1 个隐藏层的神经网络(假设数据向量包含 4 个值,输入层有 3 个神经元,隐藏层有 3 个神经元,输出层有 1 个神经元)。我有两个具有两个已知结果的数据向量。

我使用第一组数据教授网络,然后应用第二组数据。使用反向传播方法对权重进行校正。如果我尝试在权重校正后预测第一组的值,我得到的结果与第二个结果非常接近。因此,神经网络“忘记”了第一次训练。

我的程序的完整代码在这里https://gist.github.com/edtechd/63aace5d88dee1ab6835

教学期间和教学后的权重值在这里https://gist.github.com/edtechd/7f19f0759bb808a31a3f

这里是NN训练函数

    public void Train(double[] data, double expectedResult)
    {
        double result = Predict(data);
        double delta = Perceptron.ActivationFunction(expectedResult) - Perceptron.ActivationFunction(result);
        double eta = 20;

        // Calculate layer 2 deltas
        for (int i = 0; i < size2; i++)
        {
            deltas2[i] = delta * weights3[i];
        }

        // Calculate layer 1 deltas
        for (int i = 0; i < size1; i++)
        {
            deltas1[i] = 0;

            for(int j=0; j < size2; j++) {
                deltas1[i] += deltas2[j] * weights2[j * size1 + i];
            }
        }

        // Correct layer 1 weights
        for (int i = 0; i < data.Length; i++)
        {
            for (int j = 0; j < size1; j++) 
            {
                weights1[j * data.Length + i] += eta * deltas1[j] * values1[j] * (1 - values1[j]) * data[i];
            }
        }

        // Correct layer 2 weights
        for (int i = 0; i < size1; i++)
        {
            for (int j = 0; j < size2; j++)
            {
                weights2[j * size1 + i] += eta * deltas2[j] * values2[j] * (1 - values2[j]) * values1[i];
            }
        }

        double resultA = Perceptron.ActivationFunction(result);
        for (int i = 0; i < size2; i++)
        {
            weights3[i] += eta * delta * resultA * (1 - resultA) * values2[i];
        }

    }

我错过了什么吗?

【问题讨论】:

    标签: neural-network data-analysis


    【解决方案1】:

    我已经解决了这个问题。

    在教学步骤中,我反复向网络展示第一个示例,直到结果接近预期,然后再展示第二个示例。

      A A A A A B B B B B B
    

    如果我依次重复显示两个示例,神经网络就会收敛并正确识别示例。

     A B A B A B A B A B A B
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-15
      • 2011-08-17
      • 2020-10-29
      • 2016-11-28
      • 2013-04-22
      • 2018-10-05
      • 1970-01-01
      • 2017-02-28
      相关资源
      最近更新 更多