Tensorflow筆記:卷積神經網絡

前言:

  在全連接網絡中,待優化的參數過多,全連接NN:每個神經元都與前後相鄰層的每一個神經元相連接,輸入爲特徵值,輸出爲預測的結果,因此參數個數數量龐大,網絡參數的計算公式:

參數個數:\sum \left ( forwardlayer\cdot backwardlayer+b \right )

   例如:對於一張28*28低像素的圖片來說,輸入節點爲784,中間層有500個節點,輸出層有10個節點,那麼第一層參數爲:784*500個w+500個b,第二層參數爲500\cdot 10w+10b,一共397510個優化的參數,數量龐大,不利於建模與計算。

 

 

待優化的參數過多會容易造成參數的過擬合。這就需要一個簡化參數量的方法,在實際應用中,先對原始圖像進行特徵提取,將提取到的特徵餵給全連接網絡。

定義:

卷積就是特徵提取的一種方法:

一般用一個正方形的卷積核,保證正方形的中心遍歷圖片上的每一個像素點,圖片區域內,相對應的\small \sum(每一個像素點的像素值)乘以(卷積核內相對應點的權重),求和之後在加上偏置。

 

 

原圖5*5的圖像,經過卷積覈計算爲:\small \left ( -1 \right )\cdot 1+0\cdot 0+1\cdot 2+\left ( -1 \right )*5+0\cdot 4+1\cdot 2+\left ( -1 \right )\cdot 3+0\cdot 4+1\cdot 5+1=1

 

 

 輸出圖片邊長=(輸入圖片邊長-卷積核長+1)/步長。在上圖中:得到(5-3+1)/1=3

另外爲保證原始圖片特徵的最佳提取,邊緣的數據更好的保留,可以在外邊一層加入池化層padding,在全零填充中,輸出圖片的尺寸爲:輸入圖片邊長/步長;

在TensorFlow框架中,用參數padding=‘ SAME ’或padding=‘ VALID ’表示。

tf.nn.conv2d(輸入描述,eg.[batch,5,5,1] #分辨率5*5,通道數爲1

卷積核描述,eg.[3,3,1,16] #行列數:3*3,通道數爲1,核個數爲16,卷積圖片操作之後,輸出是16通道

核滑動步長,eg.[1,1,1,1]  #行步長,列步長,固定第一個和第四個參數爲1.

padding=' VALID ')

池化(Pooling)

池化用於減少特徵數量,簡化輸入圖片。常用的池化方法有:

  • 最大值池化:提取圖片紋理
  • 均值池化:保留背景特徵

 

在TensorFlow中計算池化:

pool=tf.nn.max_pool(輸入描述,eg,[batch,28,28,6]

池化該描述(僅大小),eg.[1,2,2,1]

池化核滑動步長,eg.[1,2,2,1]

padding='SAME')

 捨棄(Dropout)

在神經網絡的訓練過程中,將一部分神經元按照一定概率從神經網絡中暫時捨棄。防止過擬合,這種捨棄僅僅是在訓練過程中的捨棄,在使用時被捨棄的神經元恢復鏈接。

 

 

 在TensorFlow中使用捨棄:

tf.nn.dropout(上層輸出,暫時捨棄的概率)

if train: 輸出=tf.nn.dropout(上層輸出,暫時捨棄的概率)

總結

 卷積神經網絡:藉助卷積核(kernel)提取特徵後,送入全連接網絡。

CNN模型的主要模塊:

CNN模型的發展歷史:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章