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