cnn算法
?
機器學習算法完整版見fenghaootong-github
卷積神經網絡原理(CNN)
卷積神經網絡CNN的結構一般包含這幾個層:
- 輸入層:用于數據的輸入
- 卷積層:使用卷積核進行特征提取和特征映射
- 激勵層:由于卷積也是一種線性運算,因此需要增加非線性映射
- 池化層:進行下采樣,對特征圖稀疏處理,減少數據運算量。
- 全連接層:通常在CNN的尾部進行重新擬合,減少特征信息的損失
CNN的三個特點:
- 局部連接:這個是最容易想到的,每個神經元不再和上一層的所有神經元相連,而只和一小部分神經元相連。這樣就減少了很多參數
-
權值共享:一組連接可以共享同一個權重,而不是每個連接有一個不同的權重,這樣又減少了很多參數。
-
下采樣:可以使用Pooling來減少每層的樣本數,進一步減少參數數量,同時還可以提升模型的魯棒性。
輸入層
在CNN的輸入層中,(圖片)數據輸入的格式 與 全連接神經網絡的輸入格式(一維向量)不太一樣。CNN的輸入層的輸入格式保留了圖片本身的結構。
對于黑白的 28×28 的圖片,CNN的輸入是一個 28×28 的的二維神經元:
而對于RGB格式的28×28圖片,CNN的輸入則是一個 3×28×28 的三維神經元(RGB中的每一個顏色通道都有一個 28×28 的矩陣)
卷積層
這一層就是求內積
左邊是輸入,中間部分是兩個不同的濾波器Filter w0、Filter w1,最右邊則是兩個不同的輸出。
最左邊是輸出為:
?
ai.j=f(∑m=02∑n=02wm,nxi+m,j+n+wb)ai.j=f(∑m=02∑n=02wm,nxi+m,j+n+wb)?
以上圖為例:
- wm,nwm,n:filter的第m行第n列的值
- xi,jxi,j: 表示圖像的第i行第j列元素
- wbwb:用表示filter的偏置項
- ai,jai,j:表示Feature Map的第i行第j列元素
- ff:表示Relu激活函數
激勵層
激勵層主要對卷積層的輸出進行一個非線性映射,因為卷積層的計算還是一種線性計算。使用的激勵函數一般為ReLu函數:
?
f(x)=max(x,0)f(x)=max(x,0)?
卷積層和激勵層通常合并在一起稱為“卷積層”。
池化層
當輸入經過卷積層時,若感受視野比較小,布長stride比較小,得到的feature map (特征圖)還是比較大,可以通過池化層來對每一個 feature map 進行降維操作,輸出的深度還是不變的,依然為 feature map 的個數。
池化層也有一個“池化視野(filter)”來對feature map矩陣進行掃描,對“池化視野”中的矩陣值進行計算,一般有兩種計算方式:
- Max pooling:取“池化視野”矩陣中的最大值
- Average pooling:取“池化視野”矩陣中的平均值
全連接層
- 和神經網絡一樣
卷積神經網絡的訓練
- 最后,根據梯度下降法則更新每個權重即可。
實例
CNN實例
轉載于:https://www.cnblogs.com/htfeng/p/9931745.html
總結
- 上一篇: vscode 使用 ssh 登录
- 下一篇: Intel官宣开发RISC-V处理器:明