用Java开源项目JOONE实现人工智能编程(3)

2008-06-30 16:10

文/朱先忠编译

    运行神经网络
  现在,既 然神经网络已经训练开始,我们可以通过提供输入模式给神经网络来测试它并观察结果。用于运行神经网络的方法必须首先为神经网络处理数据作好准备。目前,该 神经网络处理一种训练方式中。首先,我们将从输出层删除训练员。然后,我们将用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进行探索提供了一个良好的开端。