使用Encog进行神经网络阵列模式识别 - 如何测试下一个模式?

时间:2014-10-06 11:41:52

标签: neural-network pattern-recognition encog

我正在使用Encog库来解决模式识别问题,遵循Jeff Heaton先生提供的基本示例。我有模式

1 3 5 4 3 5 4 3 1

这是我理想的输出1模式(这意味着它是100%相同) 现在我想输入另一个模式,看看它与理想模式的相似程度。

此代码用于创建网络

BasicNetwork network = new BasicNetwork();
network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, NumberOfInputNeurons));
network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, 20));
network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, 15));
network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, 1));
network.Structure.FinalizeStructure();
network.Reset();
INeuralDataSet trainingSet = new BasicNeuralDataSet(XOR_INPUT, XOR_IDEAL);

然后,我训练网络

do
{
    train.Iteration();
    Console.WriteLine("Epoch #" + epoch + " Error:" + train.Error);
    epoch++;
} while ((epoch <= 20000) && (train.Error > 0.001));

最后,我打印结果:

foreach (INeuralDataPair pair in trainingSet)
{
    INeuralData output = network.Compute(pair.Input);
    Console.WriteLine(pair.Input[0] + "-" + pair.Input[1] + "-" + pair.Input[2] + ....
            + ":   actual = " + output[0] + "   ideal=" + pair.Ideal[0]) ;
}

再次回到我的问题:

如何输入其他模式并查看它是否与我的相似?

欢迎任何可能让我找到解决方案的想法。感谢

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全遵循这一点。你有更多的模式吗?或者你的训练只设置了一种模式,你只想看看其他模式与它有多相似?神经网络并不真正比较模式之间的相似程度。训练神经网络以基于给出输入和理想向量的训练集输出一些向量。

如果你真的想将“1 3 5 4 3 5 4 3”与另一个相似的矢量进行比较,我建议只使用欧几里德距离或类似测量。

另一方面,如果您想要训练神经网络以识别某些东西与该模式有多相似,那么您将需要生成更多的训练数据。我将生成大约1000个案例,并在每个随机案例和上面的向量之间生成欧几里德距离,并将其缩放到百分比。您还需要将输入向量标准化为神经网络的0到1,以获得最佳性能。

修改

以下是我如何代表这一点。您将拥有许多输入神经元,其数量等于您可以拥有的最大x轴点数。但是,您确实需要对这些值进行标准化,因此我建议确定最大Y是什么,并将其归一化到0和该值之间。然后,对于您的输出,您将拥有一个输出神经元,用于您可以拥有的每个可能的字母。也许第一个输出神经元是A,第二个B.然后使用一个n编码并将输出神经元中的唯一一个设置为1,其余为零:

[input pattern for A] -> [1 0 0]
[input pattern for B] -> [0 1 0]
[input pattern for C] -> [0 0 1]
[another input pattern for C] -> [0 0 1]

使用以上作为训练集。当然,如果你有26个字母,那么你有26个输出。