精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

流行的Java神經網絡庫,以及實現神經網絡的方法

倩倩 ? 來源:CSDN ? 2020-04-17 15:29 ? 次閱讀

作為開發人員,我們習慣從用命令或函數的角度來思考問題。程序由任務組成,每個任務都包含一些編程結構。神經網絡不同于這種編程方法,因為它加入了自動任務改進的概念,或者類似于大腦的學習和改進的能力。換句話說,神經網絡在沒有特定任務編程的情況下主動學習新的活動。

教程不是教你從頭開始編寫神經網絡的教程,而是介紹結合Java代碼的神經網絡。本文主要內容是首先介紹神經網絡的發展從McCulloch和Pitt的神經元開始,然后通過Hebb的發現,實現了Rosenblatt的感知器來增強它,并說明了它為什么不能解決XOR問題。其次介紹了通過連接神經元,生成一個多層感知器,并通過應用反向傳播算法進行學習,從而實現XOR問題的解決方案。最后在演示神經網絡實現、訓練算法和測試之后,介紹利用一些致力于深度學習的開源Java ML框架如Neuroph、Encog和Deeplearning4j來快速實現神經網絡:

早期的人造神經元模型是由神經生理學家Warren McCulloch和邏輯學家Walter Pitts在1943年引入的。他們的論文名為“神經活動的邏輯微積分”,通常被認為是神經網絡研究的開始。mcculloch - pitts神經元工作原理是對每一個輸入輸入1或0,其中1為真,0為假,然后給神經元分配一個二元閾值激活函數來計算神經元的輸出。

該閾值給定一個實際值,比如1,如果閾值達到或超過閾值,則允許輸出0或1。此外,為了表示AND函數,我們設置2.0的閾值,如下表所示:

如果我們將閾值切換到1,那么這個方法也可以應用于OR函數。到目前為止,我們具有如表所示的典型的線性可分離數據,我們可以使用直線來劃分數據。 然而,McCulloch-Pitts神經元有一些嚴重的局限性。它既不能解決“異或”功能(XOR)也不能解決不是線性分離的“排他性”功能(XNOR)。 唐納德·赫布(Donald Hebb)提出下一次革命,他以關于Hebbian學習的理論而聞名。在他1949年出版的《行為的組織》一書中這樣寫道:

當細胞A的軸突足夠接近細胞B,不斷反復持續的激活細胞B,兩個細胞之間就會產生生長過程或代謝變化,這樣A的效率提高了,就像燃燒了細胞B一樣”。

換句話說,當一個神經元不停地觸發另一個神經元時,第一個神經元的軸突/連接就會形成突觸小結,如果它們已經與第二個神經元連接,就會放大它們。Hebb不僅提出,當兩個神經元一起點燃神經元之間的連接時,神經元之間的聯系就會增強——這被稱為神經元之間連接的權重——還提出這個活動是學習和記憶所必需的基本操作之一。因此必須改變McCulloch-Pitts神經元,以便為每個輸入分配權重。 此外,相對于總閥值量,1的輸入或多或少都被被賦予了權重。

后來,在1962年,由Frank Rosenblatt在他的《神經動力學原理》一書中定義并描述了感知器。這是一個神經元的模型,它可以通過輸入的權重在Hebbean Sense 中學習,并為后來神經網絡的發展奠定了基礎。感知器學習使用隨機權重初始化感知器,在激活后反復檢查答案是否正確。如果不正確,神經網絡可以從錯誤中學習并調整它的權重。

盡管感知器對原始McCulloch-Pitts神經元進行了許多改變,但感知器仍然局限于解決某些功能。1969年,Minsky與Seymour Papert,合著了” 感知器:計算幾何的介紹”,在文章中攻擊了感知器的局限性。文章中表明,感知器只能解決線性可分函數,并沒有打破這點的限制。直到20世紀80年代以前,這方面的研究還很少。現在解決這些困難的方法之一就是建立神經網絡。這些網絡將人工神經元的輸入與其他人工神經元的輸出連接起來。因此,網絡能夠解決更困難的問題,但它們也會變得相當復雜。但感知器沒有解決的XOR問題。如果我們仔細觀察真值表,我們可以看到XOR函數變成等價于單個神經元可表示的OR和NOT AND函數。

