【深度學習系列】用PaddlePaddle和Tensorflow實現GoogLeNet InceptionV2/V3/V4

2021-03-02 Python愛好者社區

點擊上圖,立即開啟AI急速修煉

作者:Charlotte    高級算法工程師 ,博客專家;

擅長用通俗易懂的方式講解深度學習和機器學習算法,熟悉Tensorflow,PaddlePaddle等深度學習框架,負責過多個機器學習落地項目,如垃圾評論自動過濾,用戶分級精準營銷,分布式深度學習平臺搭建等,都取了的不錯的效果。

博客專欄:https://www.cnblogs.com/charlotte77/

前文傳送門:

【好書推薦&學習階段】三個月教你從零入門深度學習

【深度學習系列】PaddlePaddle之手寫數字識別

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

【深度學習系列】PaddlePaddle之數據預處理

  【深度學習系列】卷積神經網絡詳解(二)——自己手寫一個卷積神經網絡

  【深度學習系列】用PaddlePaddle和Tensorflow進行圖像分類

  【深度學習系列】用PaddlePaddle和Tensorflow實現經典CNN網絡AlexNet

  【深度學習系列】用PaddlePaddle和Tensorflow實現經典CNN網絡Vgg

  【深度學習系列】用PaddlePaddle和Tensorflow實現經典CNN網絡GoogLeNet

上一篇文章我們引出了GoogLeNet InceptionV1的網絡結構,這篇文章中我們會詳細講到Inception V2/V3/V4的發展歷程以及它們的網絡結構和亮點。

GoogLeNet Inception V2


GoogLeNet Inception V2在《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》出現,最大亮點是提出了Batch Normalization方法,它起到以下作用:

使用較大的學習率而不用特別關心諸如梯度爆炸或消失等優化問題;

降低了模型效果對初始權重的依賴;

可以加速收斂,一定程度上可以不使用Dropout這種降低收斂速度的方法,但卻起到了正則化作用提高了模型泛化性;

即使不使用ReLU也能緩解激活函數飽和問題;

能夠學習到從當前層到下一層的分布縮放( scaling (方差),shift (期望))係數。

  

在機器學習中,我們通常會做一種假設:訓練樣本獨立同分布(iid)且訓練樣本與測試樣本分布一致,如果真實數據符合這個假設則模型效果可能會不錯,反之亦然,這個在學術上叫Covariate Shift,所以從樣本(外部)的角度說,對於神經網絡也是一樣的道理。從結構(內部)的角度說,由於神經網絡由多層組成,樣本在層與層之間邊提特徵邊往前傳播,如果每層的輸入分布不一致,那麼勢必造成要麼模型效果不好,要麼學習速度較慢,學術上這個叫InternalCovariate Shift。

假設:y為樣本標註,X={x1,x2,x3,.}為樣本x

通過神經網絡若干層後每層的輸入;

理論上:p(x,y)的聯合概率分布應該與集合X中任意一層輸入的聯合概率分布一致,如:p(x,y)=p(x1,y);

但是:p(x,y)=p(y|x)⋅p(x),其中條件概率p(y|x)是一致的,即p(y|x)=p(y|x1)=p(y|x1)=.,但由於神經網絡每一層對輸入分布的改變,導致邊緣概率是不一致的,即p(x)≠p(x1)≠p(x2).,甚至隨著網絡深度的加深,前面層微小的變化會導致後面層巨大的變化。

 

BN整個算法過程如下:

  

  

左邊是未做白化的原始可行域,右邊是做了白化的可行域;

  

  

這裡的參數γ和σ是需要學習的。

卷積神經網絡中的BN

卷積網絡中採用權重共享策略,每個feature map只有一對γ和σ需要學習。

 

GoogLeNet Inception V3


GoogLeNet Inception V3在《Rethinking the Inception Architecture for Computer Vision》中提出(注意,在這篇論文中作者把該網絡結構叫做v2版,我們以最終的v4版論文的劃分為標準),該論文的亮點在於:


提出通用的網絡結構設計準則

