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

2.5 實現多個隱藏層

現在我們回顧一下,在chapter2_Create_AI_Framework的NetworkStructure.py(v1)中,神經元網絡不同層次的信息還沒有設置,本節就來對神經元節點設置層次信息。

在chapter2_Create_AI_Framework版本的NetworkStructure.py在NetworkStructure.py(v1)微調:

(1)在NetworkStructure.py(v1)代碼第15行之后新增一行代碼,增加對輸入層偏愛因子節點的層次設置。輸入層偏愛因子層次設置為0。

(2)在NetworkStructure.py(v1)代碼第32行之后新增一行代碼,增加對隱藏層偏愛因子節點的層次設置。隱藏層偏愛因子節點層次設置為i+1,隱藏層的層次i從0開始,因此加上1。

(3)在NetworkStructure.py(v1)代碼第45行之后新增一行代碼,增加對隱藏層神經元節點的層次設置。隱藏層神經元節點層次設置為i+1,隱藏層的層次i從0開始,因此加上1。

(4)在NetworkStructure.py(v1)代碼第59行之后新增一行代碼,增加對輸出層神經元節點的層次設置。輸出層神經元節點層次設置為1 + len(hidden_layers),層次數加1。

回顧一下,在chapter2_Create_AI_Framework的NetworkStructure.py(v1)對輸入層的節點還沒有創建,這里加上輸入層節點的創建代碼,輸入層節點跟輸入的特征有關系。

在NetworkStructure.py(v1)代碼中第25行之后新增代碼。

第26行代碼:for循環遍歷輸入特征數,創建輸入層神經元節點。i索引值從0開始。

第27行代碼:打印輸入層節點的信息,格式為V和i+1的信息。

第29行代碼:設置輸入層神經元節點的層次信息。

第32行代碼:設置輸入層神經元節點的set_is_bias_unit為False,創建的是輸入層神經元節點本身,而不是偏愛因子節點。

如圖2-21所示,輸入層在已經創建的偏愛因子之后增加創建神經元節點。

圖2-21 創建輸入層節點

至此已經初步實現了NetworkStructure.py神經元節點構建、NetworkConnection.py神經網絡層次的權重連接。回到入口程序chapter2_Create_AI_Framework的Neuron_Network_Entry.py(v1),調用NetworkConnection.create_Weights權重連接:

  • Neuron_Network_Entry.py(v1)第15行以后新增代碼。在NetworkConnection.create_Weights方法中傳入nodes,num_of_features, hidden_layers參數。
  • 新增代碼,打印神經元節點中哪些節點是偏愛因子節點。

運行入口程序chapter2_Create_AI_Framework的Neuron_Network_Entry.py代碼,運行結果如下:在hidden_layers=[4,2]時,運行結果的第1行中的第一個“+1”表示輸入層的偏愛因子節點名字,V1表示輸入層的第一個輸入節點,V2表示輸入層的第2個輸入節點;第2行“Hidden layer creation”的1是第1層隱藏層偏愛因子的名字,之后是第一個隱藏層的4個神經元節點的名字。第3行“Hidden layer creation”的2是第2層隱藏層偏愛因子的名字,之后是第2個隱藏層的2個神經元節點的名字。第4行打印輸出層的節點名字Output;第5~16行的記錄打印了節點是否為偏愛因子的節點;第17~49行的記錄打印了層次之間節點的權重信息。

以上第17~49行記錄打印的層之間的權重連接關系如圖2-22所示。

圖2-22 權重連接包含偏愛因子節點的神經網絡圖

NetworkConnection.py代碼中構成權重的前提條件是有前后相鄰的層關系,權重是發生在神經元節點之間的,跟偏愛因子沒關系,比較的節點之間不能是偏愛因子成員,所以要去掉偏愛因子的節點。圖中第0個節點、第3個節點、第8個節點都是偏愛因子節點,也進行了權重的計算,權重的連接不應包括偏愛因子的節點,因此,接下來的工作需將偏愛因子從權重連接關系中去掉。

在chapter2_Create_AI_Framework版本的NetworkConnection.py(v1)的基礎上進行微調:

在NetworkConnection.py(v1)的30行代碼之后新增代碼,判斷nodes[k]、nodes[j]節點是否為偏愛因子節點。

再次運行入口程序chapter2_Create_AI_Framework的Neuron_Network_Entry.py代碼,運行結果如下:這里是hidden_layers=[4,2]為兩個隱藏層,第一個隱藏層有4個神經元,第二個隱藏層有2個神經元。整個神經網絡有12個節點,其中ID為0、3、8的Node為偏愛因子節點,ID為1、2的是輸入層,分別關聯到4、5、6、7節點,然后4、5、6、7節點分別關聯到下一個隱藏層的節點9、10節點;9、10節點最后輸出到輸出層節點ID 11,打印出各權重的結果。此時的第16~33行記錄中權重連接已經不包括偏愛因子節點的信息:

代碼調整以后,第16~33行記錄的層之間的權重連接關系如圖2-23所示,此時,盤古人工智能框架的神經網絡權重關系圖和TensorFlow的可視化圖是類似的,權重連接已經不包括偏愛因子節點,如圖2-23所示。

圖2-23 權重連接去掉偏愛因子節點的神經網絡圖

主站蜘蛛池模板: 彰化县| 治县。| 宜兰县| 页游| 五常市| 郧西县| 新源县| 济南市| 濮阳市| 双桥区| 六枝特区| 偏关县| 微山县| 高唐县| 普兰店市| 巴彦淖尔市| 清徐县| 奉贤区| 凌源市| 金昌市| 南澳县| 和田市| 博爱县| 上高县| 定结县| 启东市| 辛集市| 龙门县| 高台县| 江都市| 平昌县| 建平县| 合川市| 桑日县| 桂林市| 加查县| 微博| 阿克陶县| 房产| 互助| 丹寨县|