1. 程式人生 > >深度學習(八)CNN卷積神經網路基礎

深度學習(八)CNN卷積神經網路基礎

《Convolutional Neural Networks》是Andrw Ng深度學習專項課程中的第四門課。這門課主要介紹卷積神經網路(CNN)的基本概念、模型和具體應用。該門課共有4周課時,所以我將分成4次筆記來總結,這是第一節筆記。

1. Computer Vision

機器視覺(Computer Vision)是深度學習應用的主要方向之一。一般的CV問題包括以下三類:

  • Image Classification

  • Object detection

  • Neural Style Transfer

下圖展示了一個神經風格轉換(Neural Style Transfer)的例子:

這裡寫圖片描述

使用傳統神經網路處理機器視覺的一個主要問題是輸入層維度很大。例如一張64x64x3的圖片,神經網路輸入層的維度為12288。如果圖片尺寸較大,例如一張1000x1000x3的圖片,神經網路輸入層的維度將達到3百萬,使得網路權重W非常龐大。這樣會造成兩個後果,一是神經網路結構複雜,資料量相對不夠,容易出現過擬合;二是所需記憶體、計算量較大。解決這一問題的方法就是使用卷積神經網路(CNN)。

2. Edge Detection Example

對於CV問題,我們在之前的筆記中介紹過,神經網路由淺層到深層,分別可以檢測出圖片的邊緣特徵 、區域性特徵(例如眼睛、鼻子等)、整體面部輪廓。

這裡寫圖片描述

這一小節我們將介紹如何檢測圖片的邊緣。

最常檢測的圖片邊緣有兩類:一是垂直邊緣(vertical edges),二是水平邊緣(horizontal edges)。

這裡寫圖片描述

圖片的邊緣檢測可以通過與相應濾波器進行卷積來實現。以垂直邊緣檢測為例,原始圖片尺寸為6x6,濾波器filter尺寸為3x3,卷積後的圖片尺寸為4x4,得到結果如下:

這裡寫圖片描述

上圖只顯示了卷積後的第一個值和最後一個值。

順便提一下,表示卷積操作。python中,卷積用conv_forward()表示;tensorflow中,卷積用tf.nn.conv2d()表示;keras中,卷積用Conv2D()表示。

Vertical edge detection能夠檢測圖片的垂直方向邊緣。下圖對應一個垂直邊緣檢測的例子:

這裡寫圖片描述

3. More Edge Detection

圖片邊緣有兩種漸變方式,一種是由明變暗,另一種是由暗變明。以垂直邊緣檢測為例,下圖展示了兩種方式的區別。實際應用中,這兩種漸變方式並不影響邊緣檢測結果,可以對輸出圖片取絕對值操作,得到同樣的結果。

這裡寫圖片描述

垂直邊緣檢測和水平邊緣檢測的濾波器運算元如下所示:

這裡寫圖片描述

下圖展示一個水平邊緣檢測的例子:

這裡寫圖片描述

除了上面提到的這種簡單的Vertical、Horizontal濾波器之外,還有其它常用的filters,例如Sobel filter和Scharr filter。這兩種濾波器的特點是增加圖片中心區域的權重。

這裡寫圖片描述

上圖展示的是垂直邊緣檢測運算元,水平邊緣檢測運算元只需將上圖順時針翻轉90度即可。

在深度學習中,如果我們想檢測圖片的各種邊緣特徵,而不僅限於垂直邊緣和水平邊緣,那麼filter的數值一般需要通過模型訓練得到,類似於標準神經網路中的權重W一樣由梯度下降演算法反覆迭代求得。CNN的主要目的就是計算出這些filter的數值。確定得到了這些filter後,CNN淺層網路也就實現了對圖片所有邊緣特徵的檢測。

4. Padding

按照我們上面講的圖片卷積,如果原始圖片尺寸為n x n,filter尺寸為f x f,則卷積後的圖片尺寸為(n-f+1) x (n-f+1),注意f一般為奇數。這樣會帶來兩個問題:

  • 卷積運算後,輸出圖片尺寸縮小

  • 原始圖片邊緣資訊對輸出貢獻得少,輸出圖片丟失邊緣資訊

為了解決圖片縮小的問題,可以使用padding方法,即把原始圖片尺寸進行擴充套件,擴充套件區域補零,用p來表示每個方向擴充套件的寬度。

這裡寫圖片描述

經過padding之後,原始圖片尺寸為(n+2p) x (n+2p),filter尺寸為f x f,則卷積後的圖片尺寸為(n+2p-f+1) x (n+2p-f+1)。若要保證卷積前後圖片尺寸不變,則p應滿足:

p=f12p=f−12

沒有padding操作,p=0p=0,我們稱之為“Valid convolutions”;有padding操作,p=f12p=f−12,我們稱之為“Same convolutions”。

5. Strided Convolutions

Stride表示filter在原圖片中水平方向和垂直方向每次的步進長度。之前我們預設stride=1。若stride=2,則表示filter每次步進長度為2,即隔一點移動一次。

