我正在使用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]) ;
}
再次回到我的问题:
如何输入其他模式并查看它是否与我的相似?
欢迎任何可能让我找到解决方案的想法。感谢
答案 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个输出。