1. 程式人生 > >吳恩達深度學習系列課程筆記:卷積神經網路(一)

吳恩達深度學習系列課程筆記:卷積神經網路(一)

本系列文章將對吳恩達在網易公開課“深度學習工程師”微專業內容進行筆記總結,這一部分介紹的是“卷積神經網路”部分。

1、計算機視覺

計算機視覺在我們還是生活中有非常廣泛的應用,以下幾個是最常見的例子:

  • 影象分類:
    可以對影象中的物體種類進行判斷,如確定影象中的物體是否是貓

  • 風格遷移
    將一幅畫的風格遷移到另一張圖片中,使之以之前那副圖的形式來表現這一幅影象的內容。

  • 目標檢測
    將一幅畫的風格遷移到另一張圖片中,使之以之前那副圖的形式來表現這一幅影象的內容。在這裡插入圖片描述

實際上在執行神經網路對影象進行處理時,影象大小會給我們帶來麻煩,對於6464

64大小的影象(影象的高為64,寬為64,有RGB三個通道),影象就有12288個引數,而對於一張100010003大小的影象,引數更是多達300萬個,這個時候神經網路的計算變得非常複雜,如果第一個隱藏層有1000個單元那麼W[1]有20億個引數,計算量不僅大,而且由於影象樣本相對於特徵實在是太少,導致很容易過擬合。在這裡插入圖片描述

2、邊緣檢測例項

為了對一個完整物體進行檢測,可以用神經網路的前幾層來檢測影象邊緣,然後用檢測到物體的部分,接下來靠後的一些層可能檢測到完整的物體。如下圖所示;
在這裡插入圖片描述
在卷積神經網路中,我們使用了一種叫過濾器(filter)的結構(有時它也被稱為核(kernel))。利用卷積核與影象對應的位置相乘求和便可以得到一個新值,我們以此來實現垂直邊緣檢測。
在這裡插入圖片描述

邊緣檢測實際就是將影象由亮到暗進行區分,即邊緣的過渡(edge transitions),如下圖:在這裡插入圖片描述
由上圖我們可以發現,對於有不同大小的畫素,我們經過卷積操作之後得到影象依舊可以進行區分(在這裡因為我們的影象太小了所以得到的中間白色過渡部分有點大,當我們的影象大小足夠大時,中間白色過渡部分便會變成一條線)。

3、更多邊緣檢測內容

其實邊緣檢測還有正邊、負邊之分,詳細來說就是指由亮到暗與由暗到亮的區別,通過卷積操作之後我們可以對兩者進行很形象的區分。如下圖:在這裡插入圖片描述

除了上面介紹的那種過濾器之外,研究人員還提出了其他很多種過濾器,如Sobel過濾器、Scharr過濾器等,這些不同的過濾器具有不同的特點。對於垂直過濾器而言,我們一般取過濾器的左邊為正值,中間是0,右邊是負值;水平過濾器中取上部分是正值,中間是0,下部分是負值。其實我們也很容易發現,只需要將垂直過濾器順時針進行翻轉90度,就會得到水平過濾器。

通過設計這些過濾器我們可以從影象中提取不同的特徵,但是這一過程比較複雜。好訊息是在深度學習中我們不一定需要自己去設計這個過濾器,我們可以可以把矩陣中的這9個數字當成是9個引數,並利用反向傳播演算法來對這九個引數進行理解,從而實現濾波器的學習和設計,這種我們通過反向傳播演算法設計出的濾波器對於資料的捕捉能力更強,可以檢測出45度、75度、73度甚至是任何角度的邊緣。
在這裡插入圖片描述

4、padding

對於一個輸入大小為 n n n*n 的影象,當用一個 f f f*f 的過濾器做卷積之後,輸出的結果大小是 ( n f + 1 ) ( n f + 1 ) (n-f+1)*(n-f+1)
從這個角度處分,我們使用卷積運算會帶來兩個缺點:

  • 影象縮小
    每進行進行一次卷積操作,影象都會在原先的基礎上相應的縮小一些,這對於深層神經網路而言無疑是致命的,無法在工業上進行應用。
  • 邊緣資訊丟失
    從之前我們對卷積的介紹中可以發現,對於邊緣的畫素點而言,他只會被採集一次資訊,而影象的中間位置畫素點會被卷積區域多次重疊,可以多次提取資訊。所以影象邊緣位置的跟多資訊會在卷積過程中被丟失。這對於影象檢測來說也是不利的。

