亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用Java開源項目JOONE實現人工智能編程

2019-11-18 15:41:28
字體:
來源:轉載
供稿:網友
簡介
  很少有程序員不對這里或者那里所包含的人工智能編程所吸引,然而,許多對AI感愛好的程序員很快就因其中包含的算法的復雜性而退卻。在本文中,我們將討論一個能大大簡化這種復雜性的java開源工程。
  Java面向對象的神經網絡(JOONE)是一開源工程,它提供給Java程序員一個高適應性的神經網絡。該JOONE工程源代碼由LGPL所保護。簡言之,這意味著源代碼是可自由使用的而且你不需要支付版稅就可以使用JOONE。JOONE可以從http://joone.sourceforge.net/處下載。
JOONE能答應你輕易地從一個Java程序中創建神經網絡。JOONE支持許多特征,如多線程和分布式處理。這意味著JOONE能利用多處理機計算機和多臺計算機的優勢來進行分布式處理。
  神經網絡
  JOONE用Java實現了一個人工神經網絡。一個人工神經網絡試圖仿效生物學神經網絡的功能--神經網絡組成今天在地球上幾乎所有高等生命的大腦形式。神經網絡由神經原組成。圖1顯示了一個實際神經原圖。

用Java開源項目JOONE實現人工智能編程(圖一)
圖1:一個生物學的神經原


   從圖1中你可以看出,神經原由一個內核細胞和幾個長長的稱為觸角的連接器組成。神經原之間依靠這些觸角進行連接。無論是生物學的還是人工的神經網絡,都通過觸角把信號從一個神經原傳遞到另一個神經原來工作。


   使用JOONE
   在這篇文章中,你將看到一個簡單的怎樣使用JOONE的實例。神經網絡題目涉及廣泛并覆蓋許多不同的應用領域。在本文中,我們將展示給你怎樣使用JOONE來解決一個很簡單的模式識別問題。模式識別是神經網絡中的最普遍的應用之一。
   模式識別提供給神經網絡一種模式,判定是否該神經網絡能夠識別出該模式。這種模式應該能夠在某種程度上被扭曲而該神經網絡仍然能夠識別它。這很像人類識別東西(如一個交通標志)的能力。人類應該能夠識別在下雨天,晴天或者晚上的交通標志。即使這些圖像看上去可能相當不同,但人類的大腦仍能夠判定出它們是一樣的圖像。
   當進行JOONE編程時,你一般要使用兩種類型的對象。你要使用神經原層對象,用于描述一層的一個或多個的具有相似特征的神經原。神經網絡經常有一層或兩層神經元。這些神經元層通過觸角聯系在一起。這些觸角把這種待識別的模式,從一個神經元層傳輸到另一個神經元層。
   觸角不僅把這種模式從一個神經元層傳輸到另一個神經元層。觸角還將生成一些指向這種模式的元素的斜線。這些斜線將導致這種模式的某些元素在被傳輸到下一個神經元層時不如通過其它方式傳遞更有效些。這些斜線通常稱為權重,它們形成神經網絡的存儲系統。通過調整存儲在觸角中的這些權重,可以更改神經網絡的行為。
   觸角在JOONE中還承擔著另外一個角色。在JOONE中,可以把觸角看作是數據導管。正如觸角把模式從一個神經元層傳輸到另一個神經元層,指定版本的觸角用于把模式傳入和傳出神經網絡。下面將給你展示一個簡單的單層的神經網絡是怎樣被構建并進行模式識別的。

練習神經網絡
   為實現本文的目的,我們將指導JOONE去識別一個很簡單的模式。在這種模式中,我們將考察一個二進制的布爾操作,例如XOR。這個XOR操作的真值表列舉如下:

X Y X XOR Y0 0 00 1 11 0 11 10


  正如你從上表中看到的,XOR運算的結果是只有當X和Y具有不同值時,結果才為真(1)。其它情況下,XOR運算結果均為假(0)。默認地,JOONE從存儲在你的系統中的文本文件中取得輸入。這些文本文件通過使用一種稱為FileInputSynapse的非凡觸角來讀取。為了練習XOR運算問題,你必須建立一個輸入文件-該文件包含上面顯示的數據。該文件顯示在列表1中。
  列表1:為解決XOR問題的輸入文件的內容