這裡寫圖片描述

我們用s表示stride長度,p表示padding長度,如果原始圖片尺寸為n x n,filter尺寸為f x f,則卷積後的圖片尺寸為:

n+2pfs+1Xn+2pfs+1⌊n+2p−fs+1⌋ X ⌊n+2p−fs+1⌋

上式中,⌊⋯⌋表示向下取整。

值得一提的是,相關係數(cross-correlations)與卷積(convolutions)之間是有區別的。實際上,真正的卷積運算會先將filter繞其中心旋轉180度,然後再將旋轉後的filter在原始圖片上進行滑動計算。filter旋轉如下所示:

這裡寫圖片描述

比較而言,相關係數的計算過程則不會對filter進行旋轉,而是直接在原始圖片上進行滑動計算。

其實,目前為止我們介紹的CNN卷積實際上計算的是相關係數,而不是數學意義上的卷積。但是,為了簡化計算,我們一般把CNN中的這種“相關係數”就稱作卷積運算。之所以可以這麼等效,是因為濾波器運算元一般是水平或垂直對稱的,180度旋轉影響不大;而且最終濾波器運算元需要通過CNN網路梯度下降演算法計算得到,旋轉部分可以看作是包含在CNN模型演算法中。總的來說,忽略旋轉運算可以大大提高CNN網路運算速度,而且不影響模型效能。

卷積運算服從分配律:

(AB)C=A(BC)(A∗B)∗C=A∗(B∗C)

6. Convolutions Over Volume

對於3通道的RGB圖片,其對應的濾波器運算元同樣也是3通道的。例如一個圖片是6 x 6 x 3,分別表示圖片的高度(height)、寬度(weight)和通道(#channel)。

3通道圖片的卷積運算與單通道圖片的卷積運算基本一致。過程是將每個單通道(R,G,B)與對應的filter進行卷積運算求和,然後再將3通道的和相加,得到輸出圖片的一個畫素值。

這裡寫圖片描述

不同通道的濾波運算元可以不相同。例如R通道filter實現垂直邊緣檢測,G和B通道不進行邊緣檢測,全部置零,或者將R,G,B三通道filter全部設定為水平邊緣檢測。

為了進行多個卷積運算,實現更多邊緣檢測,可以增加更多的濾波器組。例如設定第一個濾波器組實現垂直邊緣檢測,第二個濾波器組實現水平邊緣檢測。這樣,不同濾波器組卷積得到不同的輸出,個數由濾波器組決定。

這裡寫圖片描述

若輸入圖片的尺寸為n x n x ncnc,filter尺寸為f x f x ncnc,則卷積後的圖片尺寸為(n-f+1) x (n-f+1) x ncnc′。其中,ncnc為圖片通道數目,

相關推薦

深度學習()CNN神經網路基礎

《Convolutional Neural Networks》是Andrw Ng深度學習專項課程中的第四門課。這門課主要介紹卷積神經網路(CNN)的基本概念、模型和具體應用。該門課共有4周課時,所以我將分成4次筆記來總結,這是第一節筆記。 1. Comput

深度學習系列】神經網路CNN原理詳解(一)——基本原理

轉自:https://www.cnblogs.com/charlotte77/p/7759802.html 上篇文章我們給出了用paddlepaddle來做手寫數字識別的示例,並對網路結構進行到了調整,提高了識別的精度。有的同學表示不是很理解原理,為什麼傳統的機

深度學習(DL)與神經網路(CNN)學習筆記隨筆-01-CNN基礎知識點

神經認知機。  卷積神經網路是受生物靈感的多層感知機的變體。從Hubel和Wiesel的早期對貓的視覺皮層的研究工作中得出,視覺皮層包含一組複雜的細胞排列。這些細胞會對很小的子區域敏感,稱作

深度學習(DL)與神經網路(CNN)學習筆記隨筆-03-基於Python的LeNet之LR

  0階張量叫標量(scarlar);1階張量叫向量(vector);2階張量叫矩陣(matrix)      本文主要內容:如何用python中的theano包實現最基礎的分類器–LR(Logistic Regression)。   一、模型

[深度學習] Python實現神經網路- Convolution

[深度學習] Python實現卷積神經網路- Convolution 作者 sunsided github 地址: https://github.com/sunsided/python-conv2d import cv2 import numpy as np # load the

深度學習入門——利用神經網路訓練CIFAR—10資料集

CIFAR-10資料集簡介 CIFAR-10是由Hinton的學生Alex Krizhevsky和Ilya Sutskever整理的一個用於普適物體的小型資料集。它一共包含10個類別的RGB彩色圖片:飛機、汽車、鳥類、貓、鹿、狗、蛙類、馬、船: 資料集包含50000張訓練圖片和1000

深度學習之3D神經網路

一、概述 3D CNN主要運用在視訊分類、動作識別等領域,它是在2D CNN的基礎上改變而來。由於2D CNN不能很好的捕獲時序上的資訊,因此我們採用3D CNN,這樣就能將視訊中時序資訊進行很好的利用。首先我們介紹一下2D CNN與3D CNN的區別。如圖1所示,a)和b

