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

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

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

文章插图
上面的代码通过多次的迭代,当迭代到使神经网络的错误率低于1%的时候,神经网络训练就结束了 。到了这里,我们可以运行我们的代码看看训练的结果:

文章插图

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

文章插图
输出的结果如下:

文章插图
可以看到,我们的神经网络最终的结果还是相当不错的 。
完整的代码:

文章插图
【谁说JAVA不适合做神经网络,那来看看Encog这款框架吧】
推荐阅读
- JavaScript中执行上下文和执行栈
- Android实现Rxjava2+Retrofit完美封装
- 不可不知的 5 种 JavaScript 代码编辑器
- 理解Java的三大特性之封装
- Java如何设计系统接口?
- java调用打印机工具类
- Java入门:关键字、标识符、变量
- Java线程的那几个启动方式
- Java8之Consumer、Supplier、Predicate和Function攻略
- 2020远程面试这几天,从阿里/滴滴/美团/携程带回来的Java岗面试题
