CNN Mnist
參考鏈接:https://www.codeproject.com/articles/16650/neural-network-for-recognition-of-handwritten-digi#Introduction
網絡結構
Mnist的網絡結構有5層:
(1)第一層為輸入層,輸入層的圖片大小為29*29,也就是說,輸入層的節點有841=29*29個;
(2)第二層為卷積層,卷積核的大小為5*5,每次偏移兩個像素。所以第二層的特征圖大小為13*13。這一層使用了6個不同的卷積核,所以有6個特征圖。所以這一層的節點的個數為1014=13*13*6。權值的個數為156=(5*5+1)*6個,加1是因為有個偏移值。
(3)第三層的卷積層,卷積核大小5*5,每次偏移兩個像素。所以第三層的特征圖大小為5*5。這一層使用了50個不同的卷積核,所以有50個特征圖。所以這一層的節點的個數為1250=5*5*50。權值的個數為7800=(5*5+1)*6*50個。
(4)第四層為全連接層,有100個節點,所以權值有125100=(1250+1)*100。
(5)第五層為全連接層,也是輸出層,有10個節點,所以權值有1010=(100+1)*10。
參數更新推導
我們用n表示層數。對于某一層n,定義一些變量如下:
(1)$x_{n}$,這一層的輸出;
(2)$y_{n}$,這一層的輸入;
(3)$W_{n}^{ij}$,連接這一層的節點i和上一層的節點j的權值.
(4)$C_{n}$,這一層的節點數
另外
(1)定義激活函數為F。其中$y_{n}^{i}=\sum_{j=0}^{C_{n-1}}W_{n}^{ij}x_{n-1}^{j}$,j=0為偏移值,$x_{n}^{i}=F(y_{n}^{i})$。使用的激活函數為$F(y)=\frac{e^{y}-e^{-y}}{e^{y}+e^{-y}}$,其中$\frac{dF}{dy}=1-F(x)^{2}=1-x^{2}$。這里定義$G(x)=1-x^{2}$
(2)定義誤差為$E$,GroundTrue為T,最后一層(我們這里就是第五層的輸出)輸出為$x_{n}$,$E=\frac{1}{2}\sum (x_{n}^{i}-T^{i})^{2}$。所以$\frac{\partial E}{\partial x_{n}^{i}}=x_{n}^{i}-T^{i}$。
現在假設我們知道了第n層的$\frac{\partial E}{\partial x_{n}^{i}}$.下面計算$\frac{\partial E}{\partial y_{n}^{i}}$.
$\frac{\partial E}{\partial y_{n}^{i}}=\frac{\partial E}{\partial x_{n}^{i}}\frac{\partial x_{n}^{i}}{\partial y_{n}^{i}}=\frac{\partial E}{\partial x_{n}^{i}}G(x_{n}^{i})$
接著計算$\frac{\partial E}{\partial W_{n}^{ij}}$
$\frac{\partial E}{\partial W_{n}^{ij}}=\frac{\partial E}{\partial y_{n}^{i}}\frac{\partial y_{n}^{i}}{\partial W_{n}^{ij}}=\frac{\partial E}{\partial y_{n}^{i}}x_{n-1}^{j}$
現在可以更新權值了:$(W_{n}^{ij})_{new}=(W_{n}^{ij})_{old}-LearningRate\cdot \frac{\partial E}{\partial W_{n}^{ij}}$。學習率$LearningRate$通常是一個很小的值。
現在計算$\frac{\partial E}{\partial x_{n-1}^{i}}$.
$\frac{\partial E}{\partial x_{n-1}^{i}}=\frac{\partial E}{\partial y_{n}}\frac{\partial y_{n}}{\partial x_{n-1}^{i}}=\sum_{k=1}^{C_{n}}W_{n}^{ki}\frac{\partial E}{\partial y_{n}^{k}}$
這樣就能重新按照上面的式子計算$n-1$層了。
一直迭代這個過程,直到第一層。
?
轉載于:https://www.cnblogs.com/jianglangcaijin/p/6374132.html
總結
- 上一篇: hdu 1753大小数相加
- 下一篇: 微服务架构分布式事务解决方案设计思路-(