如何製作神經網絡:架構、參數和代碼
已發表: 2021-02-12顧名思義,神經網絡是神經元的電路。 有不同類型的神經網絡。 生物神經網絡由真實的生物神經元組成。 而人工神經網絡(ANN)是一個基於生物神經網絡的系統,就像存在於大腦中一樣。 大腦中估計的神經元數量約為 1000 億個,它們通過電化學信號進行交流。
ANN 試圖重現生物神經元中存在的計算複雜性,但它無法與之相比,它們是生物神經網絡的更簡單和不復雜的版本。 在本文中,我們將了解 ANN 的結構並學習如何使用 Python 創建神經網絡。
目錄
神經網絡架構
人工神經網絡由人工神經元組成,人工神經元也稱為“節點”。 這些節點相互連接,從而創建網絡或網格。 這些相互連接的強度被賦予一個值。 該值介於 -1 到 1 之間。
如果連接的值很高,則表明這些節點之間的連接很強。 每個節點都有其特有的功能。 改變這個函數將改變神經網絡的行為和復雜性。 ANN中的神經元分為三種類型,輸入節點、隱藏節點和輸出節點,如下圖所示:
資源
輸入節點負責接收一般為數值或表達式形式的信息。 該信息以激活值的形式呈現,其中每個節點都有一個數字,數字越大,激活越大。
信息進一步通過網絡傳遞。 基於節點連接權重和與特定層的某些神經元相關的激活函數,信息從一個神經元傳遞到另一個神經元。 每個節點在接收時添加激活值,這些值根據傳遞函數進行修改。
信息在整個網絡中流動,通過隱藏層,直到到達輸出節點。 輸出節點非常重要,因為它們以有意義的方式向外界反映輸入。 在這裡可以看到神經網絡的一個驚人的方面,它導致每個層和節點的權重調整。
預測值與實際值(誤差)之間的差異將向後傳播。 因此,神經網絡將從所犯的錯誤中學習,並嘗試根據指定的學習率方法調整權重。
因此,通過調整隱藏層數、每層神經元數、權重更新策略和激活函數等參數,我們可以創建神經網絡。
定義參數
激活函數
根據手頭的問題,可以在神經網絡中使用各種激活函數。
激活函數是每個神經元都有的數學方程。 它決定了神經網絡的輸出。
該激活函數附加到網絡中的每個神經元,並確定是否應該激活它,這取決於該特定神經元的激活是否有助於在輸出層得出相關預測。 不同的層可以附加不同的激活函數。 激活函數還有助於將每個神經元的輸出標準化到 1 到 0 或 -1 到 1 之間的範圍。
現代神經網絡使用一種稱為反向傳播的重要技術通過調整權重來訓練模型,這會增加激活函數及其導數函數的計算壓力。
激活函數的工作
缺失鍊接
激活函數有 3 種類型:
二進制- x<0 y=0 , x>0 y=1
線性 - x=y
非線性 - 各種類型:Sigmoid、TanH、Logistic、ReLU、Softmax 等。
來源:博客
類型:ReLU
缺失鍊接
算法
神經網絡有多種類型,但通常分為前饋和反饋(反向傳播)網絡。
1)前饋網絡是一個包含輸入、輸出和隱藏層的非重複網絡; 因為信號只能向一個方向移動。 輸入數據被傳輸到執行計算的處理設備層。 每個處理因子根據輸入的權重進行計算。 計算新值,然後將新輸入值饋送到下一層。
這個過程一直持續到它通過所有層並確定結果。 限制傳遞函數有時用於測量輸出層中的神經元輸出。 前饋網絡被稱為並包括感知器(直接和間接)網絡。 前饋網絡通常用於數據挖掘。
2)反饋網絡(例如,循環神經網絡或RNN)具有追溯機制,這意味著它們可以使用陷阱/循環使信號在兩個方向上移動。 允許神經元之間所有可能的通信。
由於這種類型的網絡中存在環路,因此它成為一個不斷變化的非線性系統,直到達到穩定狀態。 當網絡正在尋找一組好的連接對象時,反饋網絡通常用於與性能問題相關的記憶。
訓練
前饋傳遞意味著給定輸入並加權如何計算輸出。 訓練完成後,我們只運行前向傳遞來形成預測。
但是我們首先要訓練我們的模型以真正學習權重,因此訓練過程如下:
- 隨機選擇並初始化所有節點的權重。 TensorFlow 和 Keras (Python) 中內置了智能初始化方法。
- 對於每個訓練示例,使用當前權重執行前向傳遞,併計算從左到右的每個節點的輸出。 最終輸出是最後一個節點的值。
- 將最終輸出與訓練數據中的實際目標進行比較,並使用損失函數測量誤差。
- 執行從右到左的反向傳遞,並使用反向傳播將上一步中計算的誤差傳播到每個單獨的節點。
- 計算每個神經元對誤差的權重貢獻,並使用梯度下降相應地調整連接的權重。 從最後一層向後傳播誤差梯度。
神經網絡的 Python 代碼
現在我們從理論上了解了神經網絡是如何製作的,讓我們使用 Python 來實現它。
Python 中的神經網絡
我們將使用帶有 Tensorflow 或 Theano 後端的 Keras API 來創建我們的神經網絡。
安裝庫
西阿諾
>>> pip install –upgrade –no-deps git+git://github.com/Theano/Theano.git
TensorFlow 和 Keras
>>> pip3 安裝張量流
>>> pip install –升級 Keras
導入庫
導入 keras
從 keras.models 導入順序
從 keras.layers 導入密集
初始化人工神經網絡
模型=順序()
創建輸入和隱藏層-
model.add(Dense(input_dim = 2, units = 10, activation='relu', kernel_initializer='uniform'))
此代碼將輸入層和一個隱藏層添加到順序網絡
Dense():讓我們創建一個密集連接的神經網絡
input_dim:輸入層中節點的形狀或數量
units:當前層(隱藏層)的神經元或節點數
激活:應用於每個節點的激活函數。“relu”代表整流線性單元
kernel_initializer:層的初始隨機權重
第二隱藏層
model.add(Dense(units = 20, activation='relu', kernel_initializer='uniform'))
該代碼創建另一個隱藏層並將其添加到具有 20 個節點和“校正線性”激活函數的模型中。 根據問題和復雜性,可以以類似的方式添加更多層。
輸出層
model.add(Dense(units = 1, activation='sigmoid', kernel_initializer='uniform'))
具有 Sigmoid 或 softmax 的單個輸出層是輸出層常用的激活函數。
ANN編譯:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
在訓練之前,ANN 會使用優化器函數和損失函數進行編譯。
優化器:網絡的優化器功能,優化器有多種類型,主要使用亞當。
損失:用於計算損失和誤差。 有多種類型,選擇取決於所處理問題的性質。
指標:用於衡量模型性能的指標。
用訓練數據擬合模型:
model.fit(X_train,Y_train,batch_size=64, epochs=30)
此代碼將創建模型
結論
我們現在可以從頭開始創建人工神經網絡(在 Python 上),因為我們了解了可以根據手頭的問題更改的不同參數。
如果您有興趣了解有關深度學習技術、機器學習的更多信息,請查看 IIIT-B 和 upGrad 的機器學習和人工智能 PG 文憑,該文憑專為在職專業人士設計,提供 450 多個小時的嚴格培訓、30 多個案例研究和任務、IIIT-B 校友身份、5 個以上實用的實踐頂點項目和頂級公司的工作協助。
從世界頂級大學學習ML 課程。 獲得碩士、Executive PGP 或高級證書課程以加快您的職業生涯。