讓我們再來看看真值表:

但是我們可以將代表NOT和AND的兩個神經元結合起來,并構建一個神經網絡來解決類似于下圖所示的XOR問題:

這個圖表示多層感知器,它有一個輸入層,一個隱藏層和一個輸出層。神經元之間的連接與圖片中沒有顯示的權重有關。與單一感知器類似,每個處理單元都有一個summing和激活組件。它看起來很簡單,但我們也需要一個訓練算法來調整各個層次的權重,并讓它學習。通過簡單的感知器,我們可以很容易地根據誤差計算變化權重。從而訓練多層感知器實現計算神經網絡的整體錯誤。

1986年,Geoffrey Hinton,David Rumelhart和Ronald Williams發表了一篇論文,“通過反向傳播錯誤學習表示”,描述了一個新的學習過程,反向傳播。該過程反復調整網絡中連接的權重,從而最小化網絡實際輸出向量和所需輸出向量之間的差值。作為權重調整的結果,內部隱藏的單元(不是輸入或輸出的一部分)被用來表示重要的特征,并且這些單元通過交互捕獲規律性任務。

現在我們已經能夠編寫使用Java學習XOR函數的多層感知器。這需要創建一些類,比如名為ProcessingUnit的神經元接口,連接類,一些更活躍的函數,以及一個能夠學習的單層神經網絡。在我的GitHub存儲庫中你可以在項目中找到這些接口和類。

其中NeuralNet類負責對層的構造和初始化。它還提供了訓練和評估激活結果的功能。 如果運行NeuralNet類來解決典型的XOR問題,它將激活,評估結果,應用反向傳播算法和輸出訓練結果。

如果你仔細查看代碼,你會發現它在可重用性方面并不是非常靈活。如果我們將NeuralNet結構從訓練部分分離出來,變成把各種學習算法應用在各種神經網絡結構上,那就更好了。此外,我們想要更深入的學習結構和各種激活函數,則必須改變數據結構。因為到目前為止,只有一個隱藏層被定義。為了確保不產生任何bug,反向傳播計算必須經過仔細的測試。一旦完成了所有的重構,我們就必須開始考慮深層神經網絡的性能。

我想說的是,如果我們進行實際開發,那么首先需要看看現有的神經網絡庫。雖然從頭開始實現神經網絡有助于理解整個網絡的細節,但是如果一個真實的解決方案必須從頭開始實施,那么將要付出很大的努力。在本文中,我只選擇了純Java神經網絡庫。盡管Deeplearning4j得到了商業支持,但所有這些都是開源的。網上都有大量的參考文檔和例子。其中Deeplearning4j也支持CUDA。維基百科也提供了一份關于各種語言的深度學習軟件的綜合列表。

如何使用神經網絡庫的示例也被包含在關于使用XOR NeuralNet的GitHub中。很明顯,在開發中利用現成的函數庫與自己編寫java代碼相比工作量要少很多。其中Neuroph是為數據集提供的API,它更容易初始化訓練數據,學習規則的層次結構,進行神經網絡串行化/持久性和反序列化,并帶有GUI。Encog是一種先進的機器學習框架,支持多種高級算法,也支持規范化類和處理數據。然而,它的主要優勢在于神經網絡算法。Encog包含創建各種網絡的類,以及支持這些神經網絡的規范化和處理數據的支持類。Deeplearning4j是一個非常強大的庫,支持多種算法,包括與Apache Hadoop和Spark集成的分布式并行版本。對于有經驗的開發人員和軟件架構師來說,這絕對是正確的選擇。這里作為神經網絡庫的一部分提供了一個XOR示例。

想在要利用現有的眾多神經網絡庫,開發人員需要熟悉各種各樣的參數,從而讓他們的神經網絡進行學習。本文演示了一個非常簡單的例子,它包含神經元和反向傳播。然而,今天使用的許多人工神經網絡仍然來使用mcculloch - pitts神經元和Rosenblatt感知器的早期版本。作為構建現代深層神經網絡的基石,重要的是要理解神經元的根,并在庫中利用好現成的神經元、層、激活函數和學習算法。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4762

    瀏覽量

    100539
  • 函數
    +關注

    關注

    3

    文章

    4306

    瀏覽量

    62430
  • 神經元
    +關注

    關注

    1

    文章

    363

    瀏覽量

    18438
