首页 > 解决方案 > 对于特定数据集,神经网络的工作配置是什么(层数、学习率等)?

问题描述

我尝试用神经网络(aforge-lib)解决一些简单的功能:

这就是我生成数据集的方式:

const int GesamtAnzahl = 200;
float[,] tempData = new float[GesamtAnzahl, 2];
float minX = float.MaxValue;
float maxX = float.MinValue;

Random rnd = new Random();
var granzen = new List<int>() 
{
    rnd.Next(1, GesamtAnzahl-1),
    rnd.Next(1, GesamtAnzahl-1),
    rnd.Next(1, GesamtAnzahl-1),
    rnd.Next(1, GesamtAnzahl-1),
};
granzen.Sort();

for (int i = 0; i < GesamtAnzahl; i++)
{

    var x = i;
    var y = -1;
    if ((i > granzen[0] && i < granzen[1]) ||
        (i > granzen[2] && i < granzen[3]))
    {
        y = 1;
    }
    tempData[i, 0] = x;
    tempData[i, 1] = y;
}

所以这很容易:如果输入在 2 个较低的随机生成的“边界”之间或在 2 个较高的数字之间,则输出为 1。否则输出为 1。

输入值是介于 -1 和 1 之间的标准值。所以 0 是 -1,200 是 1。

作为一个网络,我使用了带有 BipolarSigmoidFunction 的 BackPropagationLearning 和几个配置,例如:

Learning Rate: 0,1
Momentum: 0
Sigmoids alpha value: 2
Hidden Layer 1: 4 neurons
Hidden Layer 2: 2 neurons


Learning Rate: 0,1
Momentum: 0
Sigmoids alpha value: 2
Hidden Layer 1: 4 neurons
Hidden Layer 2: 2 neurons
Hidden Layer 3: 2 neurons


Learning Rate: 0,2
Momentum: 0
Sigmoids alpha value: 2
Hidden Layer 1: 4 neurons
Hidden Layer 2: 2 neurons
Hidden Layer 3: 2 neurons

等等。他们都没有工作。如此处所述:https ://towardsdatascience.com/beginners-ask-how-many-hidden-layers-neurons-to-use-in-artificial-neural-networks-51466afa0d3e应该足以拥有 2 个隐藏层。第一个有 4 个神经元,第二个有 2 个。

效果最好的配置是:

Learning Rate: 0,01
Momentum: 0
Sigmoids alpha value: 2
Hidden Layer 1: 4 neurons
Hidden Layer 2: 4 neurons
Hidden Layer 3: 4 neurons

Learning Rate: 0,02
Momentum: 0
Sigmoids alpha value: 2
Hidden Layer 1: 4 neurons
Hidden Layer 2: 2 neurons

这解决了大约 50% 的问题。

由于这是一个非常简单的问题,我想知道我是否做错了什么。我认为必须有一个具有更好结果的配置。

这个问题的最佳配置是什么,为什么?

编辑:新尝试

标签: c#neural-networkaforge

解决方案


我运行了很多随机创建的网络来解决这个问题,但是没有一个结构能够可靠地“解决”这个问题。

当然,其中一些能够解决一次,其中一些甚至两次,但只有一个解决了 3 次:

  • 学习率:0,510141694690167
  • 动量:0,962972165068133;
  • 层数/神经元数:2 (14, 9)
  • 西格蒙德阿尔法值:2;

推荐阅读