Tensorflow學習筆記No.4.1

使用CNN卷積神經網絡(1)

簡單介紹CNN卷積神經網絡的概念和原理。html

已經瞭解的小夥伴能夠跳轉到Tensorflow學習筆記No.4.2學習如和用Tensorflow實現簡單的卷積神經網絡。算法

1.CNN簡介(概念簡介)

  卷積神經網絡(Convolutional Neural Network,CNN)是一種前饋神經網絡,它的人工神經元能夠響應一部分覆蓋範圍內的周圍單元,對於大型圖像處理有出色表現。 網絡

卷積神經網絡一般包含如下幾種層:ide

  • 卷積層(Convolutional layer),卷積神經網路中每層卷積層由若干卷積單元組成,每一個卷積單元的參數都是經過反向傳播算法優化獲得的。卷積運算的目的是提取輸入的不一樣特徵,第一層卷積層可能只能提取一些低級的特徵如邊緣、線條和角等層級,更多層的網絡能從低級特徵中迭代提取更復雜的特徵。
  • 線性整流層(Rectified Linear Units layer, ReLU layer),這一層神經的活性化函數(Activation function)使用線性整流(Rectified Linear Units, ReLU)。
  • 池化層(Pooling layer),一般在卷積層以後會獲得維度很大的特徵,將特徵切成幾個區域,取其最大值或平均值,獲得新的、維度較小的特徵。
  • 全鏈接層( Fully-Connected layer), 把全部局部特徵結合變成全局特徵,用來計算最後每一類的得分。

1.1卷積層(Convolutional layer)

  1.1.1局部感知(Local Connectivity)函數

  普通神經網絡把輸入層和隱含層進行「全鏈接(Full Connected)「的設計。從計算的角度來說,相對較小的圖像從整幅圖像中計算特徵是可行的。可是,若是是更大的圖像(如 96x96 的圖像),要經過這種全聯通網絡的這種方法來學習整幅圖像上的特徵,從計算角度而言,將變得很是耗時學習

  卷積層解決這類問題的一種簡單方法是對隱含單元和輸入單元間的鏈接加以限制:每一個隱含單元僅僅只能鏈接輸入單元的一部分。每一個隱含單元鏈接的輸入區域大小叫R神經元的感覺野(receptive field)優化

  因爲卷積層的神經元也是三維的,因此也具備深度。卷積層的參數包含一系列過濾器(filter),每一個過濾器訓練一個深度,有幾個過濾器輸出單元就具備多少深度。spa

  具體以下圖所示,樣例輸入單元大小是32×32×3, 輸出單元的深度是5, 對於輸出單元不一樣深度的同一位置,與輸入圖片鏈接的區域是相同的,可是參數(過濾器)不一樣。設計

示例

  1.1.2空間排列(Spatial arrangement)3d

  一個輸出單元的大小有如下三個量控制:depth, stride 和 zero-padding。

  • 深度(depth) : 顧名思義,它控制輸出單元的深度,也就是filter的個數,鏈接同一塊區域的神經元個數。又名:depth column
  • 步幅(stride):它控制在同一深度的相鄰兩個隱含單元,與他們相鏈接的輸入區域的距離。若是步幅很小(好比 stride = 1)的話,相鄰隱含單元的輸入區域的重疊部分會不少; 步幅很大則重疊區域變少。
  • 補零(zero-padding) : 咱們能夠經過在輸入單元周圍補零來改變輸入單元總體大小,從而控制輸出單元的空間大小。

  1.1.3卷積(Convolution)

  這裏簡單介紹一下卷積的工做原理

  考慮一個大小爲5×5的圖像,和一個3×3的卷積核。這裏的卷積核共有9個參數。這種狀況下,卷積覈實際上有9個神經元,他們的輸出又組成一個3×3的矩陣,稱爲特徵圖。第一個神經元鏈接到圖像的第一個3×3的局部,第二個神經元則鏈接到第二個局部(注意,有重疊!就跟你的目光掃視時也是連續掃視同樣)。具體以下圖所示。

卷積

1.2池化層(Pooling Layer)

  池化(pool)即下采樣(downsamples),目的是爲了減小特徵圖。池化操做對每一個深度切片獨立,規模通常爲 2*2,相對於卷積層進行卷積運算,池化層進行的運算通常有如下幾種:
  * 最大池化(Max Pooling)。取4個點的最大值。這是最經常使用的池化方法。
  * 均值池化(Mean Pooling)。取4個點的均值。
  * 高斯池化。借鑑高斯模糊的方法。不經常使用。
  * 可訓練池化。訓練函數 ff ,接受4個點爲輸入,出入1個點。不經常使用。

最多見的池化層是規模爲2*2, 步幅爲2,對輸入的每一個深度切片進行下采樣。每一個MAX操做對四個數進行,以下圖所示:
池化

  池化操做將保存深度大小不變

  若是池化層的輸入單元大小不是二的整數倍,通常採起邊緣補零(zero-padding)的方式補成2的倍數,而後再池化。

1.3全鏈接層(Fully-connected layer)

  將卷積層與池化層中獲得的張量的維度進行變換,轉變成能夠進行分類的一維數據。

 

4.2中將介紹如何用Tensorflow實現CNN卷積神經網絡。

相關文章
相關標籤/搜索