引入卷積分解提高效率

引入高效的feature map降維


網絡結構設計的準則

前面也說過,深度學習網絡的探索更多是個實驗科學,在實驗中人們總結出一些結構設計準則,但說實話我覺得不一定都有實操性:


神經網絡包含一個自動提取特徵的過程,例如多層卷積,直觀並符合常識的理解:如果在網絡初期特徵提取的太粗,細節已經丟了,後續即使結構再精細也沒法做有效表示了;舉個極端的例子:在宇宙中辨別一個星球,正常來說是通過由近及遠,從房屋、樹木到海洋、大陸板塊再到整個星球之後進入整個宇宙,如果我們一開始就直接拉遠到宇宙,你會發現所有星球都是球體,沒法區分哪個是地球哪個是水星。所以feature map的大小應該是隨著層數的加深逐步變小,但為了保證特徵能得到有效表示和組合其通道數量會逐漸增加。   


下圖違反了這個原則,剛開就始直接從35×35×320被抽樣降維到了17×17×320,特徵細節被大量丟失,即使後面有Inception去做各種特徵提取和組合也沒用。






通過合理平衡網絡的寬度和深度優化網絡計算消耗(這句話尤其不具有實操性)。

抽樣降維,傳統抽樣方法為pooling+卷積操作,為了防止出現特徵表示的瓶頸,往往需要更多的卷積核,例如輸入為n個d×d的feature map,共有k個卷積核,pooling時stride=2,為不出現特徵表示瓶頸,往往k的取值為2n,通過引入inception module結構,即降低計算複雜度,又不會出現特徵表示瓶頸,實現上有如下兩種方式:

  平滑樣本標註

對於多分類的樣本標註一般是one-hot的,例如[0,0,0,1],使用類似交叉熵的損失函數會使得模型學習中對ground truth標籤分配過於置信的概率,並且由於ground truth標籤的logit值與其他標籤差距過大導致,出現過擬合,導致降低泛化性。一種解決方法是加正則項,即對樣本標籤給個概率分布做調節,使得樣本標註變成「soft」的,例如[0.1,0.2,0.1,0.6],這種方式在實驗中降低了top-1和top-5的錯誤率0.2%。


  網絡結構


GoogLeNet Inception V4

GoogLeNet Inception V4/和ResNet V1/V2這三種結構在《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》一文中提出,論文的亮點是:提出了效果更好的GoogLeNet Inception v4網絡結構;與殘差網絡融合,提出效果不遜於v4但訓練速度更快的結構。


GoogLeNet Inception V4網絡結構


GoogLeNet Inception ResNet網絡結構

 

代碼實踐

  

Tensorflow的代碼在slim模塊下有完整的實現,paddlepaddle的可以參考上篇文章中寫的inception v1的代碼來寫。

 

總結 

  

這篇文章比較偏理論,主要講了GoogLeNet的inception模塊的發展,包括在v2中提出的batch normalization,v3中提出的卷積分級與更通用的網絡結構準則,v4中的與殘差網絡結合等,在實際應用過程中可以可以對同一份數據用不同的網絡結構跑一跑,看看結果如何,實際體驗一下不同網絡結構的loss下降速率,對準確率的提升等。 

從零開始學人工智慧

下圖掃碼了解本文作者胡老師的系列課程吧!

限時優惠6.18折!

