卷積神經網絡的發展主要是爲了解決人類視覺問題,不過如今其它方向也都會使用。發展歷程主要從Lenet5->Alexnet->VGG->GooLenet->ResNet等。mysql
傳統BP神經網絡層與層之間都是全鏈接的,對於圖像處理領域,當神經網絡處理大圖像時,全鏈接會致使待訓練的參數很是龐大,好比100萬個像素的圖像,對於100個節點的隱層,則會產生億級別的參數,若是更多層及更多個節點那參數數量將會無比龐大。此外,傳統BP神經網絡沒有假設相鄰圖像之間存在緊密聯繫。綜上所述,BP神經網絡不適合作圖像處理。git
爲減小參數數量,首先想到能夠構建部分鏈接的神經網絡,每一個神經元再也不與上層全部神經元相連,而是鏈接某部分。另外還能經過權值共享來減小參數數量,一組鏈接共享權重而沒必要每一個鏈接權重都不一樣。除此以外,還能經過池化來減小每層的樣本數,從而減小參數數量。結合以上特色,卷積神經網絡就是這樣的一種網絡。github
看一個卷積神經網絡示意圖,它包含了若干卷積層、池化層和全鏈接層。圖像輸入通過第一層卷積層處理後,獲得4層feature,爲何能夠是4層呢?其實就是能夠自定義4個不一樣的filter對輸入分別運算,就獲得4層feature。而後池化層對卷積後的feature進行池化處理,獲得更小的feature,這裏運算後一樣是4層feature。接着繼續根據filter作卷積和池化處理,最後經過兩個全鏈接層完成輸出。web
其實有時候咱們很好奇圖片通過卷積神經網絡的每一個層後變成什麼樣子,想了解下這個過程發生了什麼變化,此時咱們就可使用一個工具——Quiver。它開源再github上,github.com/keplr-io/qu… 。經過它能夠很方便對卷及網絡進行探索,以web瀏覽器形式實現對模型的可視化,能夠看到不一樣網絡層的變化。sql
爲方便起見,這裏直接建立VGG16模型實例。經過下面腳本將下載VGG16模型的權重參數(這裏自動下載的是通過Imagenet訓練的模型參數,包含了1000個類別),權重參數總大小達到百兆字節,而後模型被加載到內存中並建立一個監聽5000端口的服務。數組
import keras.applications as apps
from quiver_engine.server import launch
model = apps.vgg16.VGG16()
launch(model, input_folder="data")
複製代碼
訪問瀏覽器,選擇其中一個圖片做爲輸入,左側爲網絡架構圖形,而且點擊不一樣層能夠看到不一樣的輸入。右側的圖片咱們能夠點擊選擇,而後應用程序會自動將其做爲輸入,模型再根據該輸入預測出可能性最高的五個結果。其中能夠看到224x224的輸入,並且是3層,分別表明原始圖像的紅、綠、藍。瀏覽器
而後選擇第一個卷積層,能夠看到經過卷積核的操做後不一樣的特徵被突出,突出的特徵包括不一樣類型的邊緣、亮度和對比度等等。bash
繼續往下能夠看到特徵愈來愈抽象,包含了不一樣的紋理、角度等等,還多是眼睛和鼻子。網絡
繼續往下到最後的卷積層時,此時的特徵已經抽象到咱們人類已經沒法理解了,對於咱們來講,看到的特徵並無任何意義。最終經過徹底鏈接層並獲得包含了1000個元素的機率數組,即對應ImageNet中每一個類別的機率。架構
-------------推薦閱讀------------
個人開源項目彙總(機器&深度學習、NLP、網絡IO、AIML、mysql協議、chatbot)
跟我交流,向我提問:
歡迎關注: