深度學習之CNN簡介

2021-02-13 Python技術博文

本來想把CNN的一個kaggle比賽和這個放在一起,結果軟體一直出問題。就先把這部分貼上。後面再奉上CNN實戰的代碼。

深度學習概述

傳統的機器學習和深度學習一個很重要的差別就是特徵的自動提取。深度學習現在更適合處理一些原始信息的特徵,比如圖片識別,音頻,視頻等。比如圖片可以通過像素作為原始的特徵,通過卷積神經網絡不斷的提取特徵,最後再在這些特徵上進行學習。對於音頻就是通過聲音的聲波作為特徵。 
深度學習可以參考書籍:https://item.jd.com/12128543.html 
深度學習的課程可以參考:https://www.coursera.org/learn/neural-networks/home

本節主要是講解圖像識別案例,這裡就稍微提一下。

CNN(卷積神經網絡)

圖像識別中採用卷積神經網絡,這裡大致的介紹下CNN的運行原理。在很久以前呢其實圖像識別採用的是傳統的方法,比如SVM。在12年的ImageNet大會中,來自多倫多大學的 Geoffrey Hinton、Ilya Sutskever 和 Alex Krizhevsky 提交了名為「AlexNet」的深度卷積神經網絡算法,這種算法的圖形識別錯誤率低至 16%,比第二名低超過 40%。可以這麼說,人工智慧在「看特定的圖」這件事上第一次接近了人類。 
這裡提一下上面提到的深度學習課程就是由Geoffrey Hinton 講授的。 
而圖像識別中的神經網絡一般會採用卷積神經網絡,即CNN。

層級結構

一般的神經網絡採用了全連接的方式,這樣的話會導致參數量太大。Cnn以及rnn都修改了網絡結構以使其能達到特定的功能。 
全連接的神經網絡如下: 

隱層的話其實可以是0~N多層,如果沒有隱層,而激活函數又採用了邏輯函數,那麼就成了邏輯回歸模型了。這裡只畫了兩層。 
而卷積神經網絡主要有以下幾種層次 
1)數據輸入層 
2)卷積計算層 
3)Relu激活層 
4)池化層 
5)全連接層 
6)輸出層

數據輸入層

數據輸入層和全連接層一樣的,就是第0層。一般來說圖形圖像處理前需要進行數據的預處理,比如圖片的大小放縮到一致,主要有如下的處理方法: 
1)去均值,比如一個圖片的像素,RGB形式的吧,範圍都在0~256之間。將其都減去均值,得到每個特徵的維度均值為0. 
2)歸一化,就是降維度的數值縮放到一個幅度內。 
3)降維

卷積計算層

這個應該是CNN的一個比較關鍵的地方了,首先看卷積運算,卷積是對兩個實變函數的一種數學運算。這裡不想講的太複雜,比如 

這裡x是輸入,w是核函數就是需要將x轉換到其他的特徵中。下面將二維平面的情況展示: 
 
這是進行了一次的卷積運算,這裡我們很明顯的知道參數共享的。在一次卷積運算的過程中,這些kernel是保持不變的。變得是每次滑動窗口的數據。 
這裡介紹三個相關的概念: 
1)步長,如上圖是1。 
2)滑動窗口,上面的是一個2*2的大小。 
3)填充值,因為在步長大於1的情況下,可能導致滑動窗口在向右移動的過程中,右邊沒有值了,這個時候需要值進行填充,一般採用0值填充。還有一個原因就是當步長為1的時候,如果不進行填充會導致輸出的維度低於輸入的維度,這樣經過幾次迭代,就沒有輸入了…… 
形象化的如下圖,周圍補了一圈的0填充。 

注意這裡只是一個下一層的一個神經元的情況如果是n個,就會有n次卷積運算了。

Relu激活層

當通過卷積運算之後需要經過激活函數進行非線性變換。常的激活函數如下: 
1)Sigmoid 
2)Relu 
3)Tanh 
4)Elu 
5)Maxout 
6)Leaky relu 
可以參考:https://en.wikipedia.org/wiki/Activation_function 

在cnn中有如下一些經驗: 
1)CNN儘量不要用sigmoid ,因為sigmoid會導致梯度消失問題。 
2)首先使用relu 
3)然後使用leaky relu 
4)如果不行,採用maxout

池化層

由於圖片的像素點很多,如果不進行壓縮處理,那麼會導致參數過多,就過擬合啦。所以需要將圖片大小進行壓縮。那咋個壓縮呢?只能採用下採樣啦。如下圖所示: 
 
這個有點像卷積計算,但是呢,沒有kernel。一般採用的是 
1)Max 
2)Average 
兩種下採樣方式,不過用的多的還是max。因為average會帶來新的特徵值,不太好。

全連接層

經過了若干的卷積層,池化層,在輸出層的前一層,加一個全連接層,用於最後的輸出。 
輸出層 
最後就是再次通過一個激活函數輸出數據了。 
總的層級結構如下: 
 
