1. 程式人生 > >深度學習之卷積神經網路CNN及tensorflow程式碼實現示例

深度學習之卷積神經網路CNN及tensorflow程式碼實現示例

一、CNN的引入

在人工的全連線神經網路中,每相鄰兩層之間的每個神經元之間都是有邊相連的。當輸入層的特徵維度變得很高時,這時全連線網路需要訓練的引數就會增大很多,計算速度就會變得很慢,例如一張黑白的 28×28 的手寫數字圖片,輸入層的神經元就有784個,如下圖所示: 


這裡寫圖片描述 

若在中間只使用一層隱藏層,引數 w 就有 784×15=11760 多個;若輸入的是28×28 帶有顏色的RGB格式的手寫數字圖片,輸入神經元就有28×28×3=2352 個…… 。這很容易看出使用全連線神經網路處理影象中的需要訓練引數過多的問題。

而在卷積神經網路(Convolutional Neural Network,CNN)中,卷積層的神經元只與前一層的部分神經元節點相連,即它的神經元間的連線是非全連線的,且同一層中某些神經元之間的連線的權重 w

 和偏移 b 是共享的(即相同的),這樣大量地減少了需要訓練引數的數量。

卷積神經網路CNN的結構一般包含這幾個層:

  • 輸入層:用於資料的輸入
  • 卷積層:使用卷積核進行特徵提取和特徵對映
  • 激勵層:由於卷積也是一種線性運算,因此需要增加非線性對映
  • 池化層:進行下采樣,對特徵圖稀疏處理,減少資料運算量。
  • 全連線層:通常在CNN的尾部進行重新擬合,減少特徵資訊的損失
  • 輸出層:用於輸出結果

當然中間還可以使用一些其他的功能層:

  • 歸一化層(Batch Normalization):在CNN中對特徵的歸一化
  • 切分層:對某些(圖片)資料的進行分割槽域的單獨學習
  • 融合層:對獨立進行特徵學習的分支進行融合

二、CNN的層次結構

輸入層:

在CNN的輸入層中,(圖片)資料輸入的格式 與 全連線神經網路的輸入格式(一維向量)不太一樣。CNN的輸入層的輸入格式保留了圖片本身的結構。

對於黑白的 28×28 的圖片,CNN的輸入是一個 28×28 的的二維神經元,如下圖所示:


這裡寫圖片描述

而對於RGB格式的28×28圖片,CNN的輸入則是一個 3×28×28 的三維神經元(RGB中的每一個顏色通道都有一個 28×28 的矩陣),如下圖所示:


這裡寫圖片描述

卷積層:

在卷積層中有幾個重要的概念:

  • local receptive fields(感受視野)
  • shared weights(共享權值)

假設輸入的是一個 28×28 的的二維神經元,我們定義5×5 的 一個 local receptive fields(感受視野),即 隱藏層的神經元與輸入層的5×5個神經元相連,這個5*5的區域就稱之為Local Receptive Fields,如下圖所示:


這裡寫圖片描述

可類似看作:隱藏層中的神經元 具有一個固定大小的感受視野去感受上一層的部分特徵。在全連線神經網路中,隱藏層中的神經元的感受視野足夠大乃至可以看到上一層的所有特徵。

而在卷積神經網路中,隱藏層中的神經元的感受視野比較小,只能看到上一次的部分特徵,上一層的其他特徵可以通過平移感受視野來得到同一層的其他神經元,由同一層其他神經元來看:


這裡寫圖片描述

設移動的步長為1:從左到右掃描,每次移動 1 格,掃描完之後,再向下移動一格,再次從左到右掃描。

具體過程如動圖所示:


這裡寫圖片描述

這裡寫圖片描述

可看出 卷積層的神經元是隻與前一層的部分神經元節點相連,每一條相連的線對應一個權重 w 。

一個感受視野帶有一個卷積核,我們將 感受視野 中的權重 w 矩陣稱為 卷積核 ;將感受視野對輸入的掃描間隔稱為步長(stride);當步長比較大時(stride>1),為了掃描到邊緣的一些特徵,感受視野可能會“出界”,這時需要對邊界擴充(pad),邊界擴充可以設為 0 或 其他值。步長 和 邊界擴充值的大小由使用者來定義。

卷積核的大小由使用者來定義,即定義的感受視野的大小;卷積核的權重矩陣的值,便是卷積神經網路的引數,為了有一個偏移項 ,卷積核可附帶一個偏移項 b ,它們的初值可以隨機來生成,可通過訓練進行變化。

因此 感受視野 掃描時可以計算出下一層神經元的值為:

b+i=04j=04wijxij

對下一層的所有神經元來說,它們從不同的位置去探測了上一層神經元的特徵。

我們將通過 一個帶有卷積核感受視野 掃描生成的下一層神經元矩陣 稱為 一個feature map (特徵對映圖),如下圖的右邊便是一個 feature map:


這裡寫圖片描述

因此在同一個 feature map 上的神經元使用的卷積核是相同的,因此這些神經元 shared weights,共享卷積核中的權值和附帶的偏移。一個 feature map 對應 一個卷積核,若我們使用 3 個不同的卷積核,可以輸出3個feature map:(感受視野:5×5,布長stride:1)


這裡寫圖片描述

因此在CNN的卷積層,我們需要訓練的引數大大地減少到了 (5×5+1)×3=78個。

假設輸入的是 28×28 的RGB圖片,即輸入的是一個 

相關推薦

深度學習神經網路CNNtensorflow程式碼實現示例詳細介紹

一、CNN的引入 在人工的全連線神經網路中,每相鄰兩層之間的每個神經元之間都是有邊相連的。當輸入層的特徵維度變得很高時,這時全連線網路需要訓練的引數就會增大很多,計算速度就會變得很慢,例如一張黑白的 28×28 的手寫數字圖片,輸入層的神經元就有784個,如下圖所示:

深度學習神經網路CNNtensorflow程式碼實現示例

一、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中的平移不變性的來源有多種假設。   一個想法是平移不變性