這篇文章 咱們將會介紹一下基於卷積神經網絡的圖像分類器,爲了實現這個圖像分類器,咱們將會建立一個6層的神經網絡用於區分貓咪和狗狗。算法
傳統的神經網絡很是擅長圖像分類,若是在CPU上進行訓練,會獲得更多的參數,而且會花費大量的時間,然而,在這篇文章中,個人目標是向您展現如何使用Tensorflow構建一個真實的卷積神經網絡,而不是參與ILSVRC。在開始學習Tensorflow教程以前,讓咱們先學習卷積神經網絡的基礎知識。網絡
神經網絡本質上是求解優化問題的數學模型,它們是由神經元構成的,神經元是神經網絡的基本計算單元。神經元接受一個輸入(好比x),對它作一些計算(好比:用一個變量w乘以另外一個變量b)來產生一個值(好比;z = wx + b)。這個值被傳遞給一個名爲激活函數(f)的非線性函數,以產生神經元的最終輸出。激活函數有不少種。其中一個經常使用的激活函數是Sigmoid(歸一化)。機器學習
根據激活功能的不一樣,神經元被命名爲RELU, TanH等(記住這一點)。一個神經元能夠鏈接多個神經元。函數
這個例子中,你能夠看到權值是鏈接的屬性,即每一個鏈接都有不一樣的權值,而誤差是神經元的屬性。這是生成輸出y的SIGMOID神經元的全圖。學習
若是你把神經元堆成一行,就叫作層;這是神經網絡的下一個組成部分。優化
正如你在上面看到的,綠色的神經元組成1層,這是網絡的第一層,輸入數據經過它傳遞到網絡。相似地,最後一層稱爲輸出層,如紅色所示。輸入層和輸出層之間的層稱爲隱藏層。在這個例子中,咱們只有一個藍色的隱藏層。有許多隱含層的網絡每每更準確,被稱爲深度網絡,所以使用這些深度網絡的機器學習算法被稱爲深度學習。blog
一般,一個層中的全部神經元都作相似的數學運算,這就是這個層的名字的由來(除了輸入層和輸出層,由於它們只作不多的數學運算)。下面是你應該知道的最流行的層類型:教程
卷積是一種數學運算,它用於單次處理中對信號進行濾波,尋找信號中的模式等。在卷積層中,全部的神經元都對輸入進行卷積運算,所以稱爲卷積神經元。get
卷積神經元中最重要的參數是濾波器的大小,假設咱們有一個濾波器大小爲5*5*3的層。同時,假設輸入卷積神經元的圖像大小爲32*32,有3個通道。咱們從圖像中選擇一個5*5*3(3表示彩色圖像中的通道數)大小的塊,並計算與濾波器(w)的卷積(點積)。這個卷積運算會獲得一個單獨的數字做爲輸出。咱們還將把誤差(b)加到這個輸出中。深度學習
爲了計算點積,過濾器的第三維必須與輸入中的通道數相同。也就是說,當咱們計算點積的時候,它是一個矩陣乘以5*5*3大小的塊和5*5*3大小的濾波器。咱們將卷積濾波器滑過整個輸入圖像來計算整個圖像的輸出,以下圖所示:
池化層主要是在卷積層以後當即使用,以減小空間大小(僅限寬度和高度,不包括深度)。這減小了參數的數量,從而減小了計算量。此外,較少的參數能夠避免過擬合(如今不要擔憂,稍後將對此進行描述)。最多見的池形式是Max pooling,咱們使用大小爲F*F的過濾器,並對圖像大小爲F*F的部分應用最大操做。
若是一層中的每一個神經元都接收到來自前一層中全部神經元的輸入,那麼這一層稱爲徹底鏈接層。該層的輸出由矩陣乘法和偏置偏移量計算。
reference:https://cv-tricks.com/tensorflow-tutorial/training-convolutional-neural-network-for-image-classification/