一般來說,CNN的結構中,會有若干的卷積層,然後通過激活層,然後池化,然後繼續卷積等等,最後全連接輸出數據。不過有的也不用全連接做最後一層,用一維的卷積層代替。 

正則化

在深度學習中,優化算法基本都是採用的SGD。正則化不是像傳統的方式L1或者L2。而是通過一定的概率丟棄神經網絡節點,這就被稱為dropout 
如下圖所示,每次運算的時候隨機的使一些節點失效。或者可以理解,選擇神經節點服從一個概率分布。 
 
通過dropout的方式可以防止過擬合 
1)神經元的個數少了,參數減小,那麼根據機器學習的VC維可以得到過擬合風險減小。 
2)通過隨機的丟棄一些神經元,可以組成不同的神經網絡,最後做到一個aggregation的神經網絡,就像隨機森林一樣的的想法。

典型結構

CNN常見的結構有: 
1)LeNet ,最早用於數字識別 
2)AlexNet ,2012年的視覺大賽冠軍 
3)ZF Net,2013年的視覺大賽冠軍 
4)Google Net,2014年 
5)VGG Net,2014年 
6)ResNet,2015年,152層。 
具體可以參考:http://blog.csdn.net/u012905422/article/details/53312302 
計算機視覺競賽可以參考:http://image-net.org/ 裡面每年的winner可以看看其使用的結構。

