卷积神经网络精确率不增反降_深度学习 第四门课:卷积神经网络(Convolutional Neural Networks)...
生活随笔
收集整理的這篇文章主要介紹了
卷积神经网络精确率不增反降_深度学习 第四门课:卷积神经网络(Convolutional Neural Networks)...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
“本文大約有 4864?字。
01|引言
在這兩周時間里,我主要的學習內容如下:
重新復習了一遍前三門課;
學完第四門課卷積神經網絡(ConvolutionalNeural Networks);
學完第五門課第一周循環序列模型(RecurrentNeural Networks)。
課程整體的學習進度如下,我計劃下兩周時間可以基本學完課程的所有內容,以及完成全部的編程作業,而現在的課后編程作業完成到了第四門課的ResNet部分,我花了些時間學習了TensorFlow的基礎知識。
02|前三門課的部分補充2.1?深層神經網絡中反向傳播部分公式的推導和理解
重新學習一遍前面的內容之后,對深層神經網絡的反向傳播的理解更加深刻了。如下是反向傳播中5個式子的推導,所謂反向傳播,我的理解是逐層傳遞da,基于da計算出dz、dW和db等。對反向傳播過程要做到非常非常的熟悉。
2.2?準確率(Accuracy)、精確率(Precision)和召回率(Recall)
李航老師的《統計學習方法》一書中,有對這三項指標的定義。精確率的定義如下,準確率(Accuracy)是一個最直觀的指標,但是當不同類別比例非常不均衡時,占比大的類別往往成為影響Accuracy的最大因素。然后是精確率(Precision)和查全率(Recall)。精確率是指分類正確的正樣本個數占分類器判定為正樣本的樣本個數的比例。查全率是指分類正確的正樣本個數占真正的正樣本個數的比例。李航老師給出的定義更加的直觀。?????? 我按照自己的理解,畫了一個例子。需要補充的一點是,某個點對應的精確率和召回率是不能全面的衡量模型的性能的,可以通過P-R曲線的整體表現,對模型進行更為全面的評估。03|卷積神經網絡(Convolutional NeuralNetworks)3.1 為什么需要卷積?
神經網絡中的卷積層的兩個主要優勢在于參數共享和稀疏連接,下面來簡單的解釋這兩個概念。參數共享:每個特征檢測器(filter/過濾器)以及它的輸出都可以在輸入圖片的不同區域中使用同樣的參數,以便提取垂直邊緣或者其它特征。它不僅適用于邊緣特征這樣的低階特征,同樣適用于高階特征。整張圖片共享特征檢測器,提取效果也很好。稀疏連接:一次卷積運算只涉及輸入圖片的部分區域,圖片中的其他區域不會對輸出產生任何影響。3.2 過濾器和邊緣檢測
為了檢測圖像中的垂直、水平或者任意角度邊緣信息,需要構造一個過濾器(Filter)。除了上圖中的兩個實例過濾器外,還有增加權重的Sobel和Scharr等過濾器。隨著深度學習的發展,學習的其中一個目標就是去檢測出復雜圖像的邊緣。對于一個3×3的過濾器,可以把過濾器矩陣中的數字當成9個參數,使得反向傳播算法能夠讓神經網絡學習任何它所需要的3×3過濾器。將過濾器當成參數的思想,已經成為計算機視覺中最為有效的思想之一。過濾器f通常為奇數維,如:1×1/3×3/5×5等。3.3 Padding、Stride和Pooling
如有一個(n × n)的圖像,用(f × f)的過濾器做卷積,那么輸出的維度就是(n – f + 1) × (n – f + 1)。如果n = 6,f = 3,那么卷積輸出則為4×4。這存在兩個問題,一是圖像在每次識別邊緣或其它特征后都縮小;二是邊角的像素在卷積時,只被使用過一次,這就意味著丟掉了圖像邊緣位置的許多信息。解決這些問題的方法是,可以在卷積之前沿著圖像邊緣再填充一層像素,這就是padding。Valid意味著不填充,Same意味著填充后,卷積輸出的圖片大小和輸入圖片大小是一樣的。卷積步長(Strided convolution)很好理解,如下圖表示步長為2。總結一些,如果輸入圖像為(n × n),過濾器為(f × f),padding為p,步幅為s,則卷積后輸出的圖像為:池化Pooling,卷積神經網絡也經常使用池化層來縮小模型大小,提高計算速度,同時提高所提取特征的魯棒性。下面是兩種池化類型:最大池化(Max Pool)和平均池化(Average Pool)。2D 卷積推廣到 3D 卷積也是很好理解的,其中有一點需要注意的是,輸入圖像和過濾器必須是一樣的通道數。如下就是一個3維卷積的例子,使用了兩個過濾器。3.4 簡單的卷積神經網絡
一個卷積神經網絡包括卷積層、池化層和全連接層。許多計算機視覺研究正在探索如何將這些基本模塊整合起來,構建高效的神經網絡,整合這些模塊需要有深入的理解。如下是一種神經網絡實例。可以看到,隨著層數增加,高度和寬度都會減小,而通道數會增加,然后得到一個全連接層。神經網絡另一種常見模式就是一個或多個卷積后面跟隨一個池化層,然后一個或多個卷積層后面再跟一個池化層,然后是幾個全連接層,最后是一個softmax。04|神經網絡的實例探究4.1 LeNet-5
大約有6萬個參數,使用的是sigmoid和tanh激活函數。4.2 AlexNet
AlexNet包含約6000萬個參數,使用了ReLU激活函數,采用了較為復雜的方法在兩個GPU上進行訓練。論文中還提到,經典的AlexNet結構還有另一種類型的層,叫做“局部響應歸一化(Local Response Normalization)”,即LRN層。4.3 VGG-16
VGG-16是Oxford的Visual Geometry Group提出的,16表示有13個卷積層+3個全連接層。VGG-16網絡沒有那么多超參數,這是一種只需要專注于構建卷積層的簡單網絡。首先用3×3,步幅為1的過濾器構建卷積層,采用same卷積。然后用一個2×2,步幅為2的過濾器構建最大池化層。因此VGG網絡的一大優點是它確實簡化了神經網絡結構。對于以上三種經典的網絡結構論文的閱讀順序,吳恩達老師給出的建議是從介紹AlexNet的論文開始,然后就是VGG的論文,最后是LeNet的論文。4.4 殘差網絡(ResNets)
ResNet的發明者是何凱明(Kaiming He)、張翔宇(Xiangyu Zhang)、任少卿(Shaoqing Ren)和孫劍(Jiangxi Sun)。構建一個ResNet網絡就是通過將很多的殘差塊堆積在一起,形成一個很深神經網絡。下圖是一個殘差塊。理論上網絡深度越深越好,但實際上,對于一個普通網絡來說,深度越深意味著優化算法越難訓練。實際上,隨著網絡深度的加深,訓練錯誤會越來越多。但有了ResNet就不一樣了,即使網絡再深,訓練的表現仍不錯。ResNet在訓練深度網絡方面非常有效。接下來簡單了解一下ResNet的原理。如果使用L2正則化或權重衰減,那么它會壓縮、W[l+2] 的值,如果 W[l+2] = 0, b[l+2] = 2、激活函數為ReLU,那么 a[l+2] = a[l]。因此可以保證網絡的效率不會降低。殘差網絡起作用的主要原因就是這些殘差塊學習恒等函數非常容易。4.5 Inception網絡
Inception網絡不需要人為決定使用哪個過濾器或者是否需要池化,而是由網絡自行確定這些參數,給網絡添加這些參數的所有可能值,然后把這些輸出拼接起來,讓網絡自己學習它需要什么樣的參數,采用哪些過濾器組合。Inception模塊的輸入為28×28×192,輸出為28×28×256。使用1×1卷積來構建瓶頸層,可以大大降低計算成本。以Inception網中5×5的過濾器為例。瓶頸層的引入,使得輸出28×28×32的計算量從1.2億次乘法降低到了1240萬次,計算成本降低了10倍之多。現在,使用瓶頸層的優勢,來構建一個Inception module。而Inception所做的,就是將這些模塊都組合在一起,如下圖所示。還有一個特別的Inception網絡是由Google公司所研發的,它被叫做GoogleLeNet,這個名字是為了向LeNet網絡致敬。05|目標檢測5.1 定位分類問題
定位分類問題:以汽車分類定位為例,不僅要判斷圖片是不是一輛汽車,還要在圖片中標記出它的位置,用邊框把汽車框起來。通過卷積網絡進行對象檢測,采用的是基于滑動窗口的目標檢測算法,即以某個步幅滑動方框窗口遍歷整張圖片,對這些方框區域進行檢測。這樣無論汽車在什么位置,總有一個窗口可以檢測到它。為了解決普通滑動窗口龐大計算量的問題,即使用滑動窗口卷積。該卷積的原理是不需要再將圖片分成一個個子集,分別執行前向傳播,而是將這些子集作為一張圖片輸入給卷積神經網絡進行計算,其中的公共區域可以共享很多計算,一次得到所有的預測結果。5.2 YOLO算法(You only look once)
滑動窗口法卷積實現雖然有很高的效率,但是可能無法輸出精確的邊界框。一個能得到更精確邊界框的算法是YOLO算法,基本思路是將輸入圖像使用網格(3×3為例)劃分后,將圖像分類和定位算法應用于每一個格子中。把對象分到一個格子的過程是:觀察對象的中點,然后將對象分配到其中點所在的格子,即使對象可以橫跨多個格子,也只會分到其中之一的格子。與圖像分類和定位算法有些類似,它顯示地輸出邊界框的坐標(bx, by, bh, bw),所以這能讓神經網絡輸出可以具有任意寬高比的邊界框,輸出更加精確的坐標,不會受到滑動窗口步幅大小的限制。接下來來簡單了解一下如何精確的指定邊界框。如下圖,我們約定左上角是(0, 0),右下角是(1, 1),橙色點為對象中點,坐標為(bx, by),邊框的高度為bh,寬度為bw。bx、by、bh和bw單位都是相對于格子尺寸的比例。因為對象中點必須分到一個格子中,所以bx和by必須在0到1之間。bh和bw可能會大于1,如下圖編號3所示的邊界框,就是大于1的。5.3 交并比(IoU)和非極大抑制
交并比就是兩個邊界框的交集和并集之比。定義交并比是為了評價對象定位算法是否精確,IoU = 1,表示預測的邊界框和實際邊界框完美重合。IoU越高,邊界框越準確。非極大抑制就是,首先找出pc最高的一個邊界框,這就是一個可靠的檢測,非極大抑制就會逐一審視剩下的邊界框,所有和這個最大的邊框有很高并交比,高度重疊的其它邊界框就會被抑制。06|人臉識別和神經風格轉換6.1 人臉識別
人臉識別所面臨的一個挑戰是需要解決一次學習問題,需要通過單單一張圖片或單單一個人臉樣例去識別這個人。解決這個問題的方法是學習Similarity函數,這個函數以兩張圖片作為輸入,然后輸出兩張圖片的差異值,當兩張圖片的差異值小于某個閾(yù)值?,那么就能預測是同一個人。函數d的作用是輸入兩張圖片,然后輸出它們的相似度。實現這個函數功能的一個方式就是使用Siamese網絡,即對于兩個不同的輸入,運行相同的卷積神經網絡,然后比較它們。兩張圖片所對應的Siamese網絡有相同的參數,網絡的學習目標是:如果兩個圖片 x(i)?和 x(j)?是同一個人,那么得到的編碼距離就越小,相反,如果兩個圖片是不同的人,那么距離應該盡量的大。已經了解到了Siamese網絡的學習目標,接下來就是定義目標損失函數,然后應用梯度下降學習參數。這里應用的是三元組損失,表示同時看三張圖片,即Anchor圖片、Positive圖片和Negative圖片(A、P、N)。我們想要[f(A), f(P)] 之間距離小于等于[f(A) , f(N)],同時為了保證網絡中所有編碼不會總是輸出0,通常加入一個間隔參數a,這個間隔參數的作用是拉大(A, P)和(A, N)之間的間距。得到損失函數定義如下:定義三元組數據集需要成對的A、P,所以需要確保訓練集里有同一個人的多個照片。在訓練時,遵循A、P是同一個人,A、N是不同的人這一原則,如果隨機的選擇進行訓練,那么損失函數的 [d(A, P) + a <= d(A, N)] 將非常容易達到。因此,應該盡量選擇難訓練的三元組A、P和N,即d(A, P) 非常接近 d(A, N)。6.2 神經風格遷移
C表示內容圖像、S表示風格圖像、G表示生成的圖像,如下是神經風格遷移的例子。要構建一個神經風格遷移系統,需要為生成的圖像定義一個代價函數,通過最小化代價函數,可以生成想要的任何圖像。定義一個關于G的代價函數J來評判模型的好壞,然后使用梯度下降法去最小化J(G),以便于生成圖像。代價函數有內容代價和風格代價兩部分組成。風格遷移網絡的代價函數有一個內容代價和風格代價,內容代價定義如下,如果內容圖片C和生成圖片G在l層的激活值相似,那么就意味著兩個圖片的內容相似。接下來看看風格代價。將圖片風格定義為l層中各個通道之間激活項的相關系數,相關系數這個概念提供了一種去測量不同的特征的方法。比如通過垂直紋理、橙色或者其它特征去測量這些特征在圖片中的各個位置同時出現或不同時出現的頻率。在通道之間使用相關系數描述通道風格,測量生成圖像中某些特征同時出現或不同時出現的頻率,進而衡量生成的圖像風格與輸入的風格圖像的相似程度。分別定義風格圖像和生成圖像關于l層的矩陣(nc × nc),如下圖所示。如果兩個通道中的激活項數值都很大,那么 G 也會變得很大(相關),如果不相關,就會變得很小。現在我們有了2個矩陣,分別是來自風格圖像S和生成圖像G。最后,將這兩個矩陣S、G帶入到風格代價函數中去計算,就得到這兩個矩陣之間的誤差。風格代價函數式子如下:最后,將這些進行一個組合,就得到了一個神經風格遷移的代價函數。以上就是這兩周的學習筆記了,所里規定使用 word 編寫,所以排版轉到這里后有些亂。PS:關注微信公眾號「藍本本」,和我一起學習、進修和放縱好奇心。題圖:Photo by?Negative Spacefrom?Pexels.
Landon——學習、進修和放縱好奇心!@? 藍本本??——
總結
以上是生活随笔為你收集整理的卷积神经网络精确率不增反降_深度学习 第四门课:卷积神经网络(Convolutional Neural Networks)...的全部內容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: python的映射_Python学习:映
- 下一篇: 如何在input输入框中加一个搜索的小图