相關焦點

  • 【深度學習系列】用PaddlePaddle和Tensorflow實現經典CNN網絡GoogLeNet
    ,熟悉Tensorflow,PaddlePaddle等深度學習框架,負責過多個機器學習落地項目,如垃圾評論自動過濾,用戶分級精準營銷,分布式深度學習平臺搭建等,都取了的不錯的效果。
  • 用PaddlePaddle 和 Tensorflow 實現經典 CNN 網絡 GoogLeNet
    (本系列所有代碼均在 github:https://github.com/huxiaoman7/PaddlePaddle_code)關於深度網絡的一些思考  在本系列最開始的幾篇文章我們講到了卷積神經網絡,設計的網絡結構也非常簡單,屬於淺層神經網絡,如三層的卷積神經網絡等,但是在層數比較少的時候,有時候效果往往並沒有那麼好,在實驗過程中發現,當我們嘗試增加網絡的層數
  • 【深度學習系列】用PaddlePaddle和Tensorflow實現經典CNN網絡AlexNet
    點擊上圖,立即開啟AI急速修煉作者:Charlotte    高級算法工程師 ,博客專家;擅長用通俗易懂的方式講解深度學習和機器學習算法,熟悉Tensorflow,PaddlePaddle等深度學習框架,負責過多個機器學習落地項目,如垃圾評論自動過濾,用戶分級精準營銷,分布式深度學習平臺搭建等,都取了的不錯的效果。
  • 【深度學習系列】關於PaddlePaddle的一些避「坑」技巧
    ,熟悉Tensorflow,PaddlePaddle等深度學習框架,負責過多個機器學習落地項目,如垃圾評論自動過濾,用戶分級精準營銷,分布式深度學習平臺搭建等,都取了的不錯的效果。博客專欄:https://www.cnblogs.com/charlotte77/前文傳送門:【好書推薦&學習階段】三個月教你從零入門深度學習【深度學習系列】PaddlePaddle之手寫數字識別【深度學習系列】卷積神經網絡CNN原理詳解(一)——基本原理【深度學習系列】PaddlePaddle之數據預處理
  • 深度學習系列:PaddlePaddle之手寫數字識別
    上周在搜索關於深度學習分布式運行方式的資料時,無意間搜到了paddlepaddle,發現這個框架的分布式訓練方案做的還挺不錯的,想跟大家分享一下。不過呢,這塊內容太複雜了,所以就簡單的介紹一下paddlepaddle的第一個「hello word」程序----mnist手寫數字識別。下一次再介紹用PaddlePaddle做分布式訓練的方案。
  • Google最新開源Inception-ResNet-v2,藉助殘差網絡進一步提升圖像...
    為了進一步推進這個領域的進步,今天Google團隊宣布發布Inception-ResNet-v2(一種卷積神經網絡——CNN),它在ILSVRC圖像分類基準測試中實現了當下最好的成績。Inception-ResNet-v2是早期Inception V3模型變化而來,從微軟的殘差網絡(ResNet)論文中得到了一些靈感。
  • 如何基於Flutter和Paddle Lite實現實時目標檢測
    這款引擎允許我們在很多硬體平臺上實現輕量化的高效預測,進行一次預測耗時較短,也不需要太多的計算資源。那麼如果我們想開發一款既能在本地進行預測又能在Android和iOS上面有一致體驗的App的話,Flutter無疑是一個好選擇。
  • 譯文 | Inception-v4,Inception-ResNet 和殘差連接對學習的影響(多圖)
    本研究結合最近的兩個想法:殘差連接和最近的Inception網絡結構除了直接的融合,我們也研究了Inception本身通過變得更深更寬能否能變得更加高效。為了實現這個目的,我們設計了一個新版本的Inception-v4,相比Inception-v3,它有更加統一簡化的網絡結構和更多的inception模塊。從歷史觀點來看,Inception-v3繼承了之前的很多方法。
  • 深度學習與PaddlePaddle的應用-個性化推薦
    作者:沈克強 來源:人工智慧學習圈I 研究背景推薦系統(Recommender System)是向用戶建議有用物品的軟體工具和技術,它運用數據分析、數據挖掘等技術,實現對用戶瀏覽信息或商品進行智能推薦,是機器學習,尤其是深度學習算法的重要應用場景。
  • 從零學Paddle系列-1 Paddle框架CNN相關API詳解
    前言前面我們對Paddle做了個大致的介紹,這一次我們來詳細學習一下cv相關函數的使用paddle.fluid.dygraph
  • 教程| 如何用百度深度學習框架PaddlePaddle做數據預處理
    機器之心經授權轉載 作者:胡曉曼 本文主要介紹了百度的深度學習開源框架PaddlePaddle的數據預處理過程,創建一個reader讀取數據,一行代碼搞定數據的輸入、混洗和批量讀取。本文作者胡曉曼是一名高級算法工程師,熱衷寫通俗易懂的深度學習入門文章。
  • 教程 | 如何用百度深度學習框架PaddlePaddle做數據預處理
    本文主要介紹了百度的深度學習開源框架PaddlePaddle的數據預處理過程,創建一個reader讀取數據,一行代碼搞定數據的輸入、混洗和批量讀取
  • 基於PaddlePaddle的詞向量實戰 | 深度學習基礎任務教程系列(二)
    而基於神經網絡的模型不需要計算和存儲一個在全語料上統計產生的大表,是通過學習語義信息得到詞向量,因此能很好地解決以上問題。本教程旨在展示神經網絡訓練詞向量的細節,以及如何用PaddlePaddle訓練一個詞向量模型。
  • PaddlePaddle 2.0.0 Beta 發布,API 體系升級,命令式編程完善
    * paddle根目錄下保留了常用API的別名,當前包括:paddle.tensor和paddle.framework目錄下的所有API paddle.tensor 跟tensor操作相關的API,比如:創建zeros, 矩陣運算matmul, 變換concat, 計算add, 查找argmax等
  • PaddlePaddle深度學習開源平臺:等待眾人划槳的中國AI大船
    一、 PaddlePaddle是什麼 我們說了很多歷史,也提到了一些舞臺上正興的機器學習平臺,而這篇文字,是想介紹一下一個新的選擇:來自百度的paddlepaddle。Paddle(Parallel Distributed Deep Learning,並行分布式深度學習)。
  • 如何評價百度剛剛開源的Paddle平臺?
    不過鑑於深度學習的開源平臺目前並不多,作為開發者也作為熱心吃瓜群眾的頭等大事,就是想知道——這個平臺怎麼樣?別人怎麼看這個平臺?以及這個平臺跟Tensorflow以及Caffe有何區別?並且經過和百度相關業務的「緊密摩擦」後,它已經迭代了兩個版本:從Spark on Paddle架構1.0版,到Spark on PADDLE 架構2.0版。根據平臺開源的規則,大概是在百度內部用的非常得心應手,修復了一系列bug後,實驗室才終於打算把Spark on PADDLE以及異構計算平臺開源。
  • 如何用Paddle Fluid API搭建簡單的神經網絡?這裡有一份編程指南
    PaddlePaddle 是百度自主研發,集深度學習核心框架、工具組件和服務平臺為一體的開源深度學習平臺。該平臺技術領先、功能完備。Paddle Fluid 是 PaddlePaddle 的核心框架,滿足模型開發、訓練、部署的全流程需求。本文將展示如何用 Paddle Fluid API 編程並搭建一個簡單的神經網絡。
  • 教學用在線實踐環境(SQL、數據挖掘、機器學習、深度學習)
    其他,練習學習https://www.w3resource.com/sql-exercises/https://sqlzoo.net/https://sqlbolt.com/二、數據挖掘、機器學習、深度學習(1) 百度aistudiohttps://aistudio.baidu.com/aistudio/index百度AI Studio是針對AI學習者的在線一體化學習與實訓社區。
  • 快到沒朋友的YOLO v3有了PaddlePaddle 預訓練模型
    值得一提的是,基於百度自研的開源深度學習平臺PaddlePaddle的YOLO v3實現,參考了論文【Bag of Tricks for Image Classification with Convolutional NeuralNetworks】,增加了mixup,label_smooth等處理,精度(mAP(0.5:0.95))相比於原作者的實現提高了4.7個絕對百分點,在此基礎上加入synchronize
  • PaddlePaddle入門:從對話系統中的情感分析談起
    本文我們嘗試使用百度開源深度學習框架PaddlePaddle來解決情感分析。PaddlePaddle是百度旗下深度學習開源平臺。Paddle是並行分布式深度學習(Parallel Distributed Deep Learning)[3]的簡稱,為了方便描述,後文都使用paddle來稱呼PaddlePaddle。