几天来,我一直在努力让 Encog 继续前进。
我的数据包含 4 个输入变量(介于 1 和 1000 之间)和 1 个输出变量(介于 -30 和 30 之间)。我正在使用大约 50,000 行数据进行训练。
数据经过标准化(tanh 激活函数在 -1 和 1 之间),然后将其传递到具有以下结构和训练的神经网络:
Network.AddLayer(new BasicLayer(null, true, 4));
Network.AddLayer(new BasicLayer(new ActivationTANH(), true, 8));
Network.AddLayer(new BasicLayer(new ActivationTANH(), false, 1));
Network.Structure.FinalizeStructure();
Network.Reset();
IMLDataSet trainingData = new BasicMLDataSet(Input.ToArray(), ExpectedOutput.ToArray());
IMLTrain train = new ResilientPropagation(Network, trainingData);
int epoch = 1;
do
{
train.Iteration();
Console.WriteLine(@"Epoch #" + epoch + @" Error:" + train.Error);
epoch++;
} while (train.Error > 0.024);
然后程序输出每一行的预期输出以及神经网络的实际输出。这是输出的屏幕截图(几行):http: //i.imgur.com/UVWCOis.png
如您所见,在打印此输出之前,误差(即所有行的神经网络的平均误差)必须低于 0.024。但是许多预期和实际输出都存在大量错误。
我相信神经网络对传播不够敏感。看起来神经网络的实际输出都非常接近,我相信因为它们与初始随机权重相差不远。
谁能建议我如何解决这个问题?
我尝试过减小输入的大小(我使用了 50 个),我还尝试过消除偏差,这两者都导致了类似的结果。