深度學習小白——神經網路視覺化(二)

一、由卷積後的code得到原始影象 可以看出隨著卷積網路的進行,越來越多的資訊被扔掉了,能還原除的資訊也就越少。 二、Deep Dream google發明的起初是用來看神經網路各層在“看”什麼,後來因為得到的影象很具有藝術感,所以成為了一個藝術圖片生成器。 這是一

深度學習技術】神經網路常用啟用函式總結

本文記錄了神經網路中啟用函式的學習過程,歡迎學習交流。 神經網路中如果不加入啟用函式,其一定程度可以看成線性表達,最後的表達能力不好,如果加入一些非線性的啟用函式,整個網路中就引入了非線性部分,增加了網路的表達能力。目前比較流行的啟用函式主要分為以下7種:

深度學習筆記:神經網路的Tensorflow實現

在上一講中,我們學習瞭如何利用 numpy 手動搭建卷積神經網路。但在實際的影象識別中,使用 numpy 去手寫 CNN 未免有些吃力不討好。在 DNN 的學習中,我們也是在手動搭建之後利用 Tensorflow 去重新實現一遍,一來為了能夠對神經網路的傳播機制能夠理

深度學習入門——利用神經網路實現MNIST手寫數字識別

MNIST(Modified National Institute of Standards and Technology)資料庫是一個大型手寫數字資料庫,通常用於訓練各種影象處理系統。該資料庫還廣泛用於機器學習領域的培訓和測試。它是通過重新打亂來自NIST原始資料集的樣本而

吳恩達深度學習筆記之神經網路(目標檢測)

3.1 目標定位 定位分類問題意味著我們不僅要用演算法判斷出圖片中是否有該物體,還要標記出它的位置,例如圖片有一輛汽車,我們需要用邊框把汽車圈起來。 影象分類問題已不陌生,例如輸入一張圖片到多層卷積神經網路,它會輸出一個特徵向量,並反饋給softmax來預測

深度學習三:神經網路

# 卷積神經網路 **卷積神經網路(Convolutional Neural Network,CNN)**又叫**卷積網路(Convolutional Network)**,是一種專門用來處理具有類似網格結構的資料的神經網路。卷積神經網路一詞中的卷積是一種特殊的線性運算。卷積網路是指那些至少在網路的一層中使

CNN神經網路基礎

轉自:http://www.sohu.com/a/138403426_470008 卷積神經網路基礎 神經網路 先借用 CNTK 的一個例子,來看看如何使用神經網路來進行分類。如果想根據一個人的年齡和年收入,對他的政治傾向進行分類(保守派,居中和自由派),怎麼做呢?

機器學習演算法篇--神經網路基礎(Convolutional Neural Network)

假設輸入影象為如圖 中右側的 5 × 5 矩陣,其對應的卷積核為一個 3 × 3 的矩陣。同時,假定卷積操作時每做一次卷積,卷積核移動一個畫素位置,即卷積步長 為1。第一次卷積操作從影象 (0, 0) 畫素開始,由卷積核中引數與對應位置影象像 素逐位相乘後累加作為一次卷積操作結果,即 1×1+2×0+3×1

深度學習】Tensorflow——CNN 神經網路 2

轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-05-CNN3/ 目錄 圖片處理  建立卷積層  建立全連線層  選優化方法  完整程式碼

深度學習】Tensorflow——CNN 神經網路 1

轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-04-CNN2/ 這一次我們會說道 CNN 程式碼中怎麼定義 Convolutional 的層和怎樣進行 pooling. 基於上一次卷積神經網路的介

深度學習】8:CNN神經網路與sklearn資料集實現數字識別

前言:這個程式碼是自己閒暇無事時候寫的。 因為CNN卷積神經網路用MNIST資料集、sklearn資料集程式碼很多部分都很相似,這一篇就不附詳細說明,原始碼最下。CNN卷積神經網路的工作原理,請詳情參考——【深度學習】5:CNN卷積神經網路原理、MNIST資料

深度學習進階(六)--CNN神經網路除錯,錯誤歷程總結

總結一下今天的學習過程 (注:我此刻的心情與剛剛三分鐘前的心情是完全不一樣的) (昨天在想一些錯誤,今天又重拾信心重新配置GPU環境,結果很失敗,不過現在好了,在尋思著今天干了什麼的時候,無意間想到是不是自己方法入口不對啊。結果果然很幸運的被我猜到了,,,哈哈哈,我的心情又

深度學習】5:CNN神經網路原理、識別MNIST資料集

前言:先坦白的說,深度神經網路的學習在一開始對我造成的困擾還是很大的,我也是通過不斷地看相關的視訊資料、文獻講解嘗試去理解記憶。畢竟這些內容大多都是不可查的,我們看到的都只是輸入輸出的東西,裡面的內部運作以及工作原理,都需要沉心靜思。 這篇CNN卷積神經網路的