對這兩個問題產生的原因進行分析,我們發現是因為卷積操作使影象的被檢測區域減小,所以為了解決這兩個問題,我們在卷積操作之前對所要進行處理的影象進行填充一圈0,填充0不會影響影象的性質,但可以使卷積後的影象與原始影象大小相同。這個操作就是padding。如果我們填充的數量是p,那麼輸出大小就變成了 ( n + 2 p f + 1 ) ( n + 2 p f + 1 ) (n+2p-f+1)*(n+2p-f+1) 。*
在這裡插入圖片描述
根據填充畫素個數的不同,我們把卷積分為Valid卷積和Same卷積兩種:

  • Valid卷積
    Valid卷積即不填充(no dapping),p=0,對影象不進行任何填充處理,得到的影象大小為 ( n f + 1 ) ( n f + 1 ) (n-f+1)*(n-f+1)

  • Same卷積
    Same卷積意味著進行填充後我們經過卷積操作之後得到的輸出大小與輸入一致。即 ( n f + 1 ) ( n f + 1 ) = n n (n-f+1)*(n-f+1)=n*n 化簡得 p = ( f 1 ) / 2 p=(f-1)/2 ,這裡需要額外注意的是,我們在這裡選擇的步長都為1,在計算機視覺中,我們一般取f為奇數。

    設定 f f 為奇數有兩個原因:首先是如果 f f 為偶數,則我們計算得到的 p = ( f 1 ) / 2 p=(f-1)/2 不是一個整數,影象左右填充不對稱。其次是選用奇數的 f f ,則我們可以得到一個畫素中心,對處理過程有所幫助。

在這裡插入圖片描述

5、卷積步長

在卷積過程中,我們還可以對卷積核每次移動的距離進行設定,這個距離我們稱為卷積步長,即stride。

假如我們輸入的影象大小為為 n n n*n ,過濾器大小為 f f f*f ,padding為 p p ,步長(stride)為 s s ,則輸出大小為: ( n + 2 p f s + 1 ) ( n + 2 p f s + 1 ) \left ( \frac{ n+2p-f}{s+1} \right )*\left ( \frac{ n+2p-f}{s+1} \right)

如果我們得到的商不是整數,則我們用floor函式對其向下取整,這個操作可以保證我們的卷積核一定在影象內部,否則不進行卷積操作。

6、卷積為何有效

在三維卷積中,我們必須使卷積核的通道數與輸入影象的通道數相同,同時輸出影象的通道數為所使用的卷積核的個數,輸出影象的高和寬則根據之前的那個公式進行計算。
在這裡插入圖片描述

三維影象的卷積和我們之前介紹的基本相同,對於如下所示的BGR影象,我們用 3 3 3 3*3*3 大小的卷積核來對其進行卷積,依次拿三個 3 3 3*3 來與紅、綠、藍通道中的數字對應相乘計算和,從而得到最終結果。
在這裡插入圖片描述

如果我們想同時檢測多個邊緣,則我們可以用多個過濾器同時工作。如下圖,為實現對垂直邊緣和水平邊緣的同時檢測,我們使用了兩個過濾器,一個過濾器用於檢測水平邊緣,另一個用於檢測垂直邊緣。

更一般的來說,如果輸入影象的大小為 n n n c n*n*n_c ,我們用大小為 f f n c f*f*n_c 的卷積核來對其進行卷積,當卷積過程沒有padding環節且卷積核步長為1時,輸出影象大小為 ( n f + 1 ) ( n f + 1 ) n c (n-f+1)*(n-f+1)*n’_c n c n’_c 為過濾器的個數。
在這裡插入圖片描述

7、單層卷積神經網路

我們對一個輸入大小為 6 6 6*6 的BGR影象進行卷積操作,選擇2個都為 3 3 3 3*3*3 的過濾器進行卷積,卷積之後產生2個輸出大小為 4 4 4*4 的結果,
在這裡插入圖片描述
我們在此結果上加上偏差(bias),再應用非線性啟用函式ReLU,再把兩個結果矩陣堆疊起來,最終得到一個442的矩陣。這就是單層卷積神經網路。

為了方便對卷積神經網路進行數學形式的表達,我們用符號對其中的相關引數進行表示如下:
在這裡插入圖片描述

8、簡單的卷積神經網路例項

這一章節主要舉了一個卷積神經網路的具體例子,其實吳恩達就是在幫我們複習公式 n + 2 p f / s + 1 (n+2p-f)/s)+1

我們將一隻不過大小為 39 39 3 39*39*3 的影象輸入卷積神經網路中來檢測影象中是否含有貓,圖的寬和高均為39,通道數為3(表示有RGB三個通道)。

