我尝试使用神经网络(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。
作为网络,我将BackPropagationLearning与BipolarSigmoidFunction一起使用,并使用了几种配置:
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%的问题。
由于这是一个非常简单的问题,我想知道我做错了什么。我认为必须有一个具有更好结果的配置。
此问题的最佳配置是什么,为什么?
编辑:新尝试
我尝试使用神经网络(aforge-lib)解决一些简单的功能:这就是我生成数据集的方式:const int GesamtAnzahl = 200; float [,] tempData =新的float [GesamtAnzahl,2]; float minX = ...
我运行了许多随机创建的网络来解决此问题,但是没有一个结构能够可靠地“解决”该问题。