官术网_书友最值得收藏!

2.3 實現神經網絡層之間節點的連接

神經網絡多層次實現的時候涉及權重以及層與層之間的連接。神經元網絡的權重較復雜,權重涉及兩個層,權重是兩個層之間的連接線,有來源節點及目標節點。接下來我們實現神經網絡層之間節點的連接。在創建不同層連接的時候需實現權重,在entity目錄下創建Weight.py的實體,在Weight.py中創建一個權重類(Weight)。

chapter2_Create_AI_Framework的Weight.py源代碼如下:

第5~10行代碼:設置和訪問權重的ID。權重類的set_weight_index方法第一個參數是self,因為創建權重實例的時候可以有很多實體,因此傳入self創建實例。

第12~17行代碼:設置和訪問權重的來源節點。權重涉及前面一層的節點,也涉及后面一層的節點。例如,輸入層與隱藏層之間的連接權重。神經元節點的Index很重要,這里權重的from_node_index就設置為來源節點的Index。

第20~25行代碼:設置和訪問權重的目標節點。

第27~32行代碼:設置和訪問權重的值,權重的核心內容是權重值。

接下來實現權重與不同的神經元網絡層的連接。在service目錄中創建一個業務類NetworkConnection.py。前面創建了神經元的網絡結構,但沒有創建層之間的連接,現在要把不同的網絡層連接起來。如果不把不同的網絡層連接起來,激活函數就無法把前一層的內容傳遞給下一層。

chapter2_Create_AI_Framework版本的NetworkConnection.py(v1)源代碼如下:

第8行代碼:構建create_Weights()方法。神經網絡有多層時,第一層的輸出是第二層的輸入,第二層的輸出是第三層的輸入,以此類推。建立網絡之間的連接要做第一件事情是創建權重,不同層之間都通過權重連接,網絡圖中的一條條連線就是權重。神經網絡有很多不同的層,而且有很多不同的權重。create_Weights()方法中不需知道層的信息,因為神經元節點中已經包含層的信息。create_Weights()方法傳入的第一個參數是神經元節點集,第二個參數是輸入特征數,第三個參數是隱藏層神經元節點列表。

第9行代碼:創建一個權重列表,存放所有的權重信息。

第12行代碼:獲取整個神經網絡的層數。兩個層次之間中間會有權重,整個神經網絡的層數=輸入層數+隱藏層數+輸出層數。如圖2-19所示,這里的輸入層是1層,輸出層是1層,再加上隱藏層的層數。

第15行代碼:定義權重的ID。因為有很多個權重,通過weight_index記錄權重的ID。

第18行代碼:進行外層循環,循環遍歷不同的層構成權重,權重代表了神經網絡中前后層之間的聯系。圖2-19中有4層,輸入層、第一個隱藏層、第二個隱藏層、輸出層,構建的權重會有3列,權重發生于前后兩個層之間,所以循環的次數要從總的層數量中減去1,代表有多少個不同類型的權重。

第21~58行代碼:進行內層循環,遍歷所有的神經元節點。神經網絡層與層之間會有很多的權重。

圖2-19 整個神經網絡的層數

第24行代碼:判斷當前節點nodes[j]所在的具體的層。每個節點都有自己的索引,如果當前節點nodes[j]所在的層等于i,此時已經獲得了一個當前節點nodes[j]。

第26行代碼:再次循環遍歷所有的節點,核心目的是判斷不同節點之間的層的先后關系,考慮剛才的節點nodes[j]和現在的節點nodes[k]之間的層關系,如果是前一個層,那兩個節點nodes[j]、nodes[k]之間就有權重。這時候可能會有性能問題,但我們主要關注神經網絡的實現,暫不考慮性能的問題。判斷一下當前獲得節點nodes[k]的層是否等于i+1,目的是找到節點nodes[k]前面的層的某個節點,只要是前一個層的節點,那它們之間就有權重關系,構成權重的前提條件是有前后相鄰的層關系,如圖2-20所示。

圖2-20 構建權重

第33~36行代碼:創建權重的時候必須設置權重的源節點、目標節點以及權重的index。權重的set_from_index、set_to_index需填寫是什么節點的index,這個比較關鍵,因為從nodes[j]觸發到nodes[k]之間創建權重,節點所在的層ID越小,就越在前面,這里nodes[j]在第i層,而nodes[k]在第i+1層,因此,weight.set_from_index設置為出發點nodes[j].get_index(),weight.set_to_index設置為目的點nodes[k].get_index()。

主站蜘蛛池模板: 夹江县| 常宁市| 同德县| 绩溪县| 阳高县| 定州市| 临洮县| 平武县| 应城市| 肃宁县| 诸城市| 赣州市| 阿拉善右旗| 行唐县| 梅州市| 汉沽区| 潼南县| 葫芦岛市| 威信县| 民县| 绥棱县| 肥城市| 堆龙德庆县| 崇义县| 峨眉山市| 尚志市| 衢州市| 芒康县| 馆陶县| 临泉县| 监利县| 河池市| 比如县| 渭源县| 宝应县| 普陀区| 怀化市| 万州区| 杭州市| 尚义县| 东莞市|