0.0;0.0;0.0
0.0;1.0;1.0
1.0;0.0;1.0
1.0;1.0;0.0

  我們現在分析一個簡單的程序,它指導JOONE來識別XOR運算并產生正確的結果。我們現在分析練習該神經網絡必須被處理的過程。練習過程包括把XOR問題提交給神經網絡,然后觀察結果。假如這個結果不是所預期的,該練習算法將調整存儲在觸角中的重量。在神經網絡的實際輸出和預料的輸出之間的差距稱為誤差。練習將繼續到誤差小于一個可接受值為止。這個級別通常是一個百分數,如10%。我們現在分析必須用于練習一個神經網絡的代碼。
  練習過程通過建立神經網絡開始,同時也必須創建隱蔽的輸入層和輸出層。
// 首先,創造這三個層
input = new SigmoidLayer();
hidden = new SigmoidLayer();
output = new SigmoidLayer();

  每個層被使用JOONE對象SigmoidLayer創建。Sigmoidlayer基于自然對數生成一個輸出。JOONE還包含另外的層,而不是你可能選擇使用的S形的層類型。
  下一步,每一層被賦于一個名字。這些名字將有助于后面在調試期間識別該層。
input.setLayerName("input");
hidden.setLayerName("hidden");
output.setLayerName("output");

  現在必須定義每個層。我們將指定在每一層中的"行"號。該"行"號對應于這一層中的神經原的數目。
input.setRows(2);
hidden.setRows(3);
output.setRows(1);

  從上面的代碼看出,輸入層有兩個神經原,隱蔽層有三個隱蔽神經原,輸出層包含一個神經原。這對于神經網絡包含兩個輸入神經原和一個輸出神經原是具有重要意義的,因為XOR運算符接收兩個參數而產生一個結果。
  為使用該神經原層,我們也必須創建觸角。在本例中,我們要使用多個觸角。這些觸角用下面的代碼實現。
// 輸入-> 隱蔽的連接。
FullSynapse synapse_IH = new FullSynapse();
// 隱蔽-> 輸出連接。
FullSynapse synapse_HO = new FullSynapse();

  就象神經原層的情況一樣,觸角也可能命名以有助于程序的調試。下面的代碼命名新建的觸角。
synapse_IH.setName("IH");
synapse_HO.setName("HO");

  最后,我們必須把觸角聯接到適當神經原層。下面的代碼實現這一點。
// 聯接輸入層到隱蔽層
input.addOutputSynapse(synapse_IH);
hidden.addInputSynapse(synapse_IH);
// 聯接隱蔽層到輸出層
hidden.addOutputSynapse(synapse_HO);
output.addInputSynapse(synapse_HO);

  現在既然神經網絡已被創建,我們必須創建一個用于調節該神經網絡的監視器對象。下面的代碼創建監視器對象。
//創建監視器對象并且設置學習參數
monitor = new Monitor();
monitor.setLearningRate(0.8);
monitor.setMomentum(0.3);

  學習速度和動力作為參數以用于指定練習的產生方式。JOONE利用backPRopagation學習算法。要更多了解關于學習速度或者動力的信息,你應該參考backpropagation算法。
  這個監視器對象應該被賦值給每一個神經原層。下面的代碼實現這一點。
input.setMonitor(monitor);
hidden.setMonitor(monitor);
output.setMonitor(monitor);

  就象許多Java對象本身一樣,JOONE監視器答應聽者可以添加到它上面去。隨著練習的進行,JOONE將通知聽者有關練習進程的信息。在這個簡單的例子中,我們使用:
monitor.addNeuralNetListener(this);
  我們現在必須建立輸入觸角。如前所述,我們將使用一個FileInputSynapse來讀取一個磁盤文件。磁盤文件不是JOONE唯一能夠接受的輸入種類。JOONE對于不同的輸入源具有很強的靈活性。為使JOONE能夠接收其它輸入類型,你只需創建一個新的觸角來接受輸入。在本例中,我們將簡單地使用FileInputSynapse。FileInputSynapse首先被實例化。
inputStream = new FileInputSynapse();
  然后,必須通知FileInputSynapse要使用哪些列。列表1中顯示的文件使用了輸入數據的前兩列。下面代碼建立起前兩列用于輸入到神經網絡。
