分享
 
 
 

基于JOONE快速开发神经网络

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

基于JOONE快速开发神经网络

一.神经网络介绍

20世纪70年代以来,随着计算机技术的不断发展,人工神经网络(ANN)的理论与实践都得到了迅猛提高。ANN的概念来源于生物神经网络(BNN)。限于目前的理论与技术,ANN保留了脑神经网络的基本结构,反映脑神经系统的工作原理。在ANN中,记忆的信息存贮在连接权上,外部刺激通过连接通道自动激活相应的神经元,以达到自动识别的目的。因而,它是与现代计算机完全不同的系统。ANN模拟生物体中神经网络的某些结构和功能,并反过来用于工程或其他的领域。

二.关于JOONE

JOONE(Java Object Oriented Neural Network)是sourceforge.net上一个用java语言迅速开发神经网络的开源项目。JOONE支持很多的特性,比如多线程和分布式计算,这意味着可以JOONE可以利用多处理器或是多计算机来均衡附载。

JOONE主要有三个大的模块:

joone-engine:joone的核心模块。

joone-editor:joone的gui开发环境。不用编写一行代码就建立神经网络模型,并可以进行训练和验证。Joone中提供了一个用joone-editor建立xor网络模型的例子,本文中的神经网络就是参考这个例子所完成的。

joone-distributed-environment :joone用于支持分布式计算的模块。

本文使用joone-editor建立一个用于模式识别的神经网络,进行训练,然后在一个java applet 程序中用于识别用户的输入。

三.利用JOONE快速建立神经网络

图1.一个简单的神经网络

图2.在joone中的表示

图1是一个简单的神经网络,在joone中用layer来表示每层的所有的节点,用synapse来封装层与层之间的连接。这是相应的java代码:

//建立三个sigmoid节点层和两个全连接。

SigmoidLayer layer1 = new SigmoidLayer();

SigmoidLayer layer2 = new SigmoidLayer();

SigmoidLayer layer3 = new SygmoidLayer();

FullSynapse synapse1 = new FullSynapse();

FullSynapse synapse2 = new FullSynapse();

//设置各层的节点个数

layer1.setRows(3);

layer2.setRows(3);

layer3.setRows(3);

//把各层连接起来

layer1.addOutputSynapse(synapse1);

layer2.addInputSynapse(synapse1);

layer2.addOutputSynapse(synapse2);

layer3.addInputSynapse(synapse2);

这样,一个简单的神经网络模型就建好了,joone会自动的随机设置连接的权系数。 当然这个网络目前还没有进行训练,没有任何实际的功能。下文将用joone建立一个模式识别的神经网络。也可以用joone-editor在可视化界面上快速建立神经网络,下图是用joone-editor建立的求解异或问题的神经网络模型:

图4.joone-editor中的模型

四.

图5.识别程序

建立模式识别的神经网络

[1] 程序说明

本程序是实现一个简单的模式识别的神经网络。用户在画板中用鼠标写字母,由程序进行识别并显示。用户在一个10X12的区域内绘制字母,点击【识别】按钮,对用户输入的图形进行识别。在右上方显示当前的图像所对应的神经网络的输入,在右下方是神经网络的输出和识别结果。在图5中用户输入了A,程序作出了正确的识别。

[2] 用joone-editor建立神经网络模型

打开joone-editor,新建一个神经网络,如图所示:

该程序的神经网络的主要组成部分有:

l 120个输入节点所组成的输入层

l 由8个节点组成的隐层

l 由4个节点组成的输出层

l 一个joone自己的训练层以及两个文件输入层,用来输入测试数据和期望值。

[3] 训练神经网络

首先通过编写的程序获取训练数据。在java程序的12x10的输入框体中绘制字母,右上角的文本框会生成相应的大小为120的一维整形数组作为输入数据,用分号分隔。每次输入作为单独的一行。由于本程序要区分A、B、C、D四个字母,所以期望值是一个长度为4的数组。现在规定A对应为“1;0;0;0”,B对应“0;1;0;0”,C为“0;0;1;0”,D为“0;0;0;1”,并把这些结果添加到对应的每行输入数据的后面。在两个FileInput中设置输入文件为刚刚建立的数据文件,并设置训练数据是从第1行到第120行,训练数据是从第121行到的124行。

打开控制面板,设置学习速率为0.7,用所用的35条记录训练10000次。点击【run】开始训练。控制面板上会显示训练的进度和收敛情况。到了400次的时候,系统的误差已经很小了(0.002260),可以点击pause来停止训练。如果权值参数选择不合理的话有可能造成网络不能收敛。这时可以选择【control】->【randomize】,重新随机生成初始的权系数。

图7.训练控制面板

[4] 把完成训练的神经网络移植到程序中

为了在程序中使用训练好的神经网络,可以把利用java的序列化功能把完成训练的网络输出到文件中,然后在程序中读取这个文件,重新生成神经网络对象。选择【file】->【export neuralNet…】,把当前神经网络保存到文件中去。然后就可以在程序中使用了。

下面是从文件中读取神经网络的代码:

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:/work/homework/ANN/final/3.snet"));

Object o = ois.readObject();

System.out.println("o is " + o);

ois.close();

NeuralNet net = (NeuralNet) o;

然后在程序中就可以使用了。每次用户绘制的数据转换成120的一维数组作为输入,然后神经网络进行计算并输出一个长为4的向量作为输出。

五.测试

绘制了9次A、B、C和8次D共35个记录作为输入数据,训练了10000次,然后输出神经网络。用该神经网络进行识别,发现对于与训练数据相似的输入,识别的准确率很高,但是对和原来的训练数据差别较大的输入,程序可能会发生误判。为了提高准确率,需要增加样本的数量和覆盖面。

六.高级特性

joone还有很多的高级特性。它支持多种处理层(linear, sigmoid, tanh, logarithmic, context , delay, nested),多种连接方式(full synapse,direct synapse,delayed synapse,sanger synapse),还提供了一系列的工具以及script语言来帮助处理数据和分析结果。灵活的运用joone,可以迅速的开发各种神经网络。

七.参考文献及相关资源

[1] 神经网络介绍-利用反向传播算法的模式学习 Andrew Blais, Ph.D. (onlymice@gnosis.cx), David Mertz, Ph.D. (mertz@gnosis.cx), Gnosis Software, Inc. 2001 年 6 月 http://www-900.ibm.com/developerWorks/cn/linux/other/l-neural/index.shtml

[2] 人工智能 沟口理一郎 石田亨 科学出版社 2003年2月

[3] joone主页 http://sourceforge.net/projects/joone

[4] 同时附上本文的java源程序和训练好的神经网络

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有