Neural network 使用Encog的神经网络阵列模式识别——如何测试下一个模式?

Neural network 使用Encog的神经网络阵列模式识别——如何测试下一个模式?,neural-network,pattern-recognition,encog,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, NumberOfInputN

我正在使用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));
然后,我训练网络

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));
再次回到我的问题:

如何输入另一个模式并查看它是否与我的模式相似?


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

我不确定我是否完全明白这一点。你有更多的图案吗?或者你的训练集只是一个模式,你只是想看看其他模式与它有多相似?神经网络并不能真正比较模式之间的相似程度。根据给定输入和理想向量的训练集,对神经网络进行训练以输出某些向量

如果你真的想把“1 3 5 4 3 4 4 3”和另一个类似的向量进行比较,我建议你使用欧几里德距离,或者类似的度量

另一方面,如果你真的想训练神经网络来识别某个事物与该模式有多相似,你需要生成更多的训练数据。我会生成1000个左右的案例,在每个随机案例和上面的向量之间生成一个欧几里德距离,并将其缩放到一个百分比。为了获得最佳性能,您还需要将神经网络的输入向量规格化为0到1

编辑:

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

[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个输出。

谢谢你的回答,杰夫·希顿先生。让我把我的问题说得更清楚些。我有6种模式(与我提供的模式类似,但稍长一些[15-20位])。这些图案表示图形中的y轴值。因为x轴总是随着步骤1而增加,所以我不使用这些点。目标(对于第一个模式)是查看该模式与字母“M”有多相似。那么1354343实际上是点(1,1)(3,2)(5,3)(4,4)(3,5)。。。以此类推,在图上看起来像字母M。我认为这个问题可以像使用Encog解决模式识别问题一样解决,或者不解决?这比我想要的解决方案快得多。而且它非常精确。多谢各位!