// 前兩列包含輸入值
inputStream.setFirstCol(1);
inputStream.setLastCol(2);

  然后,我們必須提供輸入文件的名字,這個名字直接來源于用戶接口。然后,提供一個編輯控件用于收集輸入文件的名字。下面代碼為FileInputSynapse設置文件名。
// 這是包含輸入數據的文件名
inputStream.setFileName(inputFile.getText());

  如前所述,一個觸角僅是一個神經原層之間的數據導管。FileInputSynapse正是這里的數據導管,通過它數據進入到神經網絡。為了更輕易實現這點,我們必須要把FileInputSynapse加到神經網絡的輸入層。這由下面一行實現。
input.addInputSynapse(inputStream);
  現在既然已經建立起神經網絡,我們必須創建一個練習員和一個監視器。練習員用于練習該神經網絡,因為該監視器通過一個事先設置好的練習重復數來運行這個神經網絡。對于每一次練習重復,數據被提供到神經網絡,然后就可以觀察到結果。該神經網絡的權重(存儲在穿梭在神經原層之間的觸角連接中)將根據誤差作適當調整。隨著練習的進行,誤差級將下降。下列代碼建立練習員并把它依附到監視器。
trainer = new TeachingSynapse();
trainer.setMonitor(monitor);

  你會記得列表1中提供的輸入文件包含三個列。到目前為止,我們僅僅使用了第一、二列,它們指定了到神經網絡的輸入。第三列包含當提供給神經網絡第一列中的數字時的期盼的輸出值。我們必須使得練習員能夠存取該列以便能確定誤差。該錯誤是神經網絡的實際輸出和期盼的輸出之間的差距。下列代碼創建另外一個FileInputSynapse并作好預備以讀取與前面相同的輸入文件。
// 設置包含期望的響應值的文件,這由FileInputSynapse來提供
samples = new FileInputSynapse();
samples.setFileName(inputFile.getText());

  這時,我們想指向在第三列的FileInputSynapse。下列代碼實現了這一點,然后讓練習員使用這個FileInputSynapse。
//輸出值在文件中的第三列上
samples.setFirstCol(3);
samples.setLastCol(3);
trainer.setDesired(samples);

  最后,練習員被連結到神經網絡輸出層,這將使練習員接收神經網絡的輸出。
// 連接練習員到網絡的最后一層
output.addOutputSynapse(trainer);

  我們現在已為所有的層預備好后臺線程,包括練習員。
input.start();
hidden.start();
output.start();
trainer.start();

  最后,我們為練習設置一些參數。我們指定在輸入文件中共有四行,而且想練習20,000個周期,而且還在不段學習。假如你設置學習參數為false,該神經網絡將簡單地處理輸入并不進行學習。我們將在下一節討論輸入處理。
monitor.setPatterns(4);
monitor.setTotCicles(20000);
monitor.setLearning(true);

  現在我們已經為練習過程作好預備。調用監視器的Go方法將在后臺啟動練習過程。
