谁说JAVA不适合做神经网络,那来看看Encog这款框架吧( 二 )


谁说JAVA不适合做神经网络,那来看看Encog这款框架吧

文章插图
 
上图中:输入神经元为I1, I2 。输出神经元为O1 。隐藏神经元为H1, H2 。偏执神经元为B1, B2
使用代码实现XOR运算构造神经网络:使用Encog构建一个神经网络特别简单,首先需要new 一个BasicNetwork对象,然后往这个对象里面添加层就可以了 。BasicLayer构造函数第一个参数指定激活函数,第二个参数指定是由有偏置神经元,第三个参数指定神经元个数,如果只传一个数字,则表示只指定神经元个数,而默认激活函数为ActivationSigmoid,有偏置神经元 。
谁说JAVA不适合做神经网络,那来看看Encog这款框架吧

文章插图
 
因为偏执神经元影响的是下一层,以及激活函数影响的是前一层的数据 。所以一般第一层(输入层)不需要激活函数,最后一层(输出层)不需要偏置神经元 。调用finalizeStructure表示已经构建完成,不需要在往里面添加层了,reset是随机初始化各层之间的连接权重 。
处理数据:
  1. 准备好输入数据和我们期望输出的数据
  2. 构造一个MLDataSet对象训练集,我们将我们的训练数据传给它 。

谁说JAVA不适合做神经网络,那来看看Encog这款框架吧

文章插图
 
使用弹性传播(RPROP)训练:我们在这个使用弹性传播训练(RPROP)来训练我们的网络, RPROP是Encog所支持的最好的训练算法,当然,Encog还提供了其他训练技术,并且在一定的训练技术下能较好地解决某些问题 。使用RPROP训练的代码如下:
谁说JAVA不适合做神经网络,那来看看Encog这款框架吧

文章插图
 
上面的代码通过多次的迭代,当迭代到使神经网络的错误率低于1%的时候,神经网络训练就结束了 。到了这里,我们可以运行我们的代码看看训练的结果:
谁说JAVA不适合做神经网络,那来看看Encog这款框架吧

文章插图
 

谁说JAVA不适合做神经网络,那来看看Encog这款框架吧

文章插图
 
可以看到,在第一次迭代的时候错误率很大,然后随着迭代次数的增加,当迭代到一百次左右的时候,错误率已经降低到0.01了 。注意这里每次的运行结果都不一样,但是只要是错误率在降低说明我们的神经网络构建成功了 。
使用该神经网络计算XOR:接下来就是测试一下我们的神经网络能不能得到正确的XOR运算 。
谁说JAVA不适合做神经网络,那来看看Encog这款框架吧

文章插图
 
输出的结果如下:
谁说JAVA不适合做神经网络,那来看看Encog这款框架吧

文章插图
 
可以看到,我们的神经网络最终的结果还是相当不错的 。
完整的代码:
谁说JAVA不适合做神经网络,那来看看Encog这款框架吧

文章插图
 

【谁说JAVA不适合做神经网络,那来看看Encog这款框架吧】


推荐阅读