我們選用的卷積核大小為 3 3 3*3 ,stride為1,padding為0,在這個例子中,我們選取的卷積核總數為10個。經過第一個卷積層的運算後,輸出影象大小變為
17 17 20 17*17*20 。第二個卷積層選用大小為 5 5 5*5 的卷積核,其中stride為2,padding為0,這層共有20個filters。通過這一個卷積層後輸出的影象大小為 17 17 20 17*17*20 。第三個卷積層的卷積核大小為 5 5 5*5 , stride為2,這一層共有40個卷積核,輸出的影象大小為 7 7 40 7*7*40 即1960個引數。為便於進行後續處理,我們可以把這1960個引數進行平滑(flatten)或展開(unroll)成1960個單元得到一個長向量,那時和logistic迴歸(判斷是否為某個物體)或softmax(判斷這些物體的概率分別是多少)進行計算最終得出神經網路的預測輸出。

隨著神經網路計算深度不斷加深,通常開始時影象會較大,高度和寬度會在一段時間內保持一致,然後隨著網路深度的加深而逐漸減少,而通道數(numberof channels)在增加。在其它許多卷積神經網路中也有相似操作。

在這裡插入圖片描述

卷積神經網路一般由卷積層(Convolution)、池化層(Pooling)和全連線層(Fully connected)組成,這三個層在卷積神經網路中均有非常重要的作用。

截止現在,我們已經對卷積神經網路的卷積層完成了探討。但在卷積神經網路中,除了卷積層(Convolution)之外,我們還有池化層(Pooling)和全連線層(Fully connected)。這三個層分別用Conv、POOL和FC來表示。

雖然僅用卷積層也有可能構建出很好的神經網路,但大部分神經網路架構師依然會新增池化層和全連線層來提高卷積神經網路的相關效能。在這裡插入圖片描述

9、池化層

除了卷積層以外,池化層也可以對影象進行縮減從而減少引數提高執行速度。

池化型別有兩種:最大池化(max pooling)和平均池化(mean pooling)。

最大池化: 將卷積之後的輸出影象進行處理,取出每一個分塊最大的值填入池化之後的對應區域中。它實際作用就是:如果在過濾器中提取到某個特徵,那麼保留其最大值;如果沒有提取到某個特徵,可能不存在這個特徵,那麼其中的最大值也還是很小。

相關推薦

深度學習系列課程筆記神經網路

本系列文章將對吳恩達在網易公開課“深度學習工程師”微專業內容進行筆記總結,這一部分介紹的是“卷積神經網路”部分。 1、計算機視覺 計算機視覺在我們還是生活中有非常廣泛的應用,以下幾個是最常見的例子: 影象分類: 可以對影象中的物體種類進行判斷,如確定影象中

深度學習第四課神經網路學習筆記2

