使用Encog Machine Learning Framework,我创建了一个NN来识别简单的序列模式。以下是我的RNN的配置:
var elmanNetworkPattern = new ElmanPattern {ActivationFunction = new ActivationTANH(),InputNeurons = 6};
elmanNetworkPattern.AddHiddenLayer(6);
elmanNetworkPattern.OutputNeurons = 1;
IMLMethod elmanNetwork = elmanNetworkPattern.Generate();
以下是培训数据集:
a b c d e f output
-----------------------------------
1 2 3 4 5 6 7
1 2 3 4 5 6 8
1 2 3 4 5 6 9
1 2 3 4 5 6 10
1 2 3 4 5 6 12
1 2 3 4 5 6 13
1 2 3 4 5 6 86
按照以下标准进行标准化后,标准化的csv如下所示:
encoganalyst.Script.Normalize.NormalizedFields[i].NormalizedHigh = 1;
encoganalyst.Script.Normalize.NormalizedFields[i].NormalizedLow = -1;
encoganalyst.Script.Normalize.NormalizedFields[i].ActualHigh = 100;
encoganalyst.Script.Normalize.NormalizedFields[i].ActualLow = 0;
encoganalyst.Script.Normalize.NormalizedFields[i].Action = NormalizationAction.Normalize;
a b c d e f output
-------------------------------------------------------------
-0.98 -0.96 -0.94 -0.92 -0.9 -0.88 -0.86
-0.98 -0.96 -0.94 -0.92 -0.9 -0.88 -0.84
-0.98 -0.96 -0.94 -0.92 -0.9 -0.88 -0.82
-0.98 -0.96 -0.94 -0.92 -0.9 -0.88 -0.8
-0.98 -0.96 -0.94 -0.92 -0.9 -0.88 -0.76
-0.98 -0.96 -0.94 -0.92 -0.9 -0.88 -0.74
-0.98 -0.96 -0.94 -0.92 -0.9 -0.88 0.72
成功训练没有数据集中的最后一行时,当给定1到6之间的序列时,NN成功地产生7到13之间的平均值作为输出(即-0.79)。但是,在训练最后一行(其作用类似于噪声),序列预测变化并产生输出(即-0.19)。
我想要的是,由于数据集中有更多记录指向输出的范围为-0.74和-0.86,因此NN必须优先生成该范围内的输出。
有没有什么方法可以教会网络忽略数据集中的这种噪音,或者产生最接近所需可能范围的输出。
我正在查看本文here,他们从SOM向RNN提供输入以减少数据集中的噪音,但我无法找到在我的场景中实现它的方法。