收藏 人收藏

    評論

    相關推薦

    神經網絡教程(李亞非)

      第1章 概述  1.1 人工神經網絡研究與發展  1.2 生物神經元  1.3 人工神經網絡的構成  第2章人工神經網絡基本模型  2.1 MP模型  2.2 感知器模型  2.3
    發表于 03-20 11:32

    神經網絡簡介

    神經網絡簡介
    發表于 08-05 21:01

    labview BP神經網絡實現

    請問:我在用labview做BP神經網絡實現故障診斷,在NI官網找到了機器學習工具包(MLT),但是里面沒有關于這部分VI的幫助文檔,對于”BP神經網絡分類“這個范例有很多不懂的地方,比如
    發表于 02-22 16:08

    神經網絡基本介紹

    神經網絡基本介紹
    發表于 01-04 13:41

    全連接神經網絡和卷積神經網絡有什么區別

    全連接神經網絡和卷積神經網絡的區別
    發表于 06-06 14:21

    卷積神經網絡如何使用

    卷積神經網絡(CNN)究竟是什么,鑒于神經網絡在工程上經歷了曲折的歷史,您為什么還會在意它呢? 對于這些非常中肯的問題,我們似乎可以給出相對簡明的答案。
    發表于 07-17 07:21

    【案例分享】ART神經網絡與SOM神經網絡

    今天學習了兩個神經網絡,分別是自適應諧振(ART)神經網絡與自組織映射(SOM)神經網絡。整體感覺不是很難,只不過一些最基礎的概念容易理解不清。首先ART神經網絡是競爭學習的一個代表,
    發表于 07-21 04:30

    人工神經網絡實現方法有哪些?

    人工神經網絡(Artificial Neural Network,ANN)是一種類似生物神經網絡的信息處理結構,它的提出是為了解決一些非線性,非平穩,復雜的實際問題。那有哪些辦法能實現人工神經
    發表于 08-01 08:06

    簡單神經網絡實現

    最簡單的神經網絡
    發表于 09-11 11:57

    如何構建神經網絡

    原文鏈接:http://tecdat.cn/?p=5725 神經網絡是一種基于現有數據創建預測的計算系統。如何構建神經網絡神經網絡包括:輸入層:根據現有數據獲取輸入的層隱藏層:使用反向傳播優化輸入變量權重的層,以提高模型的預測
    發表于 07-12 08:02

    matlab實現神經網絡 精選資料分享

    神經神經網絡,對于神經網絡實現是如何一直沒有具體實現一下:現看到一個簡單的神經網絡模型用于訓
    發表于 08-18 07:25

    基于BP神經網絡的PID控制

    最近在學習電機的智能控制,上周學習了基于單神經元的PID控制,這周研究基于BP神經網絡的PID控制。神經網絡具有任意非線性表達能力,可以通過對系統性能的學習來實現具有最佳組合的PID控
    發表于 09-07 07:43

    神經網絡移植到STM32的方法

    神經網絡移植到STM32最近在做的一個項目需要用到網絡進行擬合,并且將擬合得到的結果用作控制,就在想能不能直接在單片機上做神經網絡計算,這樣就可以實時計算,不依賴于上位機。所以要解決的主要是兩個
    發表于 01-11 06:20

    卷積神經網絡模型發展及應用

    地介紹了卷積 神經網絡的發展歷史,然后分析了典型的卷積神經 網絡模型通過堆疊結構、網中網結構、殘差結構以及 注意力機制提升模型性能的方法,并
    發表于 08-02 10:39

    三個最流行神經網絡

    在本文中,我們將了解深度神經網絡的基礎知識和三個最流行神經網絡:多層神經網絡(MLP),卷積神經網絡(CNN)和遞歸
    發表于 05-15 14:19 ?1361次閱讀
    三個最<b class='flag-5'>流行</b><b class='flag-5'>神經網絡</b>