深度學習之卷積神經網路CNN及tensorflow程式碼實現示例詳細介紹
一、CNN的引入
在人工的全連線神經網路中,每相鄰兩層之間的每個神經元之間都是有邊相連的。當輸入層的特徵維度變得很高時,這時全連線網路需要訓練的引數就會增大很多,計算速度就會變得很慢,例如一張黑白的
若在中間只使用一層隱藏層,引數
而在卷積神經網路(Convolutional Neural Network,CNN)中,卷積層的神經元只與前一層的部分神經元節點相連,即它的神經元間的連線是非全連線的,且同一層中某些神經元之間的連線的權重
卷積神經網路CNN的結構一般包含這幾個層:
- 輸入層:用於資料的輸入
- 卷積層:使用卷積核進行特徵提取和特徵對映
- 激勵層:由於卷積也是一種線性運算,因此需要增加非線性對映
- 池化層:進行下采樣,對特徵圖稀疏處理,減少資料運算量。
- 全連線層:通常在CNN的尾部進行重新擬合,減少特徵資訊的損失
- 輸出層:用於輸出結果
當然中間還可以使用一些其他的功能層:
- 歸一化層(Batch Normalization):在CNN中對特徵的歸一化
- 切分層:對某些(圖片)資料的進行分割槽域的單獨學習
- 融合層:對獨立進行特徵學習的分支進行融合
二、CNN的層次結構
輸入層:
在CNN的輸入層中,(圖片)資料輸入的格式 與 全連線神經網路的輸入格式(一維向量)不太一樣。CNN的輸入層的輸入格式保留了圖片本身的結構。
對於黑白的
而對於RGB格式的
卷積層:
在卷積層中有幾個重要的概念:
- local receptive fields(感受視野)
- shared weights(共享權值)
假設輸入的是一個
可類似看作:隱藏層中的神經元 具有一個固定大小的感受視野去感受上一層的部分特徵。在全連線神經網路中,隱藏層中的神經元的感受視野足夠大乃至可以看到上一層的所有特徵。
而在卷積神經網路中,隱藏層中的神經元的感受視野比較小,只能看到上一次的部分特徵,上一層的其他特徵可以通過平移感受視野來得到同一層的其他神經元,由同一層其他神經元來看:
設移動的步長為1:從左到右掃描,每次移動 1 格,掃描完之後,再向下移動一格,再次從左到右掃描。
具體過程如動圖所示:
可看出 卷積層的神經元是隻與前一層的部分神經元節點相連,每一條相連的線對應一個權重
一個感受視野帶有一個卷積核,我們將 感受視野 中的權重
卷積核的大小由使用者來定義,即定義的感受視野的大小;卷積核的權重矩陣的值,便是卷積神經網路的引數,為了有一個偏移項 ,卷積核可附帶一個偏移項
因此 感受視野 掃描時可以計算出下一層神經元的值為:
對下一層的所有神經元來說,它們從不同的位置去探測了上一層神經元的特徵。
我們將通過 一個帶有卷積核的感受視野 掃描生成的下一層神經元矩陣 稱為 一個feature map (特徵對映圖),如下圖的右邊便是一個 feature map:
因此在同一個 feature map 上的神經元使用的卷積核是相同的,因此這些神經元 shared weights,共享卷積核中的權值和附帶的偏移。一個 feature map 對應 一個卷積核,若我們使用 3 個不同的卷積核,可以輸出3個feature map:(感受視野:5×5,布長stride:1)
因此在CNN的卷積層,我們需要訓練的引數大大地減少到了
假設輸入的是
由圖可知:感受視野:
注:“
激勵層:
激勵層主要對卷積層的輸出進行一個非線性對映,因為卷積層的計算還是一種線性計算。使用的激勵函式一般為ReLu函式:
卷積層和激勵層通常合併在一起稱為“卷積層”。
池化層:
當輸入經過卷積層時,若感受視野比較小,布長stride比較小,得到的feature map (特徵圖)還是比較大,可以通過池化層來對每一個 feature map 進行降維操作,輸出的深度還是不變的,依然為 feature map 的個數。
池化層也有一個“池化視野(filter)”來對feature map矩陣進行掃描,對“池化視野”中的矩陣值進行計算,一般有兩種計算方式:
- Max pooling:取“池化視野”矩陣中的最大值
- Average pooling:取“池化視野”矩陣中的平均值
掃描的過程中同樣地會涉及的掃描布長stride,掃描方式同卷積層一樣,先從左到右掃描,結束則向下移動布長大小,再從左到右。如下圖示例所示:
其中“池化視野”filter:
最後可將 3 個
歸一化層:
1. Batch Normalization
Batch Normalization(批量歸一化)實現了在神經網路層的中間進行預處理的操作,即在上一層的輸入歸一化處理後再進入網路的下一層,這樣可有效地防止“梯度彌散”,加速網路訓練。
Batch Normalization具體的演算法如下圖所示:
每次訓練時,取 batch_size 大小的樣本進行訓練,在BN層中,將一個神經元看作一個特徵,batch_size 個樣本在某個特徵維度會有 batch_size 個值,然後在每個神經元
在卷積神經網路中進行批量歸一化時,一般對 未進行ReLu啟用的 feature map進行批量歸一化,輸出後再作為激勵層的輸入,可達到調整激勵函式偏導的作用。
一種做法是將 feature map 中的神經元作為特徵維度,引數
另一種做法是把 一個 feature map 看做一個特徵維度,一個 feature map 上的神經元共享這個 feature map的 引數
注:
Batch Normalization 演算法的訓練過程和測試過程的區別:
在訓練過程中,我們每次都會將 batch_size 數目大小的訓練樣本 放入到CNN網路中進行訓練,在BN層中自然可以得到計算輸出所需要的 均值 和 方差 ;
而在測試過程中,我們往往只會向CNN網路中輸入一個測試樣本,這是在BN層計算的均值和方差會均為 0,因為只有一個樣本輸入,因此BN層的輸入也會出現很大的問題,從而導致CNN網路輸出的錯誤。所以在測試過程中,我們需要藉助訓練集中所有樣本在BN層歸一化時每個維度上的均值和方差,當然為了計算方便,我們可以在 batch_num 次訓練過程中,將每一次在BN層歸一化時每個維度上的均值和方差進行相加,最後再進行求一次均值即可。
2. Local Response Normalization
近鄰歸一化(Local Response Normalization)的歸一化方法主要發生在不同的相鄰的卷積核(經過ReLu之後)的輸出之間,即輸入是發生在不同的經過ReLu之後的 feature map 中。
LRN的公式如下:
相關推薦
深度學習之卷積神經網路CNN及tensorflow程式碼實現示例詳細介紹
一、CNN的引入 在人工的全連線神經網路中,每相鄰兩層之間的每個神經元之間都是有邊相連的。當輸入層的特徵維度變得很高時,這時全連線網路需要訓練的引數就會增大很多,計算速度就會變得很慢,例如一張黑白的 28×28 的手寫數字圖片,輸入層的神經元就有784個,如下圖所示:
深度學習之卷積神經網路CNN及tensorflow程式碼實現示例
一、CNN的引入 在人工的全連線神經網路中,每相鄰兩層之間的每個神經元之間都是有邊相連的。當輸入層的特徵維度變得很高時,這時全連線網路需要訓練的引數就會增大很多,計算速度就會變得很慢,例如一張黑白的 28×28 的手寫數字圖片,輸入層的神經元就有784個,如下圖
乾貨 | 深度學習之卷積神經網路(CNN)的模型結構
微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 前言 在前面我們講述了DNN的模型與前向反向傳播演算法。而在DNN大類中,卷積神經網路(Convolutional Neural Networks,以下簡稱CNN)是最
Udacity深度學習之卷積神經網路(CNN)
卷積神經網路 卷積網路簡介 卷積神經網路 引數共享 padding 維度 卷積網路簡介 卷積神經網路一個時下非常流行
乾貨 | 深度學習之卷積神經網路(CNN)的前向傳播演算法詳解
微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 前言 在(乾貨 | 深度學習之卷積神經網路(CNN)的模型結構)中,我們對CNN的模型結構做了總結,這裡我們就在CNN的模型基礎上,看看CNN的前向傳播演算法是什麼樣
深度學習:卷積神經網路CNN入門
該文是,並假設你理解前饋神經網路。 目錄 視覺感知 畫面識別是什麼識別結果取決於什麼 影象表達 畫面識別的輸入畫面不變形 前饋神經網路做畫面識別的不足卷積神經網路做畫面識別 區域性連線空間共享輸出空間表達Depth維的處理Zero padding形狀、概念抓取多filte
深度學習之卷積神經網路入門(2)
卷積神經網路入門學 作者:hjimce 卷積神經網路演算法是n年前就有的演算法,只是近年來因為深度學習相關演算法為多層網路的訓練提供了新方法,然後現在電腦的計算能力已非當年的那種計算水平,同時現在的訓練資料很多,於是神經網路的相關演算法又重新火了起來,因此卷積神經網路就又
【深度學習】卷積神經網路CNN基本知識點
卷積神經網路與前面學的常規神經網路很相似,也有輸入、權重、偏差、損失函式、啟用函式、全連線層等概念,之前的一些小的技巧也仍然適用。 與常規神經網路的對比 卷積神經網路(Convolutional Neural Networks,CNNs / ConvNe
深度學習之卷積神經網路原理詳解(一)
初探CNN卷積神經網路 1、概述 典型的深度學習模型就是很深層的神經網路,包含多個隱含層,多隱層的神經網路很難直接使用BP演算法進行直接訓練,因為反向傳播誤差時往往會發散,很難收斂 CNN節省訓練開銷的方式是權共享weight sharing,讓一組神經元
深度學習之卷積神經網路程式設計實現(二)
void conv_bprop(Layer *layer, Layer *prev_layer, bool *pconnection) { int index = 0; int size = prev_layer->map_w * prev_layer->map_h; // delta
深度學習筆記-卷積神經網路CNN與迴圈神經網路RNN有什麼區別?
CNN與RNN本質的不同就是所基於的假設不同,由於核心假設的不同,導致實現方式的差異。 CNN 首先理解什麼叫做卷積,或者說為什麼要翻譯為卷積神經網路。 卷積的定義:https://baike.baidu.com/item/%E5%8D%B7%E7%A7%AF/94110
Udacity深度學習之卷積神經網路概念解析
一文卷積神經網路引數解釋 `patch`和`filter` 例項說明 tride Filter Depth 一提到卷積神經網路,有些概念我們需要解析一下,要不然一說卷積神經網路可能會發懵。 patch和fil
深度學習之卷積神經網路
卷積網路介紹 卷積神經網路是一種多層神經網路,擅長處理影象特別是大影象的相關機器學習問題。 卷積網路通過一系列方法,成功將資料量龐大的影象識別問題不斷降維,最終使其能夠被訓練。CNN最早由Yann LeCun提出並應用在手寫字型識別上(MINST)。LeCun提出的
深度學習:Keras入門(二)之卷積神經網路(CNN)
說明:這篇文章需要有一些相關的基礎知識,否則看起來可能比較吃力。 1.卷積與神經元 1.1 什麼是卷積? 簡單來說,卷積(或內積)就是一種先把對應位置相乘然後再把結果相加的運算。(具體含義或者數學公式可以查閱相關資料)
深度學習:卷積神經網路物體檢測之感受野大小計算
1 感受野的概念 在卷積神經網路中,感受野的定義是 卷積神經網路每一層輸出的特徵圖(feature map)上的畫素點在原始影象上對映的區域大小。 RCNN論文中有一段描述,Alexnet網路pool5輸出的特徵圖上的畫
【深度學習】卷積神經網路(CNN)
卷積神經網路(Convolutional Neural NetWork,CNN): 自然語言處理、醫藥發現、災難氣候發現、人工智慧程式。 輸入層: 整個神經網路的輸入 卷積層: 卷積神經網路中最重要的部分,卷積層中每一個節點的輸入只是上一層神經網路的一小塊,一般為3
深度學習FPGA實現基礎知識10(Deep Learning(深度學習)卷積神經網路(Convolutional Neural Network,CNN))
第一點,在學習Deep learning和CNN之前,總以為它們是很了不得的知識,總以為它們能解決很多問題,學習了之後,才知道它們不過與其他機器學習演算法如svm等相似,仍然可以把它當做一個分類器,仍然可以像使用一個黑盒子那樣使用它。 第二點,Deep Learning強大的地方就是可以利用網路中間某一
深度學習:卷積神經網路,卷積,啟用函式,池化
卷積神經網路——輸入層、卷積層、啟用函式、池化層、全連線層 https://blog.csdn.net/yjl9122/article/details/70198357?utm_source=blogxgwz3 一、卷積層 特徵提取 輸入影象是32*32*3,3是它的深度(即R
深度學習筆記——卷積神經網路
程式碼參考了零基礎入門深度學習(4) - 卷積神經網路這篇文章,我只對程式碼裡可能存在的一些小錯誤進行了更改。至於卷積神經網路的原理以及程式碼裡不清楚的地方可以結合該文章理解,十分淺顯易懂。 import numpy as np from functools import reduce fro
深度學習基礎--卷積神經網路的不變性
卷積神經網路的不變性 不變性的實現主要靠兩點:大量資料(各種資料);網路結構(pooling) 不變性的型別 1)平移不變性 卷積神經網路最初引入區域性連線和空間共享,就是為了滿足平移不變性。 關於CNN中的平移不變性的來源有多種假設。 一個想法是平移不變性