使用编码的神经网络阵列模式识别——如何测试下一个模式



我正在使用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 3 5 4 3 5 4"与另一个类似的向量进行比较,我建议你只使用欧几里得距离或类似的测量。

另一方面,如果你确实想训练神经网络来识别某个东西与该模式有多相似,你需要生成更多的训练数据。我会生成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个输出。

最新更新