相關焦點

  • 易用的新深度學習框架Keras簡介及使用
    (其實還有很多其他的深度學習框架都是比較容易用的。)1. Keras簡介Keras是基於Theano的一個深度學習框架,它的設計參考了Torch,用Python語言編寫,是一個高度模塊化的神經網絡庫,支持GPU和CPU。
  • 深度學習的學習歷程
    又好像什麼都不懂,學會這些模塊的公式就算會深度學習了嗎?整個深度學習的學習周期是怎樣的,我下一步應該幹啥?這些模塊看起來平平無奇,為什麼組合在一起就能發揮這麼大威力?為什麼drop out能起到正則作用?L1正則和L2正則有什麼區別?cnn、rnn、dnn除了公式不一樣外到底有啥區別?誒,最後一個fc層看起來跟多類別lr分類器好像啊,它們是一回事嗎?
  • 深度學習目標檢測系列:faster RCNN實現|附python源碼
    通過顯微鏡手動查看樣品是一個繁瑣的過程,這也是深度學習模式能夠發揮重要作用的地方,一些算法可以從顯微圖像中分類和檢測血細胞,並且達到很高的精確度。本文採用的血細胞檢測數據集可以從這裡下載,本文稍微修改了一些數據:邊界框已從給定的.xml格式轉換為.csv格式;隨機劃分數據集,得到訓練集和測試集;這裡使用流行的Keras框架構建本文模型。
  • 深度學習筆記 | 第7講:CNN目標檢測發家史之從R-CNN到yolo
    目標檢測發展歷程深度學習之前的早期目標檢測算法的發展歷程如上圖左邊淺藍色部分所示,鑑於本篇要講述的是CNN目標檢測,對於深度學習之前的目標檢測算法不再詳述,感興趣的同學可根據上述算法關鍵詞逐一搜索相應的論文進行研讀
  • 深度學習網絡之CNN
    深度學習的提出:2006年,Hinton提出了深度學習,兩個主要的觀點是:深度學習取得成功的原因:深度學習的思想:深度神經網絡的基本思想是通過構建多層網絡,對目標進行多層表示,以期通過多層的高層次特徵來表示數據的抽象語義信息,獲得更好的特徵魯棒性。
  • Matlab編程之——卷積神經網絡CNN代碼解析
    deepLearnToolbox-master是一個深度學習matlab包,裡面含有很多機器學習算法,如卷積神經網絡CNN,深度信念網絡DBN,
  • 文本分類實戰--從TFIDF到深度學習CNN系列效果對比(附代碼)
    閱讀過本文的人還看了以下:《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼《深度學習之pytorch》pdf+附書源碼前海徵信大數據算法:風險概率預測【Keras】完整實現『交通標誌』分類、『票據』分類兩個項目,讓你掌握深度學習圖像分類VGG16遷移學習,實現醫學圖像識別分類工程項目特徵工程(一)特徵工程(二) :文本數據的展開、過濾和分塊特徵工程(三):特徵縮放,從詞袋到 TF-IDF
  • 深度學習—應用於機器視覺領域的卷積神經網絡(CNN)簡介
    深度學習受到神經學的啟示,模擬人腦的認知與表達過程,通過低層信號到高層特徵的函數映射,來建立學習數據內部隱含關係的邏輯層次模型。深度學習相比於一般的淺層模型的機器學習方法具有多隱層結構,對大數據具有更好的擬合性。
  • 典型的深度學習算法(一):卷積神經網絡(CNN)
    通過上一篇文章,相信大家對深度學習的概念、原理已經有了大致了解,近期企通查將會對深度學習中的幾種典型算法進行介紹。在深度學習領域中,已經驗證的典型成熟算法有卷積神經網絡(CNN)、循環神經網絡(RNN)、生成對抗網絡(GAN)、深度強化學習(DRL)等,下面企通查將帶領大家對典型的深度學習算法之一——卷積神經網絡(CNN)一探究竟。
  • 圖形驗證碼繞過新姿勢之深度學習與burp結合
    推薦了使用cnn+tensorflow的方法對同樣類別的驗證碼進行訓練和識別,然後調用burp的插件對識別接口的調用和用於實際中的爆破。現在也有對圖形驗證碼識別的工具,比如BAT和其他的公司OCR,但是在批量爆破中免費次數不夠,不能白嫖就失去了意義。而且調用別人的接口沒有自己的記憶,還要給錢,就顯得很沒有牌面。
  • 實戰 | 源碼入門之Faster RCNN
    前言學習深度學習和計算機視覺,特別是目標檢測方向的學習者,一定聽說過Faster Rcnn;在目標檢測領域,Faster Rcnn表現出了極強的生命力,被大量的學習者學習,研究和工程應用。網上有很多版本的Faster RCNN的源碼,但是很多版本代碼太過於龐大,對新入門的學習者學習起來很不友好,在網上苦苦尋找了一番後終於找到了一個適合源碼學習的Faster Rcnn的pytorch版本代碼。根據該版本的作者講該代碼除去注釋只有兩千行左右,並且經過小編的一番學習之後,發現該版本的代碼真的是非常的精簡幹練,讀起來「朗朗上口」,並且深刻的感覺到作者代碼功底之深厚。
  • 【深度學習】Keras vs PyTorch vs Caffe:CNN實現對比
    編譯 | VK 來源 | Analytics Indiamag在當今世界,人工智慧已被大多數商業運作所應用,而且由於先進的深度學習框架,它非常容易部署。這些深度學習框架提供了高級編程接口,幫助我們設計深度學習模型。
  • CNN 原理與實踐指南
    本文對CNN的基礎原理及常見的CNN網絡進行了詳細解讀,並介紹了Pytorch構建深度網絡的流程。最後,以阿里天池零基礎入門CV賽事為學習實踐,對Pytorch構建CNN模型進行實現。數據及背景  https://tianchi.aliyun.com/competition/entrance/531795/introduction(阿里天池 - 零基礎入門CV賽事)CNN原理CNN,又稱卷積神經網絡,是深度學習中重要的一個分支。CNN在很多領域都表現優異,精度和速度比傳統計算學習算法高很多。
  • CNN原理與實踐指南
    本文對CNN的基礎原理及常見的CNN網絡進行了詳細解讀,並介紹了Pytorch構建深度網絡的流程。最後,以阿里天池零基礎入門CV賽事為學習實踐,對Pytorch構建CNN模型進行實現。數據及背景  https://tianchi.aliyun.com/competition/entrance/531795/introduction(阿里天池 - 零基礎入門CV賽事)CNN原理CNN,又稱卷積神經網絡,是深度學習中重要的一個分支。CNN在很多領域都表現優異,精度和速度比傳統計算學習算法高很多。
  • Yann LeCun都推薦的深度學習資料合集!
    AI 前線導讀:本文是 GitHub 上的一個項目,截止到 AI 前線翻譯之時,Star 數高達 7744 星,
  • 理解神經網絡:從神經元到RNN、CNN、深度學習
    並且形成了很多種類,像CNN(卷積神經網絡),RNN,自編碼,深度學習等等。神經網絡對於數據科學和或者機器學習從業者,就像線性回歸對於統計學家一樣。因此,對神經網絡是什麼有一個基本的理解是有必要的,比如,它是怎麼構成的,它能處理問題的範圍以及它的局限性是什麼。這篇文章嘗試去介紹神經網絡,從一個最基礎的構件,即一個神經元,深入到它的各種流行的種類,像CNN,RNN等。
  • 深度學習簡介
    今天備課的時候,看到Mathworks 關於深度學習的介紹,非常簡明扼要。
  • 基於深度學習的目標檢測算法綜述
    一、從Rcnn到Faster-Rcnn從Rcnn開始Girshick大神將深度學習引入目標檢測領域,後來連續發力,最終將目標檢測的所有步驟都統一在了深度學習框架之下,這就意味著所有的計算過程都可以在GPU內進行,從而計算精度和計算速度都有了很大提升。
  • 【深度學習】textCNN論文與原理——短文本分類(基於pytorch)
    前言前文已經介紹了TextCNN的基本原理,如果還不熟悉的建議看看原理:【深度學習】textCNN論文與原理[1]及一個簡單的基於pytorch的圖像分類案例:【深度學習】卷積神經網絡-圖片分類案例(pytorch實現)[2]。
  • 經典目標檢測方法Faster R-CNN和Mask R-CNN|基於PaddlePaddle深度...
    作為經典的目標檢測框架 Faster R-CNN,雖然是 2015 年的論文,但是它至今仍然是許多目標檢測算法的基礎,這在飛速發展的深度學習領域十分難得。而在 Faster R-CNN 的基礎上改進的 Mask R-CNN 在 2018 年被提出,並斬獲了 ICCV2017 年的最佳論文。