• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 用Java開源項目JOONE實現人工智能編程(1)

    發表于:2007-06-11來源:作者:點擊數: 標簽:
    簡介 很少有 程序員 不對這里或者那里所包含的人工智能編程所吸引,然而,許多對AI感興趣的程序員很快就因其中包含的算法的復雜性而退卻。在本文中,我們將討論一個能大大簡化這種復雜性的Java 開源 工程。 Java 面向對象 的神經網絡(JOONE)是一開源工程,它

    簡介

    很少有程序員不對這里或者那里所包含的人工智能編程所吸引,然而,許多對AI感興趣的程序員很快就因其中包含的算法的復雜性而退卻。在本文中,我們將討論一個能大大簡化這種復雜性的Java開源工程。

    Java面向對象的神經網絡(JOONE)是一開源工程,它提供給Java程序員一個高適應性的神經網絡。該JOONE工程源代碼由LGPL所保護。簡言之,這意味著源代碼是可自由使用的而且你不需要支付版稅就可以使用JOONE。JOONE可以從http://joone.sourceforge.net/處下載。

    JOONE能允許你輕易地從一個Java程序中創建神經網絡。JOONE支持許多特征,如多線程和分布式處理。這意味著JOONE能利用多處理機計算機和多臺計算機的優勢來進行分布式處理。

    神經網絡

    JOONE用Java實現了一個人工神經網絡。一個人工神經網絡試圖仿效生物學神經網絡的功能--神經網絡組成今天在地球上幾乎所有高等生命的大腦形式。神經網絡由神經原組成。圖1顯示了一個實際神經原圖。



    圖1:一個生物學的神經原

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

    使用JOONE

    在這篇文章中,你將看到一個簡單的怎樣使用JOONE的實例。神經網絡題目涉及廣泛并覆蓋許多不同的應用領域。在本文中,我們將展示給你怎樣使用JOONE來解決一個很簡單的模式識別問題。模式識別是神經網絡中的最普遍的應用之一。

    模式識別提供給神經網絡一種模式,判斷是否該神經網絡能夠識別出該模式。這種模式應該能夠在某種程度上被扭曲而該神經網絡仍然能夠識別它。這很像人類識別東西(如一個交通標志)的能力。人類應該能夠識別在下雨天,晴天或者晚上的交通標志。即使這些圖像看上去可能相當不同,但人類的大腦仍能夠判斷出它們是一樣的圖像。

    當進行JOONE編程時,你一般要使用兩種類型的對象。你要使用神經原層對象,用于描述一層的一個或多個的具有相似特征的神經原。神經網絡經常有一層或兩層神經元。這些神經元層通過觸角聯系在一起。這些觸角把這種待識別的模式,從一個神經元層傳輸到另一個神經元層。

    觸角不僅把這種模式從一個神經元層傳輸到另一個神經元層。觸角還將生成一些指向這種模式的元素的斜線。這些斜線將導致這種模式的某些元素在被傳輸到下一個神經元層時不如通過其它方式傳遞更有效些。這些斜線通常稱為權重,它們形成神經網絡的存儲系統。通過調整存儲在觸角中的這些權重,可以更改神經網絡的行為。

    觸角在JOONE中還承擔著另外一個角色。在JOONE中,可以把觸角看作是數據導管。正如觸角把模式從一個神經元層傳輸到另一個神經元層,指定版本的觸角用于把模式傳入和傳出神經網絡。下面將給你展示一個簡單的單層的神經網絡是怎樣被構建并進行模式識別的。

    訓練神經網絡

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

    X
    Y
    X XOR Y
    0 0 0
    0 1 1
    1 0 1
    1 1 0


    正如你從上表中看到的,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%。我們現在分析必須用于訓練一個神經網絡的代碼。

    訓練過程通過建立神經網絡開始,同時也必須創建隱蔽的輸入層和輸出層。

    clearcase/" target="_blank" >cccccc width=480 align=center bgColor=#e3e3e3 border=1>
    // 首先,創造這三個層

    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算法。


    共2頁: 1 [2] 下一頁

    原文轉自:http://www.kjueaiud.com

    ...
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>