monitor.Go();
   神經網絡現在將要被練習20,000個周期。當神經網絡練習完成,誤差層應該在一個合理的低級別上。一般低于10%的誤差級是可接受的。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产专区| 日韩精品电影网| 欧美激情性做爰免费视频| 欧美日韩精品在线播放| 国产日韩综合一区二区性色av| 欧美专区福利在线| 亚洲成人久久久久| 国内精品久久久久久中文字幕| 国产在线拍偷自揄拍精品| 国产精品夫妻激情| 亚洲第一区在线观看| 在线观看免费高清视频97| 成人免费观看网址| 亚洲精品免费av| 自拍偷拍亚洲精品| 亚洲影影院av| 亚洲国产精品人久久电影| 国产欧美久久一区二区| 亚洲小视频在线观看| 成人精品视频99在线观看免费| 欧亚精品在线观看| 亚洲午夜未删减在线观看| 亚洲精品二三区| 国产三级精品网站| 国产精品美女午夜av| 上原亚衣av一区二区三区| 国产一区二区黄| 国产精品一区专区欧美日韩| 国外日韩电影在线观看| 国产一区二区在线免费| 91理论片午午论夜理片久久| 91精品久久久久久久久久另类| 一区二区亚洲精品国产| 日韩精品中文字幕久久臀| 亚洲综合日韩在线| 欧美日韩福利视频| 欧洲日韩成人av| 97在线精品国自产拍中文| 欧美福利视频在线| 欧美性生交xxxxx久久久| 日本久久久久久久久| 国产精品偷伦视频免费观看国产| 色偷偷91综合久久噜噜| 精品福利在线视频| 国产日韩精品视频| 国产精品黄色影片导航在线观看| 日韩精品亚洲精品| 91精品在线观| 国产日本欧美在线观看| 日本高清不卡的在线| 欧美大片在线看免费观看| 26uuu日韩精品一区二区| 国语自产在线不卡| 欧美黑人国产人伦爽爽爽| 尤物tv国产一区| 久久视频在线免费观看| 欧美最顶级丰满的aⅴ艳星| 欧美一级淫片播放口| 欧美xxxx做受欧美| 亚洲人精品午夜在线观看| 成人国产精品免费视频| 欧美激情一区二区三级高清视频| 国产福利精品在线| 国产精品电影久久久久电影网| 色阁综合伊人av| 中文字幕在线观看亚洲| 国产精品999999| 亚洲人成毛片在线播放| 欧美日韩亚洲高清| 2020国产精品视频| 91精品国产九九九久久久亚洲| 亚洲国产欧美自拍| 91久久精品国产91性色| 久久久伊人欧美| 亚洲精品日韩欧美| 高潮白浆女日韩av免费看| 国产精品a久久久久久| 97精品国产91久久久久久| 久久久久久中文字幕| 亚洲日本欧美日韩高观看| 国产精品亚洲精品| 亚洲性视频网址| 日韩精品中文字| 一个人看的www欧美| 久久久久久尹人网香蕉| 国产中文日韩欧美| 精品成人av一区| 精品日韩美女的视频高清| 欧美性xxxxxxx| 欧美亚洲国产成人精品| 国产91精品高潮白浆喷水| 91国产中文字幕| 久久九九有精品国产23| 中文字幕精品久久久久| 国产精品一区二区三区久久久| 精品日韩美女的视频高清| 亚洲乱亚洲乱妇无码| 日韩电影免费观看在线| 欧美精品videofree1080p| 日韩激情av在线免费观看| 日av在线播放中文不卡| 中文字幕亚洲欧美日韩2019| 午夜伦理精品一区| 亚洲精品白浆高清久久久久久| 在线观看欧美成人| 久久久精品国产网站| 成人乱人伦精品视频在线观看| 日韩av网址在线观看| 国产成人精品网站| 精品亚洲一区二区三区在线观看| 91亚洲人电影| 黑人巨大精品欧美一区二区| 最近2019好看的中文字幕免费| 日韩av片免费在线观看| 91美女片黄在线观看游戏| 国产精品h在线观看| 亚洲成人激情小说| 久久中文字幕在线| 97国产精品免费视频| 国产精品一区二区在线| 色综合久久中文字幕综合网小说| 国产免费成人av| 国产又爽又黄的激情精品视频| 日韩美女免费线视频| 亚洲精品aⅴ中文字幕乱码| 国产精品入口日韩视频大尺度| 亚洲精品国产综合区久久久久久久| 日韩小视频网址| 亚洲少妇中文在线| 欧美日韩国产综合视频在线观看中文| 国产日韩欧美在线看| 最新国产成人av网站网址麻豆| 成人免费视频网址| 亚洲成人aaa| 日韩在线视频国产| 亚洲欧美日韩成人| 日韩欧美在线看| 亚洲免费视频网站| 欧日韩不卡在线视频| 91精品国产高清自在线看超| 国产91av在线| 欧美精品日韩www.p站| 91亚洲国产精品| 97国产在线视频| 国产精品吊钟奶在线| 一本色道久久88综合日韩精品| 亚洲欧美综合区自拍另类| 欧美性猛交xxxx黑人猛交| 欧美国产日韩xxxxx| 国产97色在线|日韩| 久久福利视频网| 国产一区二区三区三区在线观看| 91久久精品国产91久久| 国产精品久久久久久久久久久久久| 欧美黑人xxxⅹ高潮交| 精品久久久在线观看| 日韩一二三在线视频播| 亚洲二区在线播放视频| 97视频在线观看成人| 国产精品99久久久久久久久| 北条麻妃一区二区在线观看| 欧美日韩ab片| 久久天天躁狠狠躁老女人| 国产免费观看久久黄|