簡單的介紹:
1.總體上的架構是,將全連線層,輸出層進行封裝,同時引入了connector的資料結構,用於連線兩層,使用了模板的專用化技術,可以連線特定型別的兩層,其中,在bp神經網路中,後一層要向connector提交閾值的修改權(指標),在反向傳播時還要提交反響傳播因子,前一層通過connector獲取傳播因子以及修改下一層的閾值
環境依賴:eigen3
下面細說一下
(1)神經元
所有神經元繼承於neutron
neutron的直接繼承者有三個,分別是unupdatablenwneutron(無權不可更新神經元)unupdatablewneutron(有權不可更新神經元)updatablewneutron(有權可更新神經元)
fullconectedneutron(全連線層神經元)
繼承自updatablewneutron(全連線層神經元)
getpthresold() 返回自身閾值指標
getbackforwardfactor() 返回反向傳播因子
update() 根據連線的connector的資料更新自身權值,修改下一層閾值
outputneutron(輸出層神經元)
繼承自unupdatablenwneutron(無權不可更新神經元)
initexpect(需要設定期望輸出)
(2)層
所有layer繼承自
template
class layer
{};----
template
class fullconectedlayher : public layer> 全連線層
繼承自 神經元型別是全連線神經元的 layer
每個connector必須呼叫_init(...)
使用者必須呼叫init(...)
通過陣列管理神經元fullconectedneutron*neutrons;
----
template
class outputlayer : public layer> 輸出層
繼承自 神經元型別是輸出層神經元 的layer
initexpects(...) 初始化預期輸出 提供 eigen3的介面
(3)function
提供函式的計算以及導數,目前支援 liner,sigmog, prelu
(4)connector
所有connector繼承自
template
class connector
{};通過模板的專用化指定connector所支援的層的連線,建立不支援的連線,將無法使用
template<>
class connector, outputlayer> (連線全連線層以及輸出層sigmod)
init(...) 使用者必須呼叫init()
forward() 前向
backforward() 反向傳播
template<>
class connector, outputlayer>(連線全連線層以及輸出層prelu)
template<>
class connector, fullconectedlayher>(連線全連線層以及全鏈結層sigmod)
template<>
class connector, fullconectedlayher>(連線全連線層以及全鏈結層prelu)
template<>
class connector, fullconectedlayher>(用於充當輸入層的全連線層 與 全連線層連線)
template<>
class connector, fullconectedlayher>
(4)net
詳見demo,形象來講就是通過connector控制layer的forward和backforward
機器學習,深度學習,神經網路,深度神經網路
先來說一下這幾者之間的關係 人工智慧包含機器學習,機器學習包含深度學習 是其中比較重要的分支 深度學習源自於人工神經網路的研究,但是並不完全等於傳統神經網路。所以深度學習可以說是在傳統神經網路基礎上的公升級。神經網路一般有輸入層 隱藏層 輸出層,一般來說隱藏層大於2的神經網路就叫做深度神經網路,深度...
神經網路和深度學習(三)深層神經網路
1 深層神經網路中的前向傳播 1 單資料情況 z 1 w 1 x b 1 a 1 g 1 z 1 z 2 w 2 a 1 b 2 a 2 g 2 z 2 z l w l a l 1 b l a l g l z l y 2 向量化情況 z 1 w 1 x b 1 a 1 g 1 z 1 z 2 w 2...
神經網路和深度學習 淺層神經網路
乙個淺層神經網路示意圖 如圖所示,表示乙個單隱層的網路結構。這裡主要需要注意的是,層與層之間引數矩陣的規格大小 隱藏層和輸出層之間 由上面我們可以總結出,在神經網路中,我們以相鄰兩層為觀測物件,前面一層作為輸入,後面一層作為輸出,兩層之間的w引數矩陣大小為 n out,nin b引數矩陣大小為 n ...