运行神经网络
现在,既然神经网络已经训练开始,我们可以通过提供输入模式给神经网络来测试它并观察结果。用于运行神经网络的方法必须首先为神经网络处理数据作好准备。目前,该神经网络处理一种训练方式中。首先,我们将从输出层删除训练员。然后,我们将用FileOutputSynapse替换训练员,以便于我们能记录来自于神经网络的输出。下面的代码实现这一点:
output.removeOutputSynapse(trainer); FileOutputSynapse results = new FileOutputSynapse(); results.setFileName(resultFile.getText()); |
现在我们必须重置输入流--我们将使用与训练期间一样的文件输入流。这将填入在神经网络训练期间使用的相同的输入。
inputStream.resetInput(); samples.resetInput(); results.setMonitor(monitor); output.addOutputSynapse(results); |
然后,我们必须重启响应于该神经网络所有的线程。
input.start(); hidden.start(); output.start(); trainer.start(); |
现在,既然线程已被重新启动,我们必须为下一步的识别设置一些基本配置信息。下面代码完成这些工作。
monitor.setPatterns(4); monitor.setTotCicles(1); monitor.setLearning(false); |
首先,输入模式数要置为4,这是因为我们想要神经网络处理所有这四种输入模式(你以前为训练该神经网络提供的)。最后,置为学习方式。这些完成后,我们可以调用监视器的"Go"方法。
monitor.Go(); |
当训练完成,你将看到输出文件产生的结果类似列表2。
列表2:来自于神经网络的输出
0.012549763955262739
0.9854631848890223
0.9853159647305264
0.01783622084836082
可以看出,上面列表中的第一行中的数字合理地接近于零。这是很好的,因为输入训练文件的第一行,如列表1所示,被预期结果是为零的。同样,第二行合理地接近于1,这也很好,因为训练文件的第二行被预期结果也是为1的。
结论
JOONE引擎封装了神经网络编程中的具有相当多的复杂性,本文的例子显示了神经网络使用的基本过程。尽管真实世界中神经网络的实现将复杂得多,但是其基本处理过程是一样的--数据被提供到神经网络用于训练,然后生成新的模式用于识别。这里的例程为用JOONE进行探索提供了一个良好的开端。