前言 1.之所以堅持記錄,是因為看到其他人寫的優秀部落格,內容準確詳實,思路清晰流暢,這也說明了作者對知識的深入思考。我也希望能儘量將筆記寫的準確、簡潔,方便自己回憶也方便別人參考; 2.昨天看到兩篇關於計算機視覺的發展介紹的文章:[觀點|朱鬆純:初探計算機

深度學習UFLDL教程翻譯之神經網路

A、使用卷積進行特徵提取 一、概述        在前面的練習中,你解決了畫素相對較低的影象的相關問題,例如小的圖片塊和手寫數字的小影象。在這個節,我們將研究能讓我們將這些方法拓展到擁有較大影象的更加

機器學習13神經網路CNN

一、Why CNN for Image? 1、對於一幅影象來說,用DNN全連線的話,引數會很多,而影象實際上是有很多冗餘的,有些地方的特徵可能不需要。而CNN其實是拿掉了DNN的一些引數。 2、識別工作中,有時候並不需要看整張圖,而只需要看部分位置如鳥嘴。不管鳥嘴出現在影象的哪個位置,

Deep Learning模型之CNN神經網路深度解析CNN

http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了網上幾位大牛的部落格,詳細地講解了CNN的基礎結構與核心思想,歡迎交流。 1. 概述    卷積神經網路是一種特殊的深層的神經網路模型,它的特殊性體現在兩個方面,一方面它的神經元

深度學習專項課程2學習筆記/week2/Optimization Algorithms

sce 適應 耗時 bubuko 優化算法 src bat -a 過程 Optimization algorithms 優化算法以加速訓練。 Mini-batch gradient descend Batch gradient descend:每一小步梯度下降否需要計算所

深度學習專項課程3學習筆記/week2/Error analysis

ini 調整 數據 class http 評估 參數 pos 修正 Error analysis Carrying out error analysis Error analysis是手動分析算法錯誤的過程。 通過一個例子來說明error analysis的過程。假設你在做

深度學習課程筆記神經網路基本操作詳解

卷積層 CNN中卷積層的作用: CNN中的卷積層,在很多網路結構中會用conv來表示,也就是convolution的縮寫。 卷積層在CNN中扮演著很重要的角色——特徵的抽象和提取,這也是CNN區別於傳統的ANN或SVM的重要不同。 對於圖片而

深度學習筆記deeplearning.ai神經網路CNN

1. Padding 在卷積操作中,過濾器(又稱核)的大小通常為奇數,如3x3,5x5。這樣的好處有兩點: 在特徵圖(二維卷積)中就會存在一箇中心畫素點。有一箇中心畫素點會十分方便,便於指出過濾器的位置。 在沒有padding的情況下,經過卷積操作,輸出的資

深度學習2.3筆記_Improving Deep Neural Networks_超引數除錯 和 Batch Norm

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_42432468 學習心得: 1、每週的視訊課程看一到兩遍 2、做筆記 3、做每週的作業練習,這個裡面的含金量非常高。先根據notebook過一遍,掌握後一定要自己敲一遍,

深度學習2.2筆記_Improving Deep Neural Networks_優化演算法

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_42432468 學習心得: 1、每週的視訊課程看一到兩遍 2、做筆記 3、做每週的作業練習,這個裡面的含金量非常高。先根據notebook過一遍,掌握後一定要自己敲一遍,

深度學習2.1筆記_Improving Deep Neural Networks_深度學習的實踐層面

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_42432468 學習心得: 1、每週的視訊課程看一到兩遍 2、做筆記 3、做每週的作業練習,這個裡面的含金量非常高。先根據notebook過一遍,掌握後一定要自己敲一遍,

深度學習教程中文筆記目錄

深度學習筆記目錄 第一門課 神經網路和深度學習(Neural Networks and Deep Learning) 1.1 歡迎(Welcome) 1 1.2 什麼是神經網路?(What is a Neural Network) 1.3 神經網路的監督學

.深度學習系列-C1神經網路深度學習-w3-作業一個隱藏層進行二維資料分類

前言 **注意:coursera要求不要在網際網路公佈自己的作業。如果你在學習這個課程,建議你進入課程系統自行完成作業。使用邏輯迴歸作為一個最簡單的類似神經網路來進行影象判別。我覺得程式碼有參考和保留的意義。v 使用一個 2×4×1的網路來對資料進

機器學習+deeplearning課程筆記----乾貨連結分享

分享兩個GitHub連結,今天看到的,超讚超讚不能更讚了,答應我一定要去看好嗎~~~~不論是筆記還是github中分享的其它資源,課程視訊連結,PPT下載,作業佈置等都超棒。我要把這段安利用紅色標出來!!! 吳恩達老師的機器學習課程個人筆記-黃海廣博士

.深度學習系列-C1神經網路深度學習-W3淺層神經網路

詞彙 justification n. 理由;辯護;認為有理,認為正當;釋罪 prime n.角分號(g’(z)) shallow 淺層 學習目標 Understand hidden units and hidden layers

.深度學習系列-C1神經網路深度學習-W2-作業神經網路思想的邏輯迴歸

注意:coursera要求不要在網際網路公佈自己的作業。如果你在學習這個課程,建議你進入課程系統自行完成作業。使用邏輯迴歸作為一個最簡單的類似神經網路來進行影象判別。我覺得程式碼有參考和保留的意義。 Logistic Regression with a N

.深度學習系列-C1神經網路深度學習-w4- 作業建立神經網路

前言 注意:coursera要求不要在網際網路公佈自己的作業。如果你在學習這個課程,建議你進入課程系統自行完成作業。我覺得程式碼有參考和保留的意義。 本週的作業包含兩個部分。Building your Deep Neural Network, De

深度學習4-Week2課後作業2-殘差網路

一、Deeplearning-assignment 在本次作業中,我們將學習如何通過殘差網路(ResNets)建立更深的卷及網路。理論上,深層次的網路可以表示非常複雜的函式,但在實踐中,他們是很難建立和訓練的。殘差網路使得建立比以前更深層次的網路成為可能。對於殘差網路的詳細講解,具體可參考該

Coursera神經網路課程筆記(1)神經網路

計算機視覺 計算機視覺問題 圖片分類 目標檢測 畫風遷移 在大圖片上的深度學習 如果採用傳統的全連線層,可能會導致引數巨大,導致無法進行計